为什么lucene的段是不可变的

wed*_*dul 3 lucene immutability segment elasticsearch

众所周知,当elasticsearch中更新或删除文档内容时,该段并不会立即删除,而是重新创建。

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

我知道它之所以这样工作是因为它很昂贵。

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

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

谢谢。

Ami*_*wal 5

拥有不可变的段可以带来很多好处,例如

  1. 它可以很容易地在多线程环境中使用,因为内容是不可更改的,当您有可变内容时,您不必担心共享状态和竞争条件以及大量的复杂性。
  2. 它可以被有效地缓存,因为缓存快速变化的数据集将违背缓存的目的。

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

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

有关更多详细信息,另请参阅一般不可变数据的优点。