一個關於b+樹的問題


最開始完全是采用一個有序索引文件來記錄索引,采用二分搜索來查找。對於新插入的索引直接添加到一個無序的臨時索引文件的尾部,同時在內存中維護一個紅黑樹記錄這些在無序索引文件中的索引以便高速訪問。當這類索引達到一定數量或者收到定時器消息時,將紅黑樹中的索引合並到有序索引文件中。對於10w級別的索引以及索引對應的數據的寫入與查找(對應的數據直接寫到另一個文件)速度還不錯。我這台老pc上平均每秒可以寫1w+以上條數據。后來覺得二分查找的話,及時有緩存與預讀機制,磁盤操作還是比較多。就打算換b+樹。目前剛完成插入的編碼,測試發現就算只寫索引數據都只能達到每秒2000左右的速度,雖然查詢速度確實很快,但也沒有比之前二分的形式快出非常多。感覺這不像是書上看到的b+樹應有的速度啊,有點懷疑我的編碼是不是有問題。

5 个解决方案

#1


用visual studio的性能分析工具看了下,發現是在分裂節點的時候用了_commit函數將數據立即寫入磁盤,這個操作居然占用了百分之八十的時間。。。。。刪掉后每秒可以寫5w左右的索引。不過去掉了這個我是真不放心啊,一旦斷電可能對索引造成毀滅性的破壞。。。。

#2


事務日志

#3


參考MySQL相關源代碼?

#4


加了緩存之后可以做到每秒10w+的索引寫入,讀取10w條只需要一瞬間,懶得去看具體多少了。不過不用commit風險還是較大的

#5


引用 2 樓 zhao4zhong1 的回復:
事務日志
這是什么啊?

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com