[CMU15445] 05 - Database Storage 3

[toc]

[CMU15445] 05 - Database Storage 3

Database Workloads

  • On-Line Transaction Processing(OLTP):每次只對整個(gè)數(shù)據(jù)庫的一小部分?jǐn)?shù)據(jù)進(jìn)行讀寫操作,通常寫操作多余讀操作,例如你在淘寶購物車中添加商品,下訂單等
  • On-Line Analytical Processing(OLAP):每次會對大量的數(shù)據(jù)進(jìn)行操作,基本全部為讀操作,很少有寫操作,并且每次通常只會對一條記錄的幾個(gè)屬性操作
  • Hybrid Transaction Analytical Processing(HTAP):同時(shí)兼顧了OLAP和OLTP的功能,屬于上述兩者的結(jié)合

Storage Models

存儲模型主要分為行存儲和列存儲

N-Ary Storage Model(NSM)

N-Ary將一條記錄的所有字段都連續(xù)的存儲在一起,所以也叫行存儲,適合用在OLTP的場景

image.png

優(yōu)點(diǎn):

  • 由于整個(gè)記錄是存在一起的,可以快速的對一條記錄進(jìn)行插入,修改和刪除
  • 對于需要用到整條記錄的查詢效率很高

缺點(diǎn):

  • 對于一個(gè)需要查詢大量的數(shù)據(jù),但是只需要用到里面幾個(gè)字段的查詢,行存儲的效率很低
image.png

Decomposition Storage Model(DSM)

在DSM中,將不同記錄的相同屬性連續(xù)的存儲,所以也叫列存儲,非常適合OLAP的應(yīng)用場景

image.png

對于DSM,一個(gè)問題就是當(dāng)我們需要一整個(gè)記錄的時(shí)候怎么辦,通常會有以下方法

  1. Fixed-length Offsets

對于每一列的存儲,所有的字段都是定長的,所以查詢特定的字段可以通過偏移量來實(shí)現(xiàn)

image.png
  1. Embedded Tuple Ids

在每一個(gè)記錄中的每一個(gè)屬性多存儲一個(gè)Id,單獨(dú)維護(hù)一個(gè)map,可以通過id映射到各個(gè)字段的位置,這樣做需要大量額外的存儲空間,所以一般不用這種

image.png

總結(jié)一下DSM的優(yōu)點(diǎn):

  • 因?yàn)閿?shù)據(jù)是按列存儲,對于特定查詢某列,只需要讀入該部分的數(shù)據(jù),減少了不必需要的I/O
  • 因?yàn)槭前戳写鎯?,通常一列的?shù)據(jù)都來自同樣的域(domain),所以可以更好的支持查詢處理和壓縮

缺點(diǎn):

  • 因?yàn)榱写鎯⒁粭l記錄分開存儲,所以對于整個(gè)記錄的查詢,插入,更新,刪除等操作很慢

Database Compression

通常在一個(gè)數(shù)據(jù)庫中,性能的瓶頸總是卡在磁盤上,如果將數(shù)據(jù)壓縮,這樣就可以一次從磁盤讀取更多的數(shù)據(jù),從而提高性能

數(shù)據(jù)庫的壓縮需要平衡壓縮率和速度,通常將數(shù)據(jù)壓縮的更小在處理時(shí)就需要花費(fèi)更多的時(shí)間,所以大多數(shù)數(shù)據(jù)庫壓縮算法都會有一個(gè)較低的壓縮率來保證速度

數(shù)據(jù)庫壓縮算法有以下要求:

  • 數(shù)據(jù)在壓縮后也應(yīng)該是定長的字段,以便通過offset來索引
  • 在需要對數(shù)據(jù)進(jìn)行操作時(shí),盡量延遲解壓縮的時(shí)間,也就是能不解壓縮就不解壓縮
  • 壓縮一定是無損的

壓縮通常有不同的粒度,可以將整塊的數(shù)據(jù)壓縮(block-level),也可以將每一行(tuple-level),每一列(column-level),或者一行中的某一個(gè)字段(attribute-level)

下面介紹一些常用的壓縮算法:

1.Run-length Encoding

將相同的記錄壓縮成一個(gè)三元組(value,start,length)

image.png

在一個(gè)已經(jīng)排序好的數(shù)據(jù)上壓縮效果會更好

image.png
  1. Bit-packing Encoding

如果所有要存儲的值可以使用一個(gè)更小的數(shù)據(jù)類型來存儲,就換成更小的類型,例如一個(gè)int64字段,但是最大的值只有45,就可以壓縮成8bit的存儲

image.png
  1. Bit-map Encoding

使用一個(gè)bit array來存儲值,map的每一位表示一種不同的值,通常用于值的種類較少的情況,例如性別

image.png
  1. Delta Encoding

對于時(shí)間,溫度之類的存儲,存儲他和上一個(gè)數(shù)據(jù)的差值,可以在這個(gè)的基礎(chǔ)上對數(shù)據(jù)壓縮,得到更小的數(shù)據(jù)

image.png
  1. Dictionary Encoding

將一個(gè)記錄拆成許多word的組合,建立一個(gè)字典來記錄word,建立一個(gè)id到word的映射,在查詢時(shí)可以將word轉(zhuǎn)換為id,這樣就可以直接在壓縮的數(shù)據(jù)上進(jìn)行查詢,對于范圍查詢,可以將整個(gè)字典進(jìn)行排序


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

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

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