MySQLES能为你解决什么问题,又会带来什么问题?
业务需求痛点
- 业务增长 , 查询条件越来越多 , 索引越来越多业务发展初期 , 数据量不多 。 查询 , 写入都很快 。 随着业务的发展 , 数据量增大 , 出现慢查询 , 开始往表里不断的加索引 , 保证数据查询效率 。 但是当数据量继续增大 , 业务查询越来越复杂 。 程序员天天想着这个表怎么加索引 。 索引的增加 , 写入数据的时间成本越来越高 。
- 表数据增加 , 数据拆分越来越复杂数据量增大 , 开始进行分表处理 。 慢慢的发现 , 尼玛 , 分的表越来越多 。 再这么下去 , 这台数据库服务器上都容不下他了 , 这是要做数据分片的操作啊 。 分表已经够费劲了 , 还要分片?
- 全文检索功能嗨 , 哥们 , 给我加个全文搜索的功能 。 简单的一句话 , 你心里十万个草尼马 。 这么多的数据量你让我搞全文搜索 。 上面业务通点总结起来就是要查的快 , 要分布式 , 要全文搜 。
ES 搜索为什么快的原因
本文插图
对于mysql中如上的数据表 , ES会对每个字段的值建立索引 , 通过索引的值去找数据 , 而且这些索引都是在内存里面的 。
name段索引:
本文插图
age字段索引
本文插图
address 字段索引
本文插图
这样 , 当我们要找上海市 , 年龄为21岁的数据就能够通过address,age索引快递定位到数据id=2的是我们需要查找的 。
然后再从磁盘中把数据id=2的数据读取出来 。
上面的其实就是ES中倒排索引的一个简化版本 。
实际上的ES的倒排序使用的是前缀作为索引 , 同时会使用FST对索引数据进行压缩 , 以保证在内存的数据量不会因为索引多而带来比较大的内存消耗 。
本文插图
对于上面的数据表 , 如果采用HashMap的方式对name字段索引的话 , 索引所占用内存20个字节 。
本文插图
但是如果转换成FST结构的话 , 可以用四个字节表示name,总共占用内存为4+4*3=16 。 (假设数据范围只有M,i,e,c) 四个字符 。
本文插图
ES 分布式数据结构设计
- 数据分片均衡分片是 Elasticsearch 在集群中分发数据的关键 。 文档存储在分片中 , 然后分片分配到集群中的节点上 。 当集群扩容或缩小 , Elasticsearch 将会自动在节点间迁移分片 , 以使集群保持平衡 。
- 数据可靠分片有主分片 , 复制分片 。 复制分片只是主分片的一个副本 , 它可以防止硬件故障导致的数据丢失 , 同时可以提供读请求 , 比如搜索或者从别的 shard 取回文档 。 每个主分片都有一个或多个副本分片 , 当主分片异常时 , 副本可以提供数据的查询等操作 。 主分片和对应的副本分片是不会在同一个节点上的。
推荐阅读
- 市党建服务中心|担当使命,勇毅逆行丨“怎么解决最后一公里的问题”——张军萍
- 上观新闻|“神兽”又回家了!暑期玩手机、相看两相厌咋办?这位家教指导老师为你解困惑
- 中南大学本科生招生办|他以花甲之龄挑战"生命禁区",解决世界级难题,当选中国工程院院士!
- 网易娱乐|刘国梁回应"爱钱进"事件:痛心 敦促平台尽快解决
- 手机|手机经常出现这 4 种故障?别花“冤枉钱”找人修,分分钟学会就能解决
- 就要买买买|Android版Firefox浏览器Preview版以解决混乱的版本号
- cnBetaTBAndroid版Firefox浏览器移除Preview版以解决混乱的版本号
- 轻妞Club|5招解决下半身肥胖,肥臀、大象腿不用怕,照做就能瘦
- cnBetaTB|Android版Firefox浏览器移除Preview版以解决混乱的版本号
- 『EMUI』巧用华为手机EMUI自带功能 5个步骤解决系统频繁“杀后台”问题
