終於知道:為什麼記憶體很適合用hash方式儲存/訪問,磁碟則適合用b樹方式~
我們使用hash尋找資料的時候,資料隨機分散到各個物理位置。不是有序的資料。而記憶體裝置也是隨機訪問裝置。記憶體很適合用hash方式來讀取資料。比如memcached、redis等這些記憶體快取,都是使用key-value形式來讀取資料的
記憶體是一個隨機儲存裝置,隨機儲存裝置,我覺得是相對順序儲存裝置而言的。機械硬碟儲存,讀取速度會影響整體速度,比如就近讀取就會快。主存的資料讀取與先後順序無關。是典型的隨機訪問裝置。很適合hash資料結構查詢。
如何理解記憶體中資料的讀取與先後順序無關? 熟悉了記憶體儲存原理,才知道,為什麼記憶體是隨機儲存裝置。
這張圖很好的幫我理解了記憶體的資料讀取方式。感謝作者。
把記憶體裡面的儲存空間,看成是一個一個的單元格組成的矩陣,每個單元格就是儲存資料的。
資料d1,d2,d3分別分散儲存在記憶體中的各個單元格子裡面。
要讀取資料d1。通過一個行地址和一個列地址可以唯一定位到一個儲存單元。
隨便資料儲存在哪個單元個子裡面,都能通過行地址與列地址快速定位找到資料所在的單元格。
假設要讀取資料d1、d2、d3。先讀取d1,還是先讀取d3,對於整體速度是沒有影響的。因為定位每個單元格子所需要的操作是一樣的(行地址與列地址)
所以,讀取的速度是與讀取順序無關的。
而在硬碟中則不同,硬碟的磁頭要進行定位,如何資料在磁頭附近,則直接移過去即可。如果接下來要讀取的資料不在磁頭附近,又需要讓磁碟片重新轉一圈才行(磁頭不轉動,碟片轉動
這時候,理解了為什麼記憶體很適合用hash方式存取資料。是與隨機儲存裝置有關。
磁碟靠物理旋轉來定位讀取資料,於是存在尋道時間和旋轉延遲。記憶體查詢資料不存在這種問題。
有的對比,就更加了解硬碟為什麼很適合用b樹方式作為資料結構。不適合使用hash方式來組織資料。
可以這樣理解:記憶體與磁碟儲存的原理的不同,使得記憶體很適合hash方式訪問資料,磁碟則很適合使用b樹形式組織資料。
轉載自https://www.cnblogs.com/wangtao_20/p/3643994.html