繁体   English   中英

Lucene 索引建模 - 为什么使用跳过列表而不是 btree?

[英]Lucene index modeling - Why are skiplists used instead of btree?

我最近开始学习 lucene 并了解 lucene 如何存储和查询索引。 Lucene 似乎使用跳过列表作为基础数据结构。 但是,我没有找到任何理由在二叉树上使用跳过列表。

跳过列表的优点是它在同时使用时提供了良好的性能。 并且 lucene 允许每个索引的单个写入线程和读取不可变段的读取,因此跳过列表在这里也没有帮助。 除了二叉树(自平衡)胜过跳过列表 - 因为它为读取和写入提供了 O(logn) 的最坏情况复杂度,而跳过列表在平均情况下提供相同的时间复杂度。 此外,与跳过列表相比,二叉树将在更好的时间内提供范围查询。 为了提供联合查询,lucene 使用多个发布列表的跳过列表来查找它们的交集 - 对于这种情况,二叉树就足够了。

是否有任何特定原因在 lucene 中使用跳过列表用于我错过的索引目的?

Lucene 使用磁盘上的 Skip-Lists 构建倒排索引,然后使用有限 State 传感器将索引项的映射加载到 memory 中。 请参阅此 SO 答案以了解 lucene 如何索引文档?

在那个答案中,它还表明使用 Skip- Lists的主要好处是它避免了重新平衡 B-Tree。 如果您想更深入地挖掘该答案,请引用另一个提供更多详细信息的答案: Skip List vs. Binary Search Tree实习生参考了其他白皮书。

对此进行更多研究,使用 Skip-Lists 而不是 BTree 还有另一个优点。 不仅避免了重新平衡,而且避免了在重新平衡发生时锁定树的一部分。 这方面将在此处进一步讨论。 后一个优点提高了并发性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM