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主鍵選擇對插入的影響Oracle
- 網站最佳化中的主機選擇策略網站
- 如何在Oracle表中選擇主鍵列BWOracle
- Hibernate主鍵策略
- hibernate主鍵生成策略
- Hibernate 主鍵的生成策略
- Spark SQL如何選擇join策略SparkSQL
- 如何選擇MongoDB片鍵?MongoDB
- 資料庫主鍵 ID 生成策略資料庫
- Hibernate框架的主鍵生成策略框架
- 【智慧優化演算法】遺傳演算法的精英選擇策略、期望選擇策略優化演算法
- KUDU(五)kudu優化優化
- (轉)為什麼選擇機器學習策略機器學習
- Java Hibernate 主鍵生成10大策略Java
- Tab鍵切換選擇物件物件
- MHA選擇主庫原始碼解析原始碼
- MongoDB 分片鍵的選擇與案例MongoDB
- 安裝APK時SO庫的選擇策略APK
- 手機遊戲玩家遊戲消費的策略選擇遊戲
- 論語言選擇的關鍵 (轉)
- 禁用文字選擇、右鍵選單例項程式碼單例
- 詳解快取更新策略及如何選擇快取
- 團隊如何選擇合適的Git分支策略?Git
- 做網站選擇HostGator美國主機還是香港主機?網站
- 菜鳥學資料庫(四)——超鍵、候選鍵、主鍵、外來鍵資料庫
- MongoDB分片片鍵選擇參考建議MongoDB
- 批量修改vsphere共享儲存多路徑選擇策略
- MYSQL自動備份策略的選擇與實踐MySql
- Keil 主題(配色方案)選擇器 自帶多適用主題
- 轉JPA實體註解與hibernate主鍵生成策略
- 企業網站如何選擇虛擬主機?網站
- 「Adobe國際認證」運用“物件選擇”工具,在PS中選擇主體物件
- Mybatis-Plus3.0預設主鍵策略導致自動生成19位長度主鍵id的坑MyBatisS3
- LSTM擇時+StockRanker選股的視覺化策略實現視覺化
- Vivado使用技巧(22):綜合策略與設定的選擇
- AI 演算法測試客觀指標的選擇策略AI演算法指標
- 三大特徵選擇策略,有效提升你的機器學習水準特徵機器學習