行キーとしてタイムスタンプ (「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 スキーマは何でしょうか?