2011-11-29 2 views
5

私はCassandraを初めて使い、データモデリングとレンジクエリを試してみました。Cassandra Range Queries

学習目的のために、LogTypeとLog生成時間でログ行を保存できるデータベースを開発したいと考えています。クエリの下で私が答えなければならないところ:

日付範囲の間にLogTypeでログラインを見つける。

私は2列の家族としての私のデータベースをモデル:私はとのラインを記録保存することを計画してい 1)ログイン

create column family log with comparator = 'UTF8Type' 
and key_validation_class = 'LexicalUUIDType' 
and column_metadata=[{column_name: block, validation_class: UTF8Type}]; 

を自分のLOGIDの

例:set log['7561a442-24e2-11df-8924-001ff3591711'][blocks]='someText|11-17-2011 23:40:42|sometext';

2)

create column family ltype with column_type = 'Super' 
and comparator = 'TimeUUIDType' 
and subcomparator = 'UTF8Type' 
and column_metadata=[{column_name: id, validation_class: LexicalUUIDType}]; 

このcでは家族olumn私は、ログコラム家族から時間とともにログタイプとログ行IDを格納します:

ex: set ltype[ltype1][12307245916538][id]='7561a442-24e2-11df-8924-001ff3591711'; 

私がログインし、日付範囲のタイプを指定した場合の結果を取得したいです。

スーパーカラムファミリで範囲クエリを実行する方法を教えてもらえますか?

答えて

6

カサンドラでの時系列データモデリングの記事:

http://rubyscale.com/2011/basic-time-series-with-cassandra/

は、時系列の場合、あなたは本当に大きな行をしたい - おそらく出発点として、行あたり10K-50Kの列の近くに(負荷に応じて)。

[日時] _ [5秒間隔](粒度は再び負荷に応じて)

あなたの鍵をすることができますこの方法:あなたがA「日付のバケツ」のキー機能を作る場合は、完全にスーパーの列を回避することができます再作成し、あなたが望むバケットのキーを使ってmulti_getを発行するだけです。

データモデリングのより一般的な概要:

http://www.datastax.com/docs/0.8/ddl/index

+0

おかげzznate、[リンク](http://rubyscale.com/2011/basic-time-series-with-cassandra/)でありますかなり役に立つ。 – user1071714

+0

ありがとうzznate、[リンク](http://rubyscale.com/2011/basic-time-series-with-cassandra/)は非常に役に立ちます。しかし、私はlog-lineの他のいくつかの列に対しては、同様の時間範囲のクエリを使って答えます。ですから、[columnvalue-datetimeinterval]を使用してクエリされた列ごとに異なる列ファミリを作成することをお勧めしますか? – user1071714