如何解决为什么 lucene 的段是不可变的
众所周知,在elasticsearch中更新或删除文档内容时,该段不是立即删除,而是新创建的。
在那之后,我们知道段是通过时间表合并的。
我知道这样做的原因是因为它很贵。
但我不知道段不可变且不立即合并的确切原因。
即使我搜索文档,也找不到确切原因,但如果有人知道这一点,请评论。
谢谢。
解决方法
段不可变提供了很多好处,例如
- 它可以在多线程环境中轻松使用,因为内容是不可更改的,当您拥有可变内容时,您不必担心共享状态和竞争条件以及很多复杂性。
- 它可以被有效地缓存,因为缓存快速变化的数据集会违背缓存的目的。
请参阅以下来自官方 ES 文档的内容,了解为什么 lucene segments are cache friendly
Lucene 旨在利用底层操作系统进行内存缓存 数据结构。 Lucene 段存储在单独的文件中。 因为段是不可变的,所以这些文件永远不会改变。这使得 它们对缓存非常友好,底层操作系统会很高兴地保持热度 段驻留在内存中以加快访问速度。这些细分市场包括 倒排索引(用于全文搜索)和文档值(用于 聚合)。
一般也参考 benefits of immutable data 了解更多详情。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。