在浏览ElasticSearch的权威指南时,我偶然发现了一些谜团。首先确定搜索是近乎实时的,因为更改需要作为新段刷新到文件系统缓存中(默认情况下每秒刷新一次),之后搜索机制才能看到它,并且不使用 fsync,因为它成本太高。
然后是传录。出于某种原因,它可以用来拥有实时 CRUD。因此,引擎首先遍历文件系统缓存中它知道的所有段,并添加它在 translog 中找到的更改。如果 translog 可以实时保持最新,那么实时保持段最新有什么固有问题?是为了防止缓存中的段过多吗?
此外,为什么默认情况下每 5 秒同步一次 translog 没有问题,而段则不能?
段是不可变的。它们永远不会更新,而是与其他段合并以形成更大的细分。通过拥有不可变的段,ElasticSearch 通过页面/文件缓存将缓存卸载到操作系统。
Translog 充当仅追加缓冲区,在刷新后将其提升为持久段。