0%

elasticsearch过程分析

elasticsearch过程分析

索引文档

当用户向一个节点提交了一个创建文档的请求,节点会计算文档应该加入到哪个分片中,每个节点都存储了每个分片存储在哪个节点的信息,因此协调节点会将请求发送到对应的节点,当主分片完成索引,会将请求发送到所有的副本,保持每个分片的数据都是最新的

每次写入新文档时,都会先写到内存中,然后将这一操作写入translog文件中,此时如果执行搜索,是无法索引到对应文档的。elasticsearch会每隔一段时间(index.translog.sync_interval)进行一次刷新操作,此时内存中的文档会被写入一个文件系统缓存中,并构成一个segment,此时segment内的文档可以被搜索到,但是还未写入磁盘,如果发生断电,这些文档仍可能丢失。

段合并

随着越来越多的文档写入,将会生成很多的segment,而translog也在不断的增大,当经过一段时间(index.refresh_interval)则执行fsync操作,将所有文件系统缓存中的segment写入磁盘,而translog会被删除(如果fsync还没有执行突然断电了,此时的translog是保留的,elasticsearch可以根据translog来进行数据的还原和恢复)

segment过多也会导致查询性能的下降,所以elasticsearch会自动的进行segment的合并

好处

  • 当一些索引段合并为一个索引段的时候,会减少索引段的数量并提高搜索速度
  • 段合并时会移除被标记为已删除的那些文档,所以也会减少索引的容量

欢迎关注我的其它发布渠道