終於搞懂了啥是列存儲,啥是行存儲


行式存儲VS 列式存儲

行式存儲

傳統的數據庫是關系型的,且是按行來存儲的。如下圖

 
行式存儲示意圖

觀察上圖,我們不難發現:因為每個人學歷不一樣的原因,只有張三一個人將整行數據都填滿了,李四、王五、趙六的數據都沒有將對應的行填滿。因為這里的行結構是固定的,每一行都一樣,即使你不用,也必須空到那里,而不能沒有,而這樣的空行也是需要占用一定的存儲空間的,如果這樣的空行占比較大,勢必帶來較大的存儲空間的浪費,那么是否有什么好的解決辦法么?

列式存儲

為了與傳統的區別,新型數據庫叫做非關系型數據庫,是按列來存儲的。如下圖:

 
列式存儲示意圖

下面給出行存儲與列存儲的映射關系:

原來張三的一列(單元格)數據對應現在張三的一行數據。原來張三的六列數據變成了現在的六行。

原來的六列數據是在一行,所以共用一個主鍵(即張三)。現在變成了六行,每行都需要一個主鍵(不然不知道這行數據是誰的),所以原來的主鍵(即張三)重復了六次。如下圖:

 
行存儲與列存儲的映射關系

相當於將每一行的每一列拆開,然后通過rowkey(行唯一鍵)關聯起來,rowkey相同的這些數據其實就是原來的一行。由於原來的列變為了現在的行,有需要就加一行,沒需要就不加,有效地減少了存儲空間的浪費。

行存儲與列存儲的對比

  • 行式存儲傾向於結構固定,列式存儲傾向於結構弱化。
    (行式存儲相當於套餐,即使一個人來了也給你上八菜一湯,造成浪費;列式存儲相等於自助餐,按需自取,人少了也不浪費)
  • 行式存儲一行數據只需一份主鍵,列式存儲一行數據需要多份主鍵。
  • 行式存儲存的都是業務數據,列式存儲除了業務數據外,還要存儲列名。
  • 行式存儲更像一個Java Bean,所有字段都提前定義好,且不能改變;列式存儲更像一個Map,不提前定義,隨意往里添加key/value。


作者:GeekerLou
鏈接:https://www.jianshu.com/p/603113588144
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM