问题:为什么lucene的段是不可变的

众所周知,当在elasticsearch中更新或删除文档的内容时,segment并不是立即删除,而是新创建的。

在那之后,我们知道段是通过时间表合并的。

我知道它这样工作的原因是因为它很贵。

但是我不知道为什么段是不可变的并且不立即合并的确切原因。

即使我搜索文档,也找不到确切的原因,但如果有人知道这一点,请发表评论。

谢谢你。

解答

拥有不可变的段提供了很多好处,例如

  1. 可以在多线程环境中轻松使用,因为内容是不可更改的,当您拥有可变内容时,您不必担心共享状态和竞争条件以及很多复杂性。

2.它可以被有效地缓存,因为缓存快速变化的数据集会破坏缓存的目的。

请参阅以下来自官方 ES 文档的内容,了解为什么lucene 段是缓存友好的

Lucene 旨在利用底层操作系统来缓存内存中的数据结构。 Lucene 段存储在单独的文件中。因为段是不可变的,所以这些文件永远不会改变。这使它们对缓存非常友好,并且底层操作系统很乐意将热段保留在内存中以便更快地访问。这些段包括倒排索引(用于全文搜索)和文档值(用于聚合)。

另请参阅不可变数据的好处以了解更多详细信息。

Logo

欢迎大家访问Elastic 中国社区。由Elastic 资深布道师,Elastic 认证工程师,认证分析师,认证可观测性工程师运营管理。

更多推荐