簡體   English   中英

使用鎖插入B +樹

[英]Inserting into B+ tree using locks

我試圖弄清楚如何使用鎖將項目插入B +樹,但我並不真正了解其背后的理論。

因此,對於搜索,我的看法是,我在根節點上放了一個鎖,然后決定應該去哪個子節點並對其進行鎖定,這時我可以釋放父節點並繼續執行此操作,直到到達葉節點為止。

但是插入要復雜得多,因為我不允許任何其他線程干擾插入。 我的想法是在到葉子節點的路徑上的每個節點上放置一個鎖,但是放置那么多鎖非常昂貴,然后我要問的是,當葉子節點因太大而分裂時會發生什么?

有人知道如何使用鎖將項目正確插入B +樹嗎?

通常,有許多不同的策略可用於處理B樹中的鎖定。 由於它們已經在該領域占據主導地位,因此大多數實際上都涉及B + Tree及其變體。 總結這些戰略,就等於總結了四個十年的進展; 這幾乎是不可能的。 這里有一些亮點。

最小化初始下降過程中鎖定量的一種策略是,不鎖定從根開始的整個路徑,而是僅鎖定從最后一個“穩定”節點(即,不會分裂或合並為一個節點)開始的子路徑。當前計划的操作的結果)。

另一種策略是假設不會發生拆分或合並,這在大多數情況下都是正確的。 這意味着可以通過僅鎖定當前節點來完成下降,子節點將下降到下一個節點,然后釋放先前在“當前”節點上的鎖定,依此類推。 如果事實證明畢竟有必要進行拆分或合並,則在較重的鎖定機制(即,根植於最后一個穩定節點的路徑)下從根目錄重新下降。

技巧包中的另一個主要目的是通過預防性的拆分/合並來確保每個“下降的節點”都是穩定的。 就是說,當當前節點在從下面冒泡的更改下拆分或合並時,它會在繼續下降之前立即拆分/合並。 這可以簡化操作(包括鎖定),並且在重新設計輪子時頗為流行-作業分配和“我也是”實現,而不是復雜的生產級系統。

一些策略允許執行大多數正常操作而沒有任何鎖定,但是通常它們需要對標准B + Tree結構進行一些修改; 例如,請參見B鏈接樹 這意味着在樹上操作的不同並發線程可以“查看”該樹的不同物理視圖-取決於它們何時到達何處以及遵循哪個鏈接-但它們都看到相同的邏輯視圖。

開創性論文和良好概述:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM