本文介紹如何統計云原生多模數據庫 Lindorm寬表的總行數。
注意事項
云原生多模數據庫 Lindorm是基于LSM-Tree存儲結構的NoSQL數據庫,如果您要精確查詢Lindorm寬表的行數,需要掃描全表,表越大,耗時越長,所以不建議頻繁在Lindorm寬表中進行COUNT操作。如果您確實需要獲取表的行數,可以通過以下方式統計表行數。
如果您要粗略查詢Lindorm寬表的行數,可以通過Lindorm集群管理系統的表概覽頁面進行查看,詳情請參見通過集群管理系統粗略查看表行數。
通過HBase Shell工具統計表行數
已通過HBase Shell連接Lindorm寬表引擎,具體操作,請參見通過Lindorm Shell訪問寬表引擎。
通過HBase Shell工具使用COUNT命令可以精確的統計HBase表行數。執行COUNT命令的原理是將表的數據分批次全部掃描出來進行統計,所以建議在相同內網的ECS客戶端上執行COUNT命令。如果通過公網執行COUNT命令,網絡使用率會較大,導致統計效率降低。根據表結構的不同,掃描的速度會有所差別,使用COUNT命令掃描全表的速度可以小于10萬行每秒。執行以下語句統計table表的總行數。
count 'table'
執行結果如下:
使用HBase RowCounter統計表行數
已通過HBase Shell連接Lindorm寬表引擎,具體操作請參見通過Lindorm Shell訪問寬表引擎。
RowCounter會在本地啟動一個偽分布式的MR任務來進行COUNT操作。默認情況下這種方式是按照單個線程來執行的,統計速率與HBase Shell執行COUNT命令的統計速率差不多。如果您想提高統計速度,可以通過指定Dmapreduce.local.map.tasks.maximum=線程數
來進行多線程并發執行,需要注意以下兩點:
線程數小于等于表Region的個數。
線程數增多可能造成集群負載過高從而影響線上業務,請根據業務需求設置。
在HBase Shell中執行以下代碼統計Lindorm寬表的行數。
統計目標表table的總行數。
./alihbase-2.0.18/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter "table"
統計目標表table的總行數,16個線程并發執行。
./alihbase-2.0.18/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter -Dmapreduce.local.map.tasks.maximum=16 "table"
統計NameSpace為ns中的目標表table的總行數。
./alihbase-2.0.18/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter "ns:table"
執行結果保存在Log目錄中的hbase.log
文件。
通過Lindorm SQL統計表行數
已通過Lindorm-cli連接寬表引擎,具體操作請參見通過Lindorm-cli連接并使用寬表引擎。
通過Lindorm SQL統計表行數的速度比使用HBase RowCounter統計表行數的速度快,是因為Lindorm自動將COUNT的統計邏輯分布式地下發給每一個Lindorm進程,相當于多線程進行統計,而HBase Shell是單線程進行統計。但是COUNT的統計過程仍然是掃描全表,同時Lindorm SQL中的執行語句默認超時時間為120秒,如果120秒內仍然無法統計出結果,該語句會超時報錯。使用Lindorm SQL統計表行數的速度大概可以達到每臺每秒數十萬行,由于COUNT是分布式進行,集群的機器越多越快。
執行以下代碼統計table表行數。
SELECT COUNT(*) FROM table;
執行結果如下:
+--------+
| EXPR$0 |
+--------+
| 16000 |
+--------+
統計行數需要掃描全表,請慎重操作,如果數據量超過百萬,建議使用搜索索引加速:通過搜索索引查詢寬表數據
通過集群管理系統粗略查看表行數
已進入Lindorm集群管理系統,具體操作請參見登錄集群管理系統。
Lindorm集群管理系統中,在概覽頁面可以粗略查看表行數。該估計值是通過將數據文件的行數元信息累加計算出來的。如果用戶存在更新,刪除等操作,同一行數據可能分布在多個文件當中。同時,文件的行數元信息是在生成文件時統計的,如果用戶使用了TTL功能,文件中的部分數據可能已經過期了,從而導致該信息不準。因此,該值僅僅只是一個估計值。但如果用戶的表沒有更新,沒有刪除和TTL過期,顯示的行數是完全準確的,可以在歷史數據遷移完成時用于估計數據完整性。
Lindorm集群管理系統中,單擊左側導航欄概覽,在當前idc區域下,找到目標表,在預估行列中單擊查看,查看目標表的粗略行數。
如果表中有數據但預估行數顯示為0,則說明當前Lindorm寬表引擎小版本過低,請升級Lindorm寬表引擎小版本。如何升級,請參見升級小版本。