簡體   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