1.磁盤IO
https://tech.meituan.com/2017/05/19/about-desk-io.html
PageCache BufferCache
2.順序IO與隨機IO
https://www.zhihu.com/question/370950509
BTrees
寫:將要寫的block加載到內(nèi)存,然后更新放回PageCache或者同步刷盤;當要寫的數(shù)據(jù)位于不同block時,就涉及多個頁,需要隨機寫
讀:首先加載根節(jié)點對應(yīng)的block,然后不斷找對應(yīng)的子節(jié)點,每次換頁都需要加載對應(yīng)的數(shù)據(jù)到內(nèi)存,但是整體幾乎是順序讀,對范圍查詢友好
LSM+SSTable
寫:先寫到memtable,然后到達閾值寫到磁盤(這是一整塊寫,順序?qū)懢蛪蛄耍鄠€SSTable的合并會造成讀寫放大,但是合并相當于兩段有序數(shù)據(jù)的合并,時間復(fù)雜度是o(n)
讀:先判斷在不在內(nèi)存的memtable,取決于內(nèi)存的數(shù)據(jù)結(jié)構(gòu)一般很快;不在的話,按照層級去讀SSTable,先讀Footer,得到Index和Filter,利用Filter過濾不存在的大部分情況,剩下的數(shù)據(jù)通過Index找到區(qū)間,然后讀出相關(guān)數(shù)據(jù);SSTable是允許key重復(fù)的,利用時間的most recent原則拆分數(shù)據(jù)