2017-07-24 97 views
0

我正在尋找存儲時間序列數據在Apache Cassandra的實例Apache的卡桑德拉 - 列的值時間軸

我讀過the guides from DataStax但不幸的是,他們是從2012年不過我覺得基本原則仍然適用 - 我只是想知道如何用最新版本的Cassandra(v3.11)來做到這一點。

我有一個表目前是這樣的:

CREATE KEYSPACE IF NOT EXISTS tick_data 
WITH REPLICATION = {'class': 'SimpleStrategy', 
        'replication_factor': 1}; 

USE tick_data; 

CREATE TABLE IF NOT EXISTS minute_bars (
contract_id text, 
bar_time timestamp, 
bar text, 
PRIMARY KEY (contract_id, bar_time) 
); 

插入一些數據,並通過cqlsh連接我可以查看數據和前幾行之後是這樣的:

contract_id | bar_time      | bar 
-------------+---------------------------------+-------------------------------------------------------------------------------------------- 
      1 | 2017-07-21 14:05:00.000000+0000 |  {'open': 0.15, 'high': 0.15, 'low': 0.15, 'close': 0.15, 'volume': -1, 'barCount': -1} 
      1 | 2017-07-21 14:10:00.000000+0000 |  {'open': 0.15, 'high': 0.15, 'low': 0.15, 'close': 0.15, 'volume': -1, 'barCount': -1} 
      1 | 2017-07-21 14:15:00.000000+0000 |  {'open': 0.15, 'high': 0.15, 'low': 0.15, 'close': 0.15, 'volume': -1, 'barCount': -1} 
      1 | 2017-07-21 14:20:00.000000+0000 |  {'open': 0.15, 'high': 0.15, 'low': 0.15, 'close': 0.15, 'volume': -1, 'barCount': -1} 
      1 | 2017-07-21 14:25:00.000000+0000 |  {'open': 0.15, 'high': 0.15, 'low': 0.15, 'close': 0.15, 'volume': -1, 'barCount': -1} 
      1 | 2017-07-21 14:30:00.000000+0000 |  {'open': 0.15, 'high': 0.15, 'low': 0.15, 'close': 0.15, 'volume': -1, 'barCount': -1} 

哪個非常不同於我的預期:enter image description here

爲了獲得Apache Cassandra的好處在處理時間序列數據時,什麼是存儲時間軸數據的最新過程?

回答

0

在CQL中,您將只會看到表格(仔細查看着色,請參見下文)。一個「漏洞」,在你的設計是不使用的桶 - 所有的數據對於一個合同被存儲在一個節點上(如你正在使用一個的複製因子):

PRIMARY KEY (contract_id, bar_time) 

在卡桑德拉主鍵是由兩部分 - 分區鍵和經常聚集列。您確實選擇了contract_id作爲分區鍵,這意味着特定合同的所有插入僅爲一個節點。由於更新似乎會在5分鐘內完成,因此最終會出現非常寬的行,每月9000個時間戳。

要在你的情況有利於桶的

CREATE TABLE IF NOT EXISTS minute_bars (
    contract_id text, 
    bucket date, 
    bar_time timestamp, 
    bar text, 
    PRIMARY KEY ((contract_id, bucket), bar_time) 
); 

現在分區鍵(這決定在哪裏把你的數據)由contract_idbucket,這是由兩個括號把注意。例如根據您的需要,您可以每天或每個月製作一個桶),並將一天或一個月的所有數據存儲在一個桶中。如果你在cqlsh中選擇你的表格,你會看到列標題着色的不同。

,如果您每天存儲

SELECT bar_time, bar_text FROM minute_bars WHERE contract_id=1 and date="2017-07-01"; 

會給你合同1和2017年7月1日在單個請求和bar_time沒有限制的所有數據。如果您以這種方式存儲並且需要整整一個月,則您需要選擇每個請求的所有天數,如果您執行這些調用asynchronuos,則多個節點可以處理您的數據也會表現良好。