Kudu主鍵選擇策略
每個Kudu 表必須設定Pimary Key(unique), 另外Kudu表不能設定secondary index, 經過實際效能測試, 本文給出了選擇Kudu主鍵的幾個策略, 測試結果糾正了我之前的習慣認知.
簡單介紹測試場景: 表中有一個unqiue欄位Id, 另外還有一個日期維度欄位histdate, 有三種設定kudu PK的方法, 分別是:
表設計方案1 (histdate, id)作為聯合主鍵, 日期欄位放在前.
表設計方案2 (id,histdate)作為聯合主鍵, 日期欄位放在後.
表設計方案3 (id)作為單欄位主鍵.
先給出測試資料:
結論:
1. 選擇性強的欄位(比如 id 欄位) 應該放在PK清單最前面, 這個規則對查詢效能影響最大.
2. PK清單中只加必要的欄位, 越少越好.
3. 如果查詢針對PK中所有欄位都加了條件, 其效能是最優的. 但只要有一個PK欄位未加上條件, 就完全用不上PK索引,效能就很差.
4. where條件中各個欄位條件的先後順序並不關鍵.
5. Kudu表使用Java API Insert的速度還是很好的, 單執行緒達到了1萬筆/秒多. Kudu Update 效率也很高, 實測對一個窄表做全欄位update, 其速度達到了Insert速度的88%, 而vertica的update效率比insert差很多.
在測試之前的誤區:
誤區1. (histdate,id)組合PK應該是最優的, 因為在數倉中經常按照日期做查詢, 把日期放在PK清單最前面, 應該有助於提升查詢效能, 結果發現無論是日期+id組合查詢,還是id單獨查詢, 該方案效能都最差, 甚至不如完全不在PK清單中的 duplicated_id 的定位查詢.
誤區2. 即使給部分PK欄位加上過濾條件, 查詢也會利用上PK index, 結果證明是完全利用不上index.
-- 下面三個表的 id 取值為: java.util.UUID.randomUUID().toString(), duplicated_id和id取值相同.
CREATE TABLE kudu_testdb.perf_test_t1
(
histdate timestamp ENCODING BIT_SHUFFLE COMPRESSION LZ4,
id string ENCODING PLAIN_ENCODING COMPRESSION SNAPPY,
value int,
duplicated_id string ENCODING PLAIN_ENCODING COMPRESSION SNAPPY,
PRIMARY KEY (histdate,id)
)
PARTITION BY HASH (histdate,id) PARTITIONS 2
STORED AS KUDU
TBLPROPERTIES (
'kudu.table_name' = 'testdb.perf_test_t1',
'kudu.master_addresses' = '10.205.6.1:7051,10.205.6.2:7051,10.205.7.3:7051'
);
CREATE TABLE kudu_testdb.perf_test_t2
(
histdate timestamp ENCODING BIT_SHUFFLE COMPRESSION LZ4,
id string ENCODING PLAIN_ENCODING COMPRESSION SNAPPY,
value int,
duplicated_id string ENCODING PLAIN_ENCODING COMPRESSION SNAPPY,
PRIMARY KEY (id,histdate)
)
PARTITION BY HASH (id,histdate) PARTITIONS 2
STORED AS KUDU
TBLPROPERTIES (
'kudu.table_name' = 'testdb.perf_test_t2',
'kudu.master_addresses' = '10.205.6.1:7051,10.205.6.2:7051,10.205.7.3:7051'
);
CREATE TABLE kudu_testdb.perf_test_t3
(
id string ENCODING PLAIN_ENCODING COMPRESSION SNAPPY,
histdate timestamp ENCODING BIT_SHUFFLE COMPRESSION LZ4,
value int,
duplicated_id string ENCODING PLAIN_ENCODING COMPRESSION SNAPPY,
PRIMARY KEY (id)
)
PARTITION BY HASH (id) PARTITIONS 2
STORED AS KUDU
TBLPROPERTIES (
'kudu.table_name' = 'testdb.perf_test_t3',
'kudu.master_addresses' = '10.205.6.1:7051,10.205.6.2:7051,10.205.7.3:7051'
);
相關文章
- SEO策略之關鍵詞選擇的原則
- 如何在Oracle表中選擇主鍵列BWOracle
- 資料庫索引選擇策略資料庫索引
- Spark SQL如何選擇join策略SparkSQL
- 資料庫主鍵 ID 生成策略資料庫
- MongoDB分片鍵選擇指南MongoDB
- 【智慧優化演算法】遺傳演算法的精英選擇策略、期望選擇策略優化演算法
- Tab鍵切換選擇物件物件
- alacritty 新增左鍵選擇,右鍵複製
- KUDU(五)kudu優化優化
- MHA選擇主庫原始碼解析原始碼
- MongoDB 分片鍵的選擇與案例MongoDB
- 安裝APK時SO庫的選擇策略APK
- 詳解快取更新策略及如何選擇快取
- 團隊如何選擇合適的Git分支策略?Git
- 批量修改vsphere共享儲存多路徑選擇策略
- (轉)為什麼選擇機器學習策略機器學習
- 「Adobe國際認證」運用“物件選擇”工具,在PS中選擇主體物件
- 建站的時候選擇雲主機還是vps主機?
- Mybatis-Plus3.0預設主鍵策略導致自動生成19位長度主鍵id的坑MyBatisS3
- 做網站選擇HostGator美國主機還是香港主機?網站
- 如果你還在為選擇WordPress主機而糾結,選擇GoDaddy不會有錯!Go
- 如何選擇適合自己的虛擬主機
- 個人雲主機應該怎麼選擇
- 企業網站如何選擇虛擬主機?網站
- 走進Kudu
- 手機遊戲玩家遊戲消費的策略選擇遊戲
- 房地產開發如何選擇最佳招標採購策略
- LSTM擇時+StockRanker選股的視覺化策略實現視覺化
- Vivado使用技巧(22):綜合策略與設定的選擇
- 選擇郵件營銷平臺的關鍵要素:為中小企業提供絕佳選擇
- 002---選擇器(標籤選擇器、類選擇器、id選擇器、偽類選擇器、萬用字元選擇器)字元
- 主播應該如何選擇直播美顏SDK工具?
- 部落格網站怎樣選擇虛擬主機網站
- 淺析美國主機應該如何選擇配置?
- 雲主機該如何選擇適合自己的配置?
- vsp主機伺服器選擇及環境配置伺服器
- 查詢策略選擇:使用 JOIN 還是多條 SQL 語句SQL