數據結構對機械硬碟的優化在對固態硬碟上的優化同樣適用么?

B-Tree等數據結構對磁碟io 的減少是有優化的,但是這樣的優化對固態硬碟也同樣有效么?


你可以參考一下in-memory data base的做法。ssd可能效果還不太明顯,但是放在內存里你就能發現,為什麼要採取新的結構了。


先說結論,優化可能不明顯。

傳統資料庫都是基於磁碟(HDD)的, index和heapfile都是基於磁碟做優化的,磁碟IOPS比較低,所以以往的優化都是基本將隨機讀寫轉為大批量的順序讀寫來做高吞吐率的優化。

B+-Tree的葉子節點就是一堆頁表(page),對應到磁碟就是heapfile的扇區塊,傳統資料庫用heapfile來做存儲,但是數據量太大了,不停的檢索效率還是不高怎麼辦,然後就把這些所有磁碟上的文件用鏈表連接起來啊,這個就是索引。也就是說,傳統資料庫的索引和heapfile文件存儲基本都是針對磁碟來做的優化。

但是你現在想切換到SSD怎麼辦,SSD有很高的IOPS,隨機讀寫性能不錯,順序讀寫略好於HDD的性能,寫入很多時候還會帶來寫入放大的問題,但是你想把以往磁碟優化的包袱都丟了重新設計怎麼可能。如果你的存儲是SSD,那麼我可以粗略的估計一下,高並發的讀取可能性能有提升,寫入多的則沒多少明顯區別。如果我針對磁碟資料庫做了優化,將大量數據緩存在內存中,索引也建的很合適,那估計你用HDD和SSD也沒多大區別。區別就是如果大量緩存不命中的時候,高並發場景下SSD也確實可能略優於HDD。

@vczh提到的內存資料庫,現在內存越來越便宜,都可以當外存使用的時候,將數據緩存在內存中帶來效率上的提升則要大的多了。這個時候呢,傳統資料庫的索引其實是針對磁碟heapfile一類的數據結構優化的,所以in-memory database的B+-Tree也慢慢改成了Cache Sensitive B+-Tree一類的數據結構,index也針對內存做了優化,變成hash index或者cache sensitive一類的index。至於傳統資料庫和現在內存資料庫的區別,那又要列很長的一個專題來講了


說不適用有一些絕對了。

事實上有借鑒的地方。例如,日誌結構文件系統是針對磁碟不善隨機寫而設計的,flash SSD同樣不擅長隨機寫,因此日誌的思想被SSD廣泛應用,在FTL和上層文件系統都可以看到日誌的影子。

而b樹這種結構也仍然有用,多叉樹的深度更小,可以減少io次數,只要SSD仍比DRAM慢,就有意義。


很明顯並不適用… SSD的構造類似內存 而傳統機械硬碟卻用機械臂

besides,現在已經有在研發中的ssd專用文件系統了 就是為了擺脫對傳統機械硬碟優化的現有文件系統

甚至有些存儲陣列廠商專門推出了面向ssd的全新raid方式

歸根到底,這是一場從馬車進化到汽車的革命

對馬車的優化是不會對汽車有什麼好效果的

ssd與機械硬碟之間同理


我推測可能會造成負優化,不然fuisionio當時搞個新的系統都能市值幾億美元,這套nvmkv好像就是去掉了那些東西直接新搞了一套系統。對於高強度的io來說,可能原有的文件管理方式不怎麼科學


推薦閱讀:

硬碟數據恢復,北京哪家比較可靠?
PC是如何確定哪個硬碟是主硬碟的?
usb2.0的硬碟可以通過換硬碟盒變成usb3.0硬碟么?
如果裝有軍事機密的硬碟被刪除,在用其他文件覆蓋達(或者低級格式化)幾十次,可以恢復嗎?
固態硬碟什麼時候能降價呢?

TAG:計算機 | 固態硬碟 | 硬碟 | 數據結構 |