1. 程式人生 > >終於知道:為什麼記憶體很適合用hash方式儲存/訪問,磁碟則適合用b樹方式~

終於知道:為什麼記憶體很適合用hash方式儲存/訪問,磁碟則適合用b樹方式~

我們使用hash尋找資料的時候,資料隨機分散到各個物理位置。不是有序的資料。而記憶體裝置也是隨機訪問裝置。記憶體很適合用hash方式來讀取資料。比如memcached、redis等這些記憶體快取,都是使用key-value形式來讀取資料的

記憶體是一個隨機儲存裝置,隨機儲存裝置,我覺得是相對順序儲存裝置而言的。機械硬碟儲存,讀取速度會影響整體速度,比如就近讀取就會快。主存的資料讀取與先後順序無關。是典型的隨機訪問裝置。很適合hash資料結構查詢。


如何理解記憶體中資料的讀取與先後順序無關? 熟悉了記憶體儲存原理,才知道,為什麼記憶體是隨機儲存裝置。


這張圖很好的幫我理解了記憶體的資料讀取方式。感謝作者。

把記憶體裡面的儲存空間,看成是一個一個的單元格組成的矩陣,每個單元格就是儲存資料的。

資料d1,d2,d3分別分散儲存在記憶體中的各個單元格子裡面。

要讀取資料d1。通過一個行地址和一個列地址可以唯一定位到一個儲存單元。

隨便資料儲存在哪個單元個子裡面,都能通過行地址與列地址快速定位找到資料所在的單元格。

假設要讀取資料d1、d2、d3。先讀取d1,還是先讀取d3,對於整體速度是沒有影響的。因為定位每個單元格子所需要的操作是一樣的(行地址與列地址)

所以,讀取的速度是與讀取順序無關的。


而在硬碟中則不同,硬碟的磁頭要進行定位,如何資料在磁頭附近,則直接移過去即可。如果接下來要讀取的資料不在磁頭附近,又需要讓磁碟片重新轉一圈才行(磁頭不轉動,碟片轉動

,所以需要讓資料所在區域轉動到到磁頭位置下,以便磁頭讀取資料),這就需要耗費磁碟i/o。在磁碟扇區,相臨近的資料,能減少碟片轉動,所以安排資料的先後讀取順序其實就是減少了碟片轉動。比如把需要一起訪問的資料放到同一個柱面上,就是一種方式。


這時候,理解了為什麼記憶體很適合用hash方式存取資料。是與隨機儲存裝置有關。

磁碟靠物理旋轉來定位讀取資料,於是存在尋道時間和旋轉延遲。記憶體查詢資料不存在這種問題。

有的對比,就更加了解硬碟為什麼很適合用b樹方式作為資料結構。不適合使用hash方式來組織資料。

可以這樣理解:記憶體與磁碟儲存的原理的不同,使得記憶體很適合hash方式訪問資料,磁碟則很適合使用b樹形式組織資料。


轉載自https://www.cnblogs.com/wangtao_20/p/3643994.html