《全栈工程师修炼指南》学习笔记 22
2023-02-27 本文已影响0人
VioletJack
搜索引擎
最简单的数据查找方式,但如果面对大量数据这种行为需要全表扫描,是非常低效的。
select * from ARTICLES where CONTENT like '%存储%';
倒排索引
- 倒排,指的是先定位到关键字,再去看关键字属于哪些文章
- 索引,指的是关键字十倍索引起来的,所以查询速度会比较快。
Elasticsearch
Elasticsearch 将关键字使用哈希算法分散到多个不同的被称为 Shard 的虚拟节点,并且把他们部署到不同的机器节点上。且每个 Shard 具备指定数量的冗余副本,这些副本被要求放置到不同的物理机器节点上。保证每台机器都制管理稳定且可控的数据量,并且保证了搜索服务数据的可用性。
地理信息系统
方案一:根据商家 ID 记录它所在位置的经纬度。当用户选中某块地图后,根地图边界的经纬度来查询地图范围内的商户。效率很慢。
方案二:给商家的经度和维度分别索引。当用户选中某块地图后,先按照经查找商家。再将这些商家按照维度排序,通过二分法找到目标商户。优化了查找算法,快了不少。
方案三:使用 GeoHash,即将经纬度的数值交叉混合。如此可以根据地图精度截取 Hash 前 n 位的字符串进行匹配。字符串越长精度越高。
SQL 和 NoSQL 如何选择
如何选择数据库,可以按照以下两个方面考虑。
- 数据分类
- 数据规模
我们在选择技术的时候,很可能要针对每一类数据选择一组技术,而不是笼统的选择一项技术。
选择数据库的思路
- 对于中小型系统,在数据量不大且没有特殊吞吐量、可用性等要求下,或者在多种关系和非关系数据库都满足业务需求的情况下,优先考虑关系数据库。因为关系数据库更加成熟、功能强大、也有较强扩展能力。
- 是否具备明确的 schema 定义,是否需要支持关系查询的事务?如果有需要的,优先考虑关系数据库。
- 如果符合结构不定、高伸缩性、最终一致性、高性能的特点和要求,可以考虑非关系数据库。