es 知识点
[TOC]
数据写入过程
Lucene 把每次生成的倒排索引,叫做一个段(segment)。然后另外使用一个 commit 文件,记录索引内所有的 segment。而生成 segment 的数据来源,则是内存中的 buffer。
1、数据写入 --> 进入ES内存 buffer (同时记录到translog)--> 生成倒排索引分片(segment)
2、将 buffer 中的 segment 先同步到文件系统缓存中,然后再刷写到磁盘
ES实时检索
由于在buffer中的索引片先同步到文件系统缓存,再刷写到磁盘。
在检索时可以直接检索文件系统缓存的segment,保证了实时性。
把内存中的数据转换成segment的过程,称refresh。在 Elasticsearch 中,默认 1 秒执行一次。
refresh_interval 参数可修改刷新缓存的时间间隔
ES 同步到磁盘失败:数据恢复-flush过程
由于Elasticsearch 在把数据写入到内存 buffer 的同时,其实还另外记录了一个 translog日志,如果在这期间故障发生时,Elasticsearch会从commit位置开始,恢复整个translog文件中的记录,保证数据的一致性。
等到真正把 segment 刷到磁盘,且 commit 文件进行更新的时候, translog 文件才清空。
副本分片的存储过程
默认情况下ES通过对每个数据的id值进行哈希计算,对索引的主分片取余,就是数据实际应该存储的分片ID。
由于取余这个计算,完全依赖于分母,