目前大資料儲存有兩種方案可供選擇:行儲存和列儲存。業界對兩種儲存方案有很多爭持,集中焦點是:誰能夠更有效地處理海量資料,且兼顧安全、可靠、完整性。從目前發展情況看,關聯式資料庫已經不適應這種巨大的儲存量和計算要求,基本是淘汰出局。在已知的幾種大資料處理軟體中,hadoop的hbase採用列儲存,mongodb是文件型的行儲存,lexst是二進位制型的行儲存。在這裡,我不討論這些軟體的技術和優缺點,只圍繞機械磁碟的物理特質,分析行儲存和列儲存的儲存特點,以及由此產生的一些問題和解決辦法。
一。結構布局
行儲存資料排列
列儲存資料排列
**的灰色背景部分表示行列結構,白色背景部分表示資料的物理分布,兩種儲存的資料都是從上至下,從左向右的排列。行是列的組合,行儲存以一行記錄為單位,列儲存以列資料集合單位,或稱列族(column family)。行儲存的讀寫過程是一致的,都是從第一列開始,到最後一列結束。列儲存的讀取是列資料集中的一段或者全部資料,寫入時,一行記錄被拆分為多列,每一列資料追加到對應列的末尾處。
二. 對比
從上面**可以看出,行儲存的寫入是一次完成。如果這種寫入建立在作業系統的檔案系統上,可以保證寫入過程的成功或者失敗,資料的完整性因此可以確定。列儲存由於需要把一行記錄拆分成單列儲存,寫入次數明顯比行儲存多,再加上磁頭需要在碟片上移動和定位花費的時間,實際時間消耗會更大。所以,行儲存在寫入上占有很大的優勢。
還有資料修改,這實際也是一次寫入過程。不同的是,資料修改是對磁碟上的記錄做刪除標記。行儲存是在指定位置寫入一次,列儲存是將磁碟定位到多個列上分別寫入,這個過程仍是行儲存的列數倍。所以,資料修改也是以行儲存佔優。 資料讀取時,行儲存通常將一行資料完全讀出,如果只需要其中幾列資料的情況,就會存在冗餘列,出於縮短處理時間的考量,消除冗餘列的過程通常是在記憶體中進行的。列儲存每次讀取的資料是集合的一段或者全部,如果讀取多列時,就需要移動磁頭,再次定位到下一列的位置繼續讀取。 再談兩種儲存的資料分布。由於列儲存的每一列資料型別是同質的,不存在二義性問題。比如說某列資料型別為整型(int),那麼它的資料集合一定是整型資料。這種情況使資料解析變得十分容易。相比之下,行儲存則要複雜得多,因為在一行記錄中儲存了多種型別的資料,資料解析需要在多種資料型別之間頻繁轉換,這個操作很消耗cpu,增加了解析的時間。所以,列儲存的解析過程更有利於分析大資料。
**:
大資料訪問的選擇 行儲存還是列儲存?
目前大資料儲存有兩種方案可供選擇 行儲存和列儲存。業界對兩種儲存方案有很多爭持,集中焦點是 誰能夠更有效地處理海量資料,且兼顧安全 可靠 完整性。從目前發展情況看,關聯式資料庫已經不適應這種巨大的儲存量和計算要求,基本是淘汰出局。在已知的幾種大資料處理軟體中,hadoop的hbase採用列儲存,mo...
大資料訪問的選擇 行儲存還是列儲存?
上個月參加了乙個 雲儲存的技術討論會。這乙個月裡,陸續收到幾位同學討論 大資料儲存和處理的郵件。今天是週末,索性把這個月的交流內容整理寫下來,供各位參考。目前大資料儲存有兩種方案可供選擇 行儲存和列儲存。業界對兩種儲存方案有很多爭持,集中焦點是 誰能夠更有效地處理海量資料,且兼顧安全 可靠 完整性。...
大資料訪問的選擇 行儲存還是列儲存?
上個月參加了乙個雲儲存的技術討論會。這乙個月裡,陸續收到幾位同學討論大資料儲存和處理的郵件。今天是週末,索性把這個月的交流內容整理寫下來,供各位參考。目前大資料儲存有兩種方案可供選擇 行儲存和列儲存。業界對兩種儲存方案有很多爭持,集中焦點是 誰能夠更有效地處理海量資料,且兼顧安全 可靠 完整性。從目...