HBase存儲方案設計


需求描述

將數據記錄持久化存儲在HBase中,需要支持如下功能:

  1. 支持高吞吐量讀寫操作,實時采集10,000條/秒;
  2. 支持動態添加字段;
  3. 支持服務端過濾;
  4. 支持部分字段修改。

設計方案

按列存儲

優點

  1. 擴展性好,支持動態添加新列;
  2. 支持服務端按列過濾;
  3. 可讀性好,方便調試;
  4. 獲取少量列數據時,讀取數據少,節約網絡帶寬資源;
  5. 方便修改部分列值。

缺點

  1. 占用磁盤空間較多;
  2. 數據采集性能差。

列合並為JSON格式存儲

優點

  1. 相對方案1,減少數據列,節約磁盤空間;
  2. 相對方案1,數據讀、寫性能較好;
  3. 擴展性好,支持動態添加新列;
  4. 相對方案3數據可讀性好,方便調試;

缺點

  1. 不便於服務端按列過濾;
  2. 數據只能整體獲取,當獲取少量列時也需要將整個json對象獲取,對磁盤和網絡資源造成浪費;
  3. 不便於修改部分列值,需要整體反序列化替換修改值后再重新序列化后寫入。

列合並為PB格式存儲

優點

  1. 相對方案1,減少數據列,並通過PB格式對數據壓縮,節約磁盤空間;
  2. 數據讀、寫性能好。

缺點

  1. 擴展性差,添加新列時需要修改PB對象;
  2. 不支持服務端按列過濾;
  3. 數據可讀性差,不方便調試;
  4. 數據只能整體獲取,當獲取少量列時也需要將整個PB對象獲取,對磁盤和網絡資源造成浪費;
  5. 不便於修改部分列值,需要整體反序列化替換修改值后再重新序列化后寫入。

批量寫入性能對比

單線程連續批量發送100萬條過車記錄(每條記錄37個字段,每批10000條記錄),三種方案完成數據采集總耗時對比結果如下:

圖3_1 HBase批量寫入性能

批量讀取性能對比

單線程批量讀取100萬條過車記錄(每條記錄37個字段,每批10000條記錄),分別從非壓縮表和Snappy壓縮表讀取記錄並執行反序列化操作(按列存儲格式的讀取性能表示從result中獲取屬性值的時間消耗),記錄每種存儲格式的總耗時與反序列化耗時情況,圖4_1對應非壓縮表的測試結果,圖4_2對應Snappy壓縮表的測試結果:
注:

  1. 讀取部分列測試只獲取tfs_id,plate_image_path,image_path三列;
  2. 按列存儲的測試數據中紅色部分表示從result中獲取字段的時間消耗。


圖4_1 HBase非壓縮表批量讀取性能

圖4_2 HBase snappy壓縮表批量讀取性能

存儲空間占用對比

單線程連續批量發送100萬條過車記錄(37個字段),三種方案存儲空間占用對比結果如下(下圖數據表示一份數據的空間占用情況,不包括副本大小):

圖5_1 HBase存儲空間占用情況


免責聲明!

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



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