2017-01-04 59 views
-1

Cassandra數據庫不太適合聚合,這就是爲什麼我決定在寫入之前進行聚合。我正在爲每個用戶存儲一些數據(例如事務),這些數據是按小時彙總的。這意味着對於一個用戶,每個我們只有一行。Cassandra聚合

每當我收到新的數據,我看行當前小時,接收到的數據彙總,並把它寫背部裝有利用這些數據來生成每小時報告。

此正常工作與低速數據,但I(在分鐘例如100條記錄爲1個用戶)觀察時的速度是非常高的相當高的數據丟失。這是因爲讀取和寫入發生得非常快,並且由於「延遲寫入」,我沒有獲取更新的數據。

我認爲我的方法「在寫入之前聚合」本身是錯誤的。我正在考慮UDF,但我不確定它會如何影響性能。

在Cassandra中存儲聚合數據的最佳方式是什麼?

+0

什麼樣的聚合和多少會在閱讀時被聚合。它多久閱讀一次?你有沒有考慮像Spark Streaming一樣批量聚合它們? –

+0

在我的測試環境中,我在幾秒鐘內寫入了200條記錄(寫了一個連續發送數據的腳本)。我在每次插入前讀取行。我每5分鐘運行一次這個腳本。但在生產環境中,我期望比這更高的速度。最糟糕的情況是,同時可能會有1000條記錄。 – RhishiM88

+0

「最佳實踐」是偏離主題**基於意見**和**太寬**請閱讀[我應避免詢問什麼類型的問題?](http://stackoverflow.com/help/dont-ask)然後嘗試提出更多問題。 –

回答

0

我的想法是:在卡桑德拉在小時逐小時桶

  • 模型數據。
  • 當他們到達時立即將數據存儲到卡桑德拉。在X
  • 過程中的所有X-1小時的數據,並將彙總結果存儲在另一個表

這將讓你有非常快的進入速度,處理數據只有一次,存儲聚集到另一個表具有快速讀取。

0

我也使用卡桑德拉預先聚合。每小時,每天,每週和每月都有不同的表格。我認爲在最後一次插入複製到其他節點之前選擇數據可能會導致數據丟失。

看看counter data type來解決這個問題。

您可能還可以在任何插件或選擇指定一個更高的一致性水平,以確保你得到的最新數據。

+0

即使我每小時,每日,每週和每月的報表都有不同的表格。問題是我有10種不同類型的報告,每種類型的報告都有小時,每日,每週和每月的過濾器。創建這麼多表是否明智? – RhishiM88

+0

每個報告4個非規格化表格對我來說聽起來不太糟糕。如果你在Cassandra 3.0+上,你可以看看物化視圖。 –