我有一個項目,我必須在數據範圍從兆字節到兆字節的範圍內實現快速搜索,插入和刪除操作。我一直在研究最近的數據結構並分析它們。作爲具體的,我想對引進3例,提出問題:紅黑樹與B樹
的數據比什麼內存可以一氣呵成處理(10-15 TB的樣本範圍)等等。在這種情況下,我會將數據結構存儲在磁盤上。
與系統的內存相比,數據相對較少,因此可以在存儲器本身中存儲和操作以提高速度。
數據不僅僅是空閒內存,並且假定它小於分頁文件中可能的連續數據塊的大小。因此我將數據結構存儲在磁盤上的一個文件中,並執行文件的內存映射。
我已經得出的結論是:
對於情況1,I應,因爲它節省了由磁盤旋轉產生滯後使用B樹以便更快地訪問
對於情況2,I應該使用紅色黑色樹來更快地訪問數據,因爲數據在內存中並且沒有。在最壞的情況下需要掃描的元素將少於我使用B樹時必須要做的一個元素
對於案例3,我對此有疑問,頁面文件在磁盤上使用本機OS I/O對文件進行操作,那麼B樹應該是更好的選擇還是紅黑樹?
我想知道上述三個結論是正確的,哪裏出了問題,以及如何在三個不同的情況下改進性能。
我使用的是C++語言,帶有一個紅黑樹和一個B樹,兩者都是我從頭開始設計的。我正在使用Boost庫進行文件映射。
更新1 ::通過this通過閱讀文章在stackoverflow。得到了一些真正的好的見解,這讓我覺得我在案例中所做的比較類型可能是錯誤的。答案最多的一個鏈接發佈了http://idlebox.net/2007/stx-btree/stx-btree-0.8.3/doxygen-html/speedtest.html
你要做什麼樣的搜索?按鍵簡單搜索?鑰匙是怎麼樣的? – svick
你或多或少正確。 繼續執行,如果遇到問題,請在此處詢問。 – nikhil
@svick是的我正在按鍵進行簡單的搜索,以最一般的方式,他們可能是一個謹慎的,或以數字連續的順序,從1開始的不同的自然數集合表示一個值,如(2^8)-1 – swanar