2016-09-29 67 views
0

我正在模擬卡桑德拉的金融股價格存儲,我需要回顧性修改。 只有追加數據庫才浮現在腦海。卡桑德拉追加時間序列建模/查詢

CREATE TABLE historical_data ( ticker text, eoddate timestamp, price double, created timestamp, PRIMARY KEY(ticker, eoddate) ) WITH CLUSTERING ORDER BY (eoddate DESC);"""

如記錄可能是: 股票= AAPL,eoddate = 2016年9月28日,價格= 123.4,創造了= 2016年9月28日16:30:00

一天後來有一個復古的數據修復,我插入另一個記錄 ticker = AAPL,eoddate = 2016-09-28,price = 120.9,created = 2016-09-29 09:00:00

什麼是模型/查詢這些數據的最佳方式,如果我想獲得AAPL的最新系列(即過濾第一個值)? SQL中的 我可以寫一個parition查詢。在CQL中如何?

或者應該在應用層應用過濾器嗎?

謝謝。

+0

你好,爲了正確建模,我們需要更多的信息,更確切地說:基數。最多有多少行情(估計當然)?每個代碼有多少更新?每天1次/小時/分鐘?數據保留策略(我想你的情況,數據永遠不會被刪除)。你的案例中的記錄是可變的還是不變的? –

+0

是的,我正試圖在Cassandra中創建一個不可變的,追加唯一的模式模型。上述財務結束僅僅是一個例子。 爲了討論起見,我假設每天有3萬個代幣,每個代幣最有可能每天都有一個結束價值,除了罕見的回顧性變化(例如,每週更新一次),我會插入新值。 面臨的挑戰是如何有效地查詢數據。如果是SQL,我會通過EOD選擇分區(每個分區選擇最新的一個)''。 我如何在CQL中做類似的事情? – jho

回答

0

如果我理解正確,您的需求,您的表是好的。 有了這個模式,你可以運行查詢,如:

SELECT price 
FROM historical_data 
WHERE ticker = 'AAPL' 
LIMIT 1; 

它將返回最後價格爲股票AAPL。

CLUSTERING ORDER BY子句按照特定ticker的降序對您的數據進行物理排序,它不會訂購整個表格。所以這個查詢應該足夠了。