數據庫 存儲 thinking

  • 內存、硬盤,存儲與查找,本質並沒有區別,只是速度不同,都是給定一個地址,就可以訪問。
  • 數據庫,索引,數據庫的內容是存在硬盤中的,考慮查找和插入的時間複雜度。Hash那麼優秀,時間複雜度幾乎爲O(1)O(1),爲什麼還有別的存儲類型,比如有序的數組,時間複雜度爲O(logN)O(logN)。因爲hash有一個侷限,就是它的大小是提前固定的,它不能無限擴展,設想一種極限情況,hash表的大小爲1,那所有的數據都會掛到這個位置的後面,就退化成了數組了,如果不排序的話,查找的時間複雜度就退化爲了O(n)O(n),所以纔會有排序的數組。它可以無限擴展。如果線性存儲的話,查找時間複雜度是O(logn)O(logn),但插入會比較麻煩,找到它該插入的位置可以用O(logn)O(logn)的時間,但要騰個位置出來就要耗費O(n)O(n)的時間複雜度,所以纔會有二叉樹,最好是平衡二叉樹,它無論查找還是插入,時間複雜度都是O(logn)O(logn)。平衡二叉樹的實現有紅黑樹。這已經很好了,還有沒有問題。設想整個樹存在硬盤中,每往下走一層都要訪問一次硬盤,效率也是不好,儘量要少訪問硬盤,內存速度很快,一次多加載一些到內存,會加快速度,所以會有B數,B數就不是二叉樹了,它每個節點可以存儲[B,2B)[B,2B)個元素,形象的說就是把“瘦高”的二叉樹,變爲了“矮胖”的B-樹,可以減少磁盤IO的次數。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章