[CMU15445] 04 - Database Storage 2

[CMU15445] 04 - Database Storage 2

Log_Structured Storage

image.png

基于日志的存儲(chǔ)比起原來(lái)的面向tuple的存儲(chǔ),只允許append新內(nèi)容而不允許修改舊的內(nèi)容,對(duì)于一個(gè)page來(lái)說(shuō),基于日志的存儲(chǔ)就一直不斷地append append的添加新內(nèi)容,當(dāng)日志大小超過(guò)一個(gè)page的大小,此時(shí)它便被寫入磁盤。對(duì)于刪除一個(gè)元素,就相當(dāng)于將該元素的值置為一個(gè)已刪除的標(biāo)記。

比起tuple-oriented的存儲(chǔ),log-structure存儲(chǔ)提高的寫性能,主要原因如下:

  • append only,使用順序I/O代替了原來(lái)的隨機(jī)I/O
  • 所有寫入的數(shù)據(jù)都是inmutable的

對(duì)于讀來(lái)說(shuō),log_structure先從內(nèi)存中的page開始尋找,如果沒(méi)找到,就會(huì)從新到舊在磁盤上的page中尋找,為了避免這種linear scan,通常會(huì)維護(hù)存儲(chǔ)元素的最新日志的索引,以便快速確定他在塊中哪個(gè)位置。

因?yàn)椴粩嗟豠ppend,所以日志會(huì)變得越來(lái)越大,需要按照一定策略對(duì)這些文件進(jìn)行合并,也就是對(duì)于一個(gè)相同的key,只保留它最新的一條log,這樣merge結(jié)束后,一個(gè)文件中一個(gè)key就只有一個(gè)記錄了,同時(shí)在merge的時(shí)候,會(huì)將key排序后merge,這樣的數(shù)據(jù)結(jié)構(gòu)叫做 Sorted String Tables (SSTables)

image.png
image.png

Data Representation

float/real vs numeric/decimal

數(shù)據(jù)庫(kù)在存儲(chǔ)數(shù)字時(shí),如果要求精確就應(yīng)該使用 decimal/numeric 這些類型,這些類型在底層并不是當(dāng)作數(shù)字直接存儲(chǔ)的,所以對(duì)他們做運(yùn)算比較慢,而如果不要求很精確,就可以使用 float/real 類型,這些都是近似值但是運(yùn)算起來(lái)很快。

large values

如果一個(gè)tuple的某個(gè)字段數(shù)據(jù)很大超過(guò)了一個(gè)頁(yè)的大小,就需要另外存儲(chǔ)這個(gè)字段,通常有兩種方法,兩者的區(qū)別在于數(shù)據(jù)是否由數(shù)據(jù)庫(kù)直接管理:

  • overflow pages

使用額外的溢出頁(yè)來(lái)存儲(chǔ)數(shù)據(jù),原來(lái)字段的內(nèi)容變成指向溢出頁(yè)的指針

image.png
  • external storage

數(shù)據(jù)存儲(chǔ)在外部的文件中,原來(lái)的字段保存指向外部文件的uri,適用于很大的文件,例如視頻,很長(zhǎng)的文章等,缺點(diǎn)是這個(gè)文件并不由數(shù)據(jù)庫(kù)管理,會(huì)有concurrence等問(wèn)題

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容