2013-04-24 100 views
3

我正在研究用於存儲時間序列的卡桑德拉數據模型(我是卡桑德拉的新手)。 我有兩個應用程序:盤中股票數據和傳感器數據。卡桑德拉時間序列數據模型

股票數據將被保存,時間分辨率爲一分鐘。 七個數據字段構建一個時間範圍: 符號,日期時間,打開,高,低,關閉,卷

我將主要通過符號和日期查詢數據。例如根據日期時間訂購2013-01-01和2013-01-31之間的所有AAPL數據。 cassandra查詢的建議是查詢整個列。所以你可以用Open,High,Low,Close,Volume鍵創建五行。併爲每個符號和分鐘一個自己的列。例如。 「AAPL:2013-01-04T130400Z」。 這將導致一個包含五行和n * NT列的表,其中n =符號數,nT =分鐘數。 大部分時間我會查詢日期範圍。即一天中的所有分鐘。因此,我可以重新排列數據以使列名爲「AAPL:2013-01-04」和行:OpenT130400Z,HighT130400Z,LowT130400Z,CloseT130400Z,VolumeT130400Z。 這將導致一個包含n * nD列(n:符號數量,nD:天數)和5 * nM行(nM:每分鐘數/條目數)的表格。

綜上所述:我有專欄,它將一整天的信息保存爲一個符號。

我已經找到了一個說明如何處理時間序列數據在這裏卡桑德拉http://www.datastax.com/dev/blog/advanced-time-series-with-cassandra 但我真的不明白,如果他們使用小時(1332960000)作爲列名或行鍵!? 我明白他們使用小時作爲行鍵,並將小時間步長作爲列。所以他們會有一個固定的列號。但是這在閱讀上會有缺點,因爲我必須對鍵進行範圍查詢!我對嗎?

第二個問題: 如果我的傳感器數據比1分鐘的庫存數據要細得多(假設我必須以微秒的分辨率保存時間步數),我該如何處理? 如果我使用列來保存傳感器通道和小時的組合,以及自上一小時以來的行數微秒,這將導致3,600,000,000行和n * nH列(n:傳感器數量,nH:小時數)。 我無法使用自上個小時以來的列的微秒數,因爲我有36億個點數高於允許的20億列數量。

我知道了嗎? 您對這個問題有什麼看法?如何解決它?

謝謝!

最佳, 馬爾特

回答

1

所以我對你對股票數據的第一個問題的建議。一個幼稚的做法是這樣的:

RowKey:

列格式:

名稱:當前日期時間粒狀一分鐘

價值:開放式,高,低的複合列,關閉,音量

所以,你會碰到這樣的

 
AAPL = [2013-05-02-15:38:00 | 441.78:448.59:440.63:15066146:445.52] ... [2013-05-02-15:39:00 | 441.78:448.59:440.63:15066146:445.52] ... [2013-05-02-15:40:00 | 441.78:448.59:440.63:15066146:445.52] 

這樣可以在一年內爲您提供大約50萬列,所以大概4年也可以。我不會去嘗試達到20億的極限。你可以做的是在行鍵上定義一個拆分因子。這一切都取決於您的使用模式,但一年中可能會出現一個簡單的列,因此列家庭條目可能會看起來像是一個複合行鍵,這樣可以保證您每行的列數少於一百萬列。

 
AAPL:2013 = [05-02-15:38:00 | 441.78:448.59:440.63:15066146:445.52] ... [05-02-15:39:00 | 441.78:448.59:440.63:15066146:445.52] ... [05-02-15:40:00 | 441.78:448.59:440.63:15066146:445.52] 

+0

此答案不清楚且不完整 – Oleg 2017-05-09 20:15:04