B樹 是怎麼存到硬碟上的?

時間 2021-06-01 02:33:51

1樓:

我只說我了解的乙個具體實現,即boltdb https://github.com/boltdb/bolt該實現中,將資料查詢的演算法(即b+樹)與資料的儲存(即題主的問題所在)抽象為2個概念:

node和page

page對應著作業系統記憶體頁的最小分配單位(這裡又牽涉到另外乙個概念:mmap,作者出於效能等原因的考慮,使用這種方式使資料落地)

具體實現則是,page對node暴露了branch和leaf這2個介面,用於node組織b+樹結構,同時page將branch和leaf對應的資料序列化後寫入到硬碟中由於node本身為b+樹結構,所以檢索(即資料查詢)自然而然是標準的樹查詢演算法,查詢到相應的leaf節點後,從page中載入資料返回給上層呼叫

2樓:「已登出」

演算法是超脫形式的存在。

磁碟,具體是什麼先不管,演算法上,或者說數學上,是否可以認為是可以在位置n上儲存數字m的乙個裝置?

比如你要在磁碟的第100345個位置上放乙個數字31415926,可能需要在乙個硬體暫存器上放100345,然後在另乙個硬體暫存器上寫31415,還給另乙個暫存器放926,然後在第三個暫存器上放上1(寫)這個標記,然後等待10ms,再寫乙個0標記,表示開始……

無論如何,最終在演算法模型上,都是disk[100345]=31415926。

這樣,無論形式如何,100345都是指標,這個寫操作永遠都是「定址」和「寫」的過程。

你們是怎麼備份硬碟裡的資料的呢?

玩命快客 目前本人備份資料量5.6TB,用了一塊6T硬碟,一塊8T硬碟,兩塊盤裡的東西完全相同 在考慮過各種方案後個人應用場景最實用的還是大容量硬碟暴力全量備份,也就是Ctrl C Ctrl V複製貼上,主要有以下優點 成本 很低,除了硬碟就是幾十塊乙個SATA轉USB硬碟盒 安全性 乙份不行兩份,...

汽車儀錶盤上的那個黃燈老亮著是怎麼回事?

北京車王科技 這個是發動機故障燈 有時你會發現,在加完油之後沒多久發動機故障燈就亮了,但啟動車子後發現發動機運轉 聲音都正常。這一般就是汽油的問題所導致,一般加點汽油新增劑或者這次油用沒之後再重新加註汽油就可以了。出現這種情況車輛可以繼續行駛,無安全隱患。還有一種情況就是,開著開著發動機故障燈就自己...

B站的分頁是怎麼實現的?

橘子輝煌 簡單說一下,B站應該是用vue axios做的 axios你可以看作是原生XHR的一層封裝,和ajax都一樣都可以無重新整理渲染。具體你可以看下vue的單頁面應用。它的整體其實就是乙個單頁面只不過每次跳轉只是切換了乙個路由而已。 sun ample VUE可以進行路由繫結,實現url變動的...