
大數(shù)據(jù)存取的選擇:行存儲還是列存儲
上個月參加了一個云存儲的技術(shù)討論會。這一個月里,陸續(xù)收到幾位同學討論大數(shù)據(jù)保存和處理的郵件。今天是周末,索性把這個月的交流內(nèi)容整理寫下來,供各位參考。
目前大數(shù)據(jù)存儲有兩種方案可供選擇:行存儲和列存儲。業(yè)界對兩種存儲方案有很多爭持,集中焦點是:誰能夠更有效地處理海量數(shù)據(jù),且兼顧安全、可靠、完整性。從目前發(fā)展情況看,關(guān)系數(shù)據(jù)庫已經(jīng)不適應(yīng)這種巨大的存儲量和計算要求,基本是淘汰出局。在已知的幾種大數(shù)據(jù)處理軟件中,Hadoop的HBase采用列存儲,MongoDB是文檔型的行存儲,Lexst是二進制型的行存儲。在這里,我不討論這些軟件的技術(shù)和優(yōu)缺點,只圍繞機械磁盤的物理特質(zhì),分析行存儲和列存儲的存儲特點,以及由此產(chǎn)生的一些問題和解決辦法。
一.結(jié)構(gòu)布局
行存儲數(shù)據(jù)排列
列存儲數(shù)據(jù)排列
表格的灰色背景部分表示行列結(jié)構(gòu),白色背景部分表示數(shù)據(jù)的物理分布,兩種存儲的數(shù)據(jù)都是從上至下,從左向右的排列。行是列的組合,行存儲以一行記錄為單位,列存儲以列數(shù)據(jù)集合單位,或稱列族(column family)。行存儲的讀寫過程是一致的,都是從第一列開始,到最后一列結(jié)束。列存儲的讀取是列數(shù)據(jù)集中的一段或者全部數(shù)據(jù),寫入時,一行記錄被拆分為多列,每一列數(shù)據(jù)追加到對應(yīng)列的末尾處。
二. 對比
從上面表格可以看出,行存儲的寫入是一次完成。如果這種寫入建立在操作系統(tǒng)的文件系統(tǒng)上,可以保證寫入過程的成功或者失敗,數(shù)據(jù)的完整性因此可以確定。列存儲由于需要把一行記錄拆分成單列保存,寫入次數(shù)明顯比行存儲多,再加上磁頭需要在盤片上移動和定位花費的時間,實際時間消耗會更大。所以,行存儲在寫入上占有很大的優(yōu)勢。
還有數(shù)據(jù)修改,這實際也是一次寫入過程。不同的是,數(shù)據(jù)修改是對磁盤上的記錄做刪除標記。行存儲是在指定位置寫入一次,列存儲是將磁盤定位到多個列上分別寫入,這個過程仍是行存儲的列數(shù)倍。所以,數(shù)據(jù)修改也是以行存儲占優(yōu)。 數(shù)據(jù)讀取時,行存儲通常將一行數(shù)據(jù)完全讀出,如果只需要其中幾列數(shù)據(jù)的情況,就會存在冗余列,出于縮短處理時間的考量,消除冗余列的過程通常是在內(nèi)存中進行的。列存儲每次讀取的數(shù)據(jù)是集合的一段或者全部,如果讀取多列時,就需要移動磁頭,再次定位到下一列的位置繼續(xù)讀取。 再談兩種存儲的數(shù)據(jù)分布。由于列存儲的每一列數(shù)據(jù)類型是同質(zhì)的,不存在二義性問題。比如說某列數(shù)據(jù)類型為整型(int),那么它的數(shù)據(jù)集合一定是整型數(shù)據(jù)。這種情況使數(shù)據(jù)解析變得十分容易。相比之下,行存儲則要復(fù)雜得多,因為在一行記錄中保存了多種類型的數(shù)據(jù),數(shù)據(jù)解析需要在多種數(shù)據(jù)類型之間頻繁轉(zhuǎn)換,這個操作很消耗CPU,增加了解析的時間。所以,列存儲的解析過程更有利于分析大數(shù)據(jù)。
三. 優(yōu)化
顯而易見,兩種存儲格式都有各自的優(yōu)缺點:行存儲的寫入是一次性完成,消耗的時間比列存儲少,并且能夠保證數(shù)據(jù)的完整性,缺點是數(shù)據(jù)讀取過程中會產(chǎn)生冗余數(shù)據(jù),如果只有少量數(shù)據(jù),此影響可以忽略;數(shù)量大可能會影響到數(shù)據(jù)的處理效率。列存儲在寫入效率、保證數(shù)據(jù)完整性上都不如行存儲,它的優(yōu)勢是在讀取過程,不會產(chǎn)生冗余數(shù)據(jù),這對數(shù)據(jù)完整性要求不高的大數(shù)據(jù)處理領(lǐng)域,比如互聯(lián)網(wǎng),猶為重要。
改進集中在兩方面:行存儲讀取過程中避免產(chǎn)生冗余數(shù)據(jù),列存儲提高讀寫效率。
如何改進它們的缺點,并保證優(yōu)點呢?
行存儲的改進:減少冗余數(shù)據(jù)首先是用戶在定義數(shù)據(jù)時避免冗余列的產(chǎn)生;其次是優(yōu)化數(shù)據(jù)存儲記錄結(jié)構(gòu),保證從磁盤讀出的數(shù)據(jù)進入內(nèi)存后,能夠被快速分解,消除冗余列。要知道,目前市場上即使最低端CPU和內(nèi)存的速度也比機械磁盤快上100-1000倍。如果用上高端的硬件配置,這個處理過程還要更快。
列存儲的兩點改進:1.在計算機上安裝多塊硬盤,以多線程并行的方式讀寫它們。多塊硬盤并行工作可以減少磁盤讀寫競用,這種方式對提高處理效率優(yōu)勢十分明顯。缺點是需要更多的硬盤,這會增加投入成本,在大規(guī)模數(shù)據(jù)處理應(yīng)用中是不小的數(shù)目,運營商需要認真考慮這個問題。2.對寫過程中的數(shù)據(jù)完整性問題,可考慮在寫入過程中加入類似關(guān)系數(shù)據(jù)庫的“回滾”機制,當某一列發(fā)生寫入失敗時,此前寫入的數(shù)據(jù)全部失效,同時加入散列碼校驗,進一步保證數(shù)據(jù)完整性。
這兩種存儲方案還有一個共同改進的地方:頻繁的小量的數(shù)據(jù)寫入對磁盤影響很大,更好的解決辦法是將數(shù)據(jù)在內(nèi)存中暫時保存并整理,達到一定數(shù)量后,一次性寫入磁盤,這樣消耗時間更少一些。目前機械磁盤的寫入速度在20M-50M/秒之間,能夠以批量的方式寫入磁盤,效果也是不錯的。
四. 總結(jié)
兩種存儲格式各自的特性都決定了它們不可能是完美的解決方案。 如果首要考慮是數(shù)據(jù)的完整性和可靠性,那么行存儲是不二選擇,列存儲只有在增加磁盤并改進軟件設(shè)計后才能接近這樣的目標。如果以保存數(shù)據(jù)為主,行存儲的寫入性能比列存儲高很多。在需要頻繁讀取單列集合數(shù)據(jù)的應(yīng)用中,列存儲是最合適的。如果每次讀取多列,兩個方案可酌情選擇:采用行存儲時,設(shè)計中應(yīng)考慮減少或避免冗余列;若采用列存儲方案,為保證讀寫入效率,每列數(shù)據(jù)盡可能分別保存到不同的磁盤上,多個線程并行讀寫各自的數(shù)據(jù),這樣避免了磁盤競用的同時也提高了處理效率。 無論選擇哪種方案,將同內(nèi)容數(shù)據(jù)聚湊在一起都是必須的,這是減少磁頭在磁盤上的移動,提高數(shù)據(jù)讀取時間的有效辦法。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
用 SQL 生成逆向回滾 SQL:數(shù)據(jù)操作的 “后悔藥” 指南? 在數(shù)據(jù)庫操作中,誤刪數(shù)據(jù)、錯改字段或誤執(zhí)行批量更新等問題時有發(fā)生。 ...
2025-07-14如何考取數(shù)據(jù)分析師證書:以 CDA 為例? ? 在數(shù)字化浪潮席卷各行各業(yè)的當下,數(shù)據(jù)分析師已然成為企業(yè)挖掘數(shù)據(jù)價值、驅(qū)動決策的 ...
2025-07-14t檢驗與Wilcoxon檢驗的選擇:何時用t.test,何時用wilcox.test? t 檢驗與 Wilcoxon 檢驗的選擇:何時用 t.test,何時用 wilcox. ...
2025-07-14AI 浪潮下的生存與進階: CDA數(shù)據(jù)分析師—開啟新時代職業(yè)生涯的鑰匙(深度研究報告、發(fā)展指導白皮書) 發(fā)布機構(gòu):CDA數(shù)據(jù)科 ...
2025-07-13LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準備指南? ? 在數(shù)據(jù)驅(qū)動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認 ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動決策的時代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經(jīng)濟蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準 ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨特的門控機制,在 ...
2025-07-07統(tǒng)計學方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07