2017-05-30 50 views
1

Bigtable文檔警告不要單調增加行鍵,如時間戳。Bigtable行鍵 - 僅以日期開始?

怎麼樣這樣的情況:有一個日期

  • 行鍵啓動,並用隨機GUID(前2017-01-01#563d7104-f976-40a2-b0d5-a1b6083c73f4
  • 在24小時內結束,寫入和讀取具有相同的日期,在大多數情況下

這是否會導致問題,或者一旦BigClick意識到大多數讀寫操作在24小時內的同一日期,它會在整個當前日期內有效地拆分節點?

我需要在日期上進行查詢,所以它看起來好像是這個或者是開始時的碎片標識符(例如A#2017-01-01#563d7104-f976-40a2-b0d5-a1b6083c73f4)。碎片標識符使查詢更加複雜,所以我只想在需要時使用它。

+0

你的用例是什麼?你需要掃描連續的行,還是隻做隨機點讀/寫? –

+0

我的用例是用相同的日期標記(24小時期間的相同日期標記)進行大量寫入 - 日期將相同,但日期後的GUID將隨着每次寫入而不同。然後,我會掃描同一日期的所有行。使用數據流進行寫入和讀取。 – user01380121

+0

也想知道是否可以將日期放在行鍵的末尾,並使用通配符(如'*#2017-01-01')執行RowKeyFilter。這樣寫入將分散在平板電腦上,但我不確定查詢的效率如何。 – user01380121

回答

3

一般來說,在日期或時間戳前添加行鍵是Bigtable中的反模式,因爲在每一個新的一天中,所有新的讀寫操作都將轉到一個新的平板電腦上,這將成爲Bigtable的一個熱點簇。

理想情況下,您應該將日期或時間戳放在行鍵的末尾,並使用主標識符(例如用戶帳戶或設備ID的散列)作爲前綴。

這假設您只在Bigtable中進行隨機讀取和寫入操作,並且您不需要掃描整天的數據(日期前綴允許您執行此操作),或者如果您需要掃描日期範圍(查找從日期A到日期B的所有數據)。

如果您的用例主要是基於日期的完整掃描,那麼帶有日期分區表的BigQuery可能是更好的方法。如果您只需要隨機讀取和隨機寫入,則最好將日期作爲後綴。另外,如果您發送到Bigtable的請求數量相對較少(例如,數百或較低的單位數千個請求/秒),那麼您可以使用日期前綴,它將工作得很好但是如果你決定顯着擴大規模的話,要小心,因爲在這種模式設計下你無法做到數以萬計的請求/秒。

如果您可以提供關於您的用例的更多說明(請參閱帶問題的評論),這對指導答案也會有所幫助。

相關問題