天天看點

hbase性能測試對比分析

資料庫讀寫性能分析

1、 單機類比叢集測試

測試環境:

由3台伺服器組成的hadoop叢集組成分散式檔案系統

由一台單獨的機器單機類比Hbase叢集

由一台機器單機測試Mysql

測試規模:50萬條記錄以上,單線程、多線程測試

測試結果:

HBase Mysql
單線程 插入 100 條記錄 155 ms / 154ms 243 ms / 198ms
插入 1000 條記錄 740 ms / 884ms 1506 ms / 1554ms
插入 10000 條記錄 8304ms/ 6610ms 14110ms/ 12839m
插入 100000 條記錄 43090ms /64715ms 108082ms /110664ms
讀取 500000左右的條記錄 640 ms / 721ms 2779 ms / 2794ms?
100線程 插入 100 條記錄 5929ms / 3825ms / 4134ms 15352ms / 12912ms / 12853ms
插入 1000 條記錄 35684ms / 52677ms / 34208ms 135839ms / 161711ms / 119909ms
讀取 500000左右的條記錄 最快的 1104 ms/最慢的 110897 ms 如果不加limit,資料庫連接配接逾時
1000線程 插入 100 條記錄 325907ms / 322465ms / 342163ms 17455ms / 18953ms / 15169ms
讀取500000左右的條記錄 最快的 717 ms 如果不加limit,資料庫連接配接逾時

HBase不同于一般的關聯資料庫,它是一個适合于非結構化資料存儲的資料庫.另一個不同的是HBase基于列的而不是基于行的模式(欄位内容都是char).

上面兩種 特性,導緻HBase的資料表結構非常松散,欄位内容單一,表與表之前沒有任何關聯,正因爲這樣在查詢的時候效率非常高

HBase資料表的性能選項:

MAX_VERSIONS:每一個單元儲存多少版本的資料(預設是3)

MAX_LENGTH:每個單元中的版本能夠儲存多少位元組的資料(預設位元組數是32位元有符号整數最大值)

COMPRESSION:資料壓縮,有BLOCK壓縮和RECORD壓縮

IN_MEMORY:将這個列組裝載資料到存儲器,加快讀寫速度,缺點耗費存儲器和幹預HDFS的備份

BLOOMFILTER:如果這個列組支援布隆過濾器(BLOOMFILTER),那麽在存儲器中有個索引來快速地判斷要查找的列是否存在這個行中,減少磁盤IO操作.如

果在這個列組你擁有大量的列,每一個列的資料包含的資料非常小,你可能需要在這個列組中應用布隆過濾器(BLOOMFILTER)

2、 列族測試:

測試目标:測試列族增長對性能的影響

測試資料:建表時候定義列族數量,每個列族寫入1000位元組資料,讀取5000次,随機讀取任意一列。

測試結果:

單機叢集

列族數量 10 100 500 1000
建表時間 12.3 19.2 45.9 Timeout
每秒寫入 164 323 419 Timeout
每秒讀取 99 139 122 Timeout

5機器叢集

列族數量 10 100 500 1000
建表時間 12.2 18.7 46.4 Timeout
每秒寫入 29 153 376 Timeout
每秒讀取 119 111 120 Timeout

測試結論:

Hbase建表時間過長,對大列族的時候支援不好

寫入速度在多機叢集的時候提高較快

3、排序測試

測試目标:Hbase的行排序是根據主鍵排序,測試動态或者反序插入時候的性能。

測試資料:動态生成字母資料,zzzzz-aaaaa,還有随機插入

測試結果:

單機叢集(每秒多少行)

寫入行 10,000 100,000 1,000,000
順序 485 432 334
反序 451 477 354
随機 462 421 334

5機叢集(每秒多少行)

寫入行 10,000 100,000 1,000,000
順序 488 440 346
反序 522 387 343
随機 468 441 370

測試結論:

采用B樹存儲和寫入緩存,寫入數量和順序對速度影響并不大,應該隻是cpu占用的不同。

主要瓶頸還是在網絡傳輸速度上。