2016-09-12 63 views
1

我很新的卡桑德拉卡桑德拉鬥分裂,我只是Datastax課程學過,但我沒有在這裏找到桶足夠的信息,或在互聯網上,在我的應用程序需要使用桶分裂我的數據。的分區大小

我有一些工具會制定措施,並且每天分割措施(時間戳作爲分區鍵)可能有點風險,因爲我們可以輕鬆達到分區100MB的限制。每個度量都涉及用ID標識的特定對象。所以我想用一個桶,但我不知道該怎麼做。

我使用卡桑德拉3.7

這裏是我的表將如何模樣,大致爲:

CREATE TABLE measures (
    instrument_id bigint, 
    day timestamp, 
    bucket int, 
    measure_timestamp timestamp, 
    measure_id uuid, 
    measure_info float, 
    object_id bigint, 
    PRIMARY KEY ((instrument_id, day, bucket), measure_timestamp, measure_id) 
); 

我想加入的object_id作爲分區鍵的,但後來我鬆散的「流措施「,因爲我感興趣的是在特定的一天或一段時間內看到文書所做的所有措施。

  • 所以問題是,當我想請求一個特定樂器的一天的所有記錄時,如果有多個桶,該怎麼辦?
  • 如果我想的分區限制爲400個000行,我怎麼能知道插入數據時,其中的羣組I必須插入數據?
  • 有沒有一種方法可以知道存儲桶的數量?

非常感謝您的幫助!

回答

1

你應該專注於您的需求,然後回到你的架構模型。就你而言,每臺儀器每天可以做多少個措施?如果每個人都能做到少於400k的措施,那麼你已經完成了沒有分包。如果您的儀器可以執行多達10M的措施,那麼N = 10M/400k料斗應該足以滿足您的要求。假設ñ桶,當你需要查詢從您必須執行ñ查詢,每一個桶,除非你能在你寫算措施特定的儀器來的一切措施,這樣就可以改變桶的時候一個桶已滿。我的意思是,你在桶0中寫出第一個40萬個度量值,然後你向桶1寫下第二個40萬個度量值,依此類推。然後,您需要跟蹤多少個K存儲桶插入數據並僅執行K查詢而不是。這樣你就有不平衡的桶(和分區),但是你可以在最少的查詢中得到結果。如果你喜歡一個平衡桶方法來代替,你可以在一個均勻分佈的隨機桶數目執行每個寫,但你必須執行所有ň查詢獲取特定儀器的所有數據。

+0

謝謝你的回答。事情是我不知道儀器可以做多少措施。我的意思是當他們檢測物體時,物體的數量沒有限制。但是,好吧,我可以照你說的做:) 因此,沒有「內置」方式來「計數」桶的數量?插入數據時它是如何工作的? – Miwauke

+0

@Miwauke你不知道你的樂器的速度嗎?如果一臺儀器的吞吐量*爲每秒一次測量,那麼在一天內最多會有** M = 86400 **每臺儀器每天測量一次。如果*吞吐量*是每秒1k次測量,那麼您每天有每個儀器**每天有** M = 86M **措施。您不需要一個*確切*號碼,(停車)猜測應該沒問題。**您**決定在哪個桶中寫入數據:每臺儀器應計算其自己的度量值,並應根據每桶正確的*度量計數將其寫入相應的桶中。 – xmas79

+0

我不知道儀器的速度,但我可以調查。謝謝你的回答,所以我必須跟蹤「一切」,以便在正確的桶中寫入,這是我想知道的。計算一個桶中的條目數量的最佳方法是什麼?我應該在某個地方使用櫃檯嗎? – Miwauke