boltdb的實現和改進


 

整個代碼不是很復雜,可以從代碼中理解如何實現。

特點:btree,很小巧,但實現了完整事務機制,穩定,即使丟電也不會導致數據庫錯誤。

 

整個結構如下:

meta page (前兩頁) --- > freelist page (第三頁)
                  |
                  -----> bucket page (屬於leaf page 開始是第4頁) -> branch page -> leaf page
                                 |
                                 ---------> inline page(放在bucket page上) 

 

事務:

修改會產生鏡像頁,在寫入的時候,先寫所有鏡像頁,然后再寫指向鏡像頁的meta page,如果鏡像頁沒寫完,程序就崩潰了,不影響之前的數據,因為meta page沒有指向鏡像頁,如果meta page只寫了一半,那么可以用checkSum檢查出來,meta page雙備份。

如果事務未提交,meta page不會指向鏡像頁,也就不會讀到事務中的數據。

 

問題:

沒做repetable_read級別的事務實現,直接serialize級別的,不允許同時寫(但允許寫時讀),所以導致寫入慢。

默認每次寫都刷盤,大大拉低速度。這個可以調。

內存占用隨着數據變得太大,這個我覺得是代碼本身的問題,太多的東西序列化到了內存,這部分的代碼也寫得不好,太晦澀,難改。

 

改進的方法?:

增加一個持久層(線性寫入)和內存層(用於查詢,未寫入boltdb之前寫入內存),提升並發,然后再批量寫入boltdb。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM