4

行キーとしてタイムスタンプ (「Ymdhisu」) を使用して、毎月多数 (数十万) のイベントを保存している Cassandra 列ファミリーがあります。各イベントのデータをキャプチャする複数の列があります。特定の時間範囲のイベント データを取得しようとしました。たとえば、1 月の場合、次の CQL クエリを使用しました。

a) 2013 年 1 月 1 日から 1 月 15 日の範囲のクエリ

Key > 20130101070100000000 および Key < 20130115070100000000 limit 100000 の Test から count(*) を選択します。不正な要求: 開始キーの md5 ソートが終了キーの md5 の後にソートされます。これは許可されていません。RandomPartitioner の下では、おそらく終了キーをまったく指定しないでください。

b) 2013 年 1 月 1 日から 1 月 10 日の範囲のクエリ

Key > 20130101070100000000 および Key < 20130110070100000000 limit 100000 の Test から count(*) を選択します。カウント - 73264

c) 2013 年 1 月 1 日から 1 月 2 日の範囲のクエリ

Key > 20130101070100000000 および Key < 20130102070100000000 limit 100000 の Test から count(*) を選択します。カウント - 78328

範囲検索が機能していないようです。私のColumnfamilyのスキーマは次のとおりです。

Create column family Test with comparator=UTF8Type and default_validation_class=UTF8Type and key_validation_class=UTF8Type AND compression_options={sstable_compression:SnappyCompressor, chunk_length_kb:64};

データを抽出するための提案は何ですか? キー検証クラスを TimeUUID タイプとしてスキーマを再定義する必要がありますか? スキーマを変更せずに効率的にクエリを実行する他の方法はありますか? この列ファミリーでは、毎月少なくとも 100 ~ 200K 行のデータを扱っています。このスキーマがこの目的で機能しない場合、ここで説明されている種類のデータを保存および取得するための適切な Cassandra スキーマは何でしょうか?

4

1 に答える 1

5

「日付」や「月」などの二次索引を作成し、各イベントの日付と月を他のデータとともにそれらの列に格納できます。データをクエリする場合、指定した月または日のすべての行を取得できます。

キーの範囲クエリが機能するとは思わない。おそらく、パーティショナーを RandomPartitioner から ByteOrderedPartitioner に変更した場合はどうでしょうか?

于 2013-01-18T21:41:16.323 に答える