簡體   English   中英

B+Tree 中的數據應該排序嗎?我應該一次加載多少數據?

[英]Should data in B+Tree be ordered and how much data should I be loading at a time?

在我的 B+Tree 中,我在葉級別對鍵進行了排序,並帶有指向單獨數據文件的數據指針。 這個問題指的是這個數據文件中的數據順序。

正如我所見,訂購時:

  • 讀取時將所有數據加載到塊中更容易,因為數據與其鍵的存儲順序相同,因此您只需檢查相鄰數據指針是否在同一塊中。

  • 訪問大量相鄰數據或執行范圍時讀取較少,因為數據更有可能包含在同一塊中。

  • 刪除/拆分/插入時增加碎片和寫入

未訂購時:

  • 插入時減少寫入,因為數據只是附加到與節點關聯的最后一個塊的末尾。

  • 執行范圍時增加讀取,因為數據不太可能在多個塊之間拆分。

  • 在同一塊中找到其他數據所屬的條目要慢得多,因為您必須遍歷節點中的所有條目以檢查它們的數據指針。

或者,當我需要從該節點內的條目訪問數據時,是否應該將整個節點加載到內存中?

尋找關於我應該存儲數據(有序/無序)的最佳方式的第二個選項,以及在對一個值執行簡單的“獲取”時應該加載多少個數據指針?

謝謝!

或者,當我需要從該節點內的條目訪問數據時,是否應該將整個節點加載到內存中?

絕對地。 這就是 B 樹數據結構家族背后的想法。 它不適用於從/向慢速存儲讀取/寫入部分節點(塊)。 當需要一個節點時,它會被完整地讀入內存(如果尚未加載)、操作並完全寫回以保持它。

由於節點本身中的數據操作發生在內存中,因此選擇是否保持節點內容排序變得不那么重要了。 對較慢(更)存儲的讀/寫操作將更多地決定整體性能。

考慮任一選擇的時間復雜度也無關緊要,因為節點中的鍵數有一個預設的最大值。 所以所有的單節點操作都可以被認為具有恆定的時間復雜度。

您可以對不同的實現進行計時,看看這是否會導致明確的選擇。 這個選擇將取決於 B 樹的程度。

暫無
暫無

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

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