2016-12-22 3 views
2

Cassandraには、名前、タイムスタンプ、値として保存される時系列データがあります。Cassandra CQLを使用すると、前の最後のポイントと最初のポイントの後ろにあるデータの範囲を取得できます。

データをフェッチして時系列チャートに表示したいので、カサンドラから時間範囲を取得しています。しかし、チャートを適切にレンダリングするには、実際には、範囲の前の最後のポイントと最初のポイントが必要になるので、チャートの線がチャートの端から離れないようにします。

私の現在の計画は、上記と同じ列を持つ2つのテーブルを持つことですが、時間の昇順と時間の昇順で並べ替えることです。

3つのクエリを作成する必要があります。

  • ASCテーブルの範囲内の全ての点
  • は私端を越えてポイントを与える終了期限1よりも大きい時間ASCテーブルからポイントを取得フェッチ。
  • 時間が開始時間制限1よりも小さい、テーブルからポイントをフェッチします。これにより、開始前のポイントがわかります。

これが最善の方法ですか? Cassandraの専門家はどんなアイデアを持っていますか?

ありがとうございます! Chris

答えて

2

1台で十分だと思います。以下の実験を確認してください。

ts - timeseriesテーブル。 t - 時間値;あなたは=トンの左/右のエッジを見つけるために、3

cqlsh:ks> create table ts(pk int, t int, v int, primary key(pk, t, v)); 
cqlsh:ks> insert into ts (pk, t, v) values (1, 1, 1); 
cqlsh:ks> insert into ts (pk, t, v) values (1, 2, 2); 
cqlsh:ks> insert into ts (pk, t, v) values (1, 3, 3); 
cqlsh:ks> insert into ts (pk, t, v) values (1, 4, 4); 
cqlsh:ks> insert into ts (pk, t, v) values (1, 5, 5); 

cqlsh:ks> select * from ts where pk=1 and t<3 order by t desc limit 1; 

pk | t | v 
----+---+--- 
    1 | 2 | 2 

(1 rows) 
cqlsh:ks> select * from ts where pk=1 and t>3 order by t asc limit 1; 

pk | t | v 
----+---+--- 
    1 | 4 | 4 

(1 rows) 
+0

おかげミハイルをしたいです!それは素晴らしいようです。高速なパフォーマンスのために、クラスタリングキーが注文されたのと同じ方向に常にクエリ内で注文する必要があると仮定していました。私はこれが当てはまるかどうかを調べるためにテストします。ありがとう – ChrisBellew

関連する問題