2016-09-29 6 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日午後04時30分00秒

日後でレトロなデータ修正がありました。別のレコードを挿入します。 ティッカー= AAPL、eoddate = 2016-09-28、価格= 120.9、作成済み= 2016-09-29 09:00:00

AAPLの最新シリーズ(最初の値をフィルタリングする)を取得したいのであれば、このデータをモデル化/クエリする最良の方法ですか? SQLの 私はparitionクエリを書くことができました。 CQLでどうですか?

フィルタはアプリケーションレベルで適用する必要がありますか?

ありがとうございました。

+0

こんにちは、正確にモデル化するには、より詳細な情報が必要です。より正確には、カーディナリティが必要です。どのくらいのティッカーですか(もちろん見積もり)?ティッカーごとにいくつ更新がありますか? 1日あたり1時間/分?データ保持戦略(あなたのケースでは、データは決して削除されないだろう)。あなたのケースの記録は変更可能か不変か –

+0

はい、私はCassandraに不変の追加のみスキーマモデルを作成しようとしています。上記の金融終末は単なる例に過ぎません。 議論のために、私は30kテロップを想定していますが、刻々と変化する遡及的な変更(週に1回の値の更新など)を除いて、新しい値を挿入します。 問題は、データを効率的にクエリする方法を見つけることです。それがSQLの場合は、「パーティションから選択する(パーティションごとに最新のパーティションを1つ選択する)」を実行します。 CQLでどうすればいいですか? – jho

答えて

0

私があなたの必要性を正しく理解していれば、あなたのテーブルは良いです。このスキーマでは のように、クエリを実行することができます:それはティッカーAAPLの最後の価格を返します

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

CLUSTERING ORDER BY句は、特定のtickerのデータを物理的に降順に並べ替えます。テーブル全体を並べる必要はありません。したがって、このクエリで十分です。