ElasticSearch总结

ElasticSearch总结

ES的数据结构:index -> type -> document -> field。

每一个索引会被分为多个shard,每个shard保存部分数据,分别放在不同节点上。
shard有主shard允许读写,从shard允许读,从shard会与主shard同步数据。
ES集群会选举出一个主节点,负责维护索引元数据和管理主shard和从shard。

ES写数据请求:客户端选择一个节点作为自己的协调节点,协调节点根据请求文档进行路由。
把请求转发给主shard所在的节点,当从shard也同步完成了,协调节点才会给客户端响应。

ES读数据请求:客户端选择一个节点作为自己的协调节点,协调节点根据请求文档进行路由。
在主shard和全部从shard节点上轮询一个节点进行请求转发,然后把结果返回给客户端。

ES写数据原理

  1. 将数据写入buffer,在buffer时是不可查询的
  2. buffer快慢或者定时1秒,将buffer数据写入系统缓存里,此时数据可查询。
    ES会定时5秒把系统缓存的数据写到translog文件里,以便重启后恢复。
  3. 当translog文件够大或者定时30分钟,ES会把buffer和translog文件里的数据写到硬盘上。

ES更/删数据原理

删数据会在一个.del文件里标明这个文档已经被删除。而更新则是先删再插入一条新的文档。

倒排索引

对文件提取一些词,标记这些词在哪些文档里出现过,当查询关键字的时候就能快速返回包含关键字的文档。

doc id doc
1 google 推特
2 推特 facebook
3 facebook google
word id word doc id
1 google 1,3
2 推特 1,2
3 facebook 2,3

大数据量ES

  1. 虽然ES把数据写到了硬盘,但是操作系统会对硬盘的数据进行系统缓存到内存里。所以导致第一次查很慢,之后就很快了。
    为了尽量能走系统缓存,应该尽量留多一点可用内存给操作系统而不是服务本身。最好可用内存为数据量的一半或以上
  2. 进行冷热数据分离
  3. ES的数据只保留查询字段,减少数据体积,非查询字段通过文档id再去其他地方查
  4. 数据预热
  5. ES的分页查询是每次都是从头查到中间的(像链表那样),不允许深页查,跳页查,可以一次性返回前N页自己分页

ElasticSearch总结
https://cellargalaxy.github.io/posts/中间件/8.ElasticSearch总结/
作者
cellargalaxy
发布于
2020年6月2日
许可协议