2014-10-11 64 views
1

我試着瞭解爲我的HBase表設計密鑰的最佳方式。用於讀取和更新的HBase行密鑰設計

我的使用情況:

結構現在

是PersonID | BatchDate | PersonJSON

當某人關於該人的某些事情被修改時,新的PersonJSON和新的批處理日期被插入到Hbase中更新舊記錄。然後每4小時對所有修改過的人員進行掃描,然後將其推送到Hadoop進行進一步處理。

如果我的密鑰只是personID,它更適合更新數據。但是我的性能很糟糕,因爲我必須在BatchData列上添加一個過濾器來掃描大於批處理日期的所有行。

如果我的鍵是像BatchDate | PersonID這樣的組合鍵,我可以在行鍵上使用startrow和endrow並獲取所有已修改的行。但後來我會有很多重複,因爲密鑰不是唯一的,不能再更新一個人。

布隆過濾器在行+ col(personid + batchdate)上有一個選項嗎?

任何幫助表示讚賞。 謝謝, Abhishek

回答

0

除了以PersonID作爲rowkey的表,它聽起來像你需要一個dual-write secondary index,與BatchDate作爲rowkey。

另一種選擇是Apache Phoenix,它提供了對二級索引的支持。

0

我通常做兩個步驟: 創建表一個關鍵是BatchDate + PersonId的commbine,值可以是空的。 創建表2,就像您一樣正常。關鍵是PersonId值是整個數據。

對於日期範圍查詢:首先查詢表獲取PersonIds,然後使用Hbase批量獲取API按批次獲取數據。它會非常快。