2

Cassandra 関連の質問がいくつかあります。

いくつかのデータ (約 10M 行) を保存する必要があります (自然キーとしましょう - 並べ替え可能、更新タイムスタンプ、createDate (YYYYMMDD のみ)、および値フィールド。次の CF を作成する予定です。

CREATE TABLE data (
  id text,
  createdate text,
  updatedate timeuuid,
  value text,
  PRIMARY KEY (id, updatedate)
);

CREATE TABLE data_createdate (
  id text,
  createdate text,
  value text,
  PRIMARY KEY (id, createdate)
);

私の使用方法のクエリは次のようになります。

  • すべての行 (id、value、createdate、updatedate) を取得するため、このような CQL が実行されます SELECT * FROM data

Astyanax を使用していますが、ページングを行うにはどうすればよいですか? パーティショナーを順序保存として有効にする必要があるのでtoken(id)、範囲値で使用してページを移動できますか。

  • 更新された範囲ですべての行を取得するため、このようなCQLで実行できます SELECT * FROM data where updatedate > startdate and updatedate < enddate

繰り返しますが、ページングを行うにはどうすればよいですか?

  • createdate 範囲ですべての行を取得します。上記の質問と似ていますが、data_createdateCFに対して CQL を実行できます。繰り返しますが、ページングを行うにはどうすればよいですか?

提案やコメントはありますか?どうもありがとう。

4

2 に答える 2

1

一般に、列ファミリーのすべてのキーを反復処理する必要があるものは避けたいと考えています。RDBMの場合と同様に、適切なインデックスが設定されているクエリのみを実行する必要があります。

updatedateはテーブルの複合行キーの一部であるため、そのdata列で範囲クエリを使用してページングを実行できます(残念ながら、Cassandraでページングを実行する方法は非常に複雑です)。これは、最初の2つのユースケースが実際には同じであることを意味します。

3番目のケースが何を意味するのかよくわかりませんがdata、範囲クエリを使用して行をクエリすることを意味しますかcreatedateSELECT * FROM data WHERE createdate > '20130206' AND createdate < '20130228'私はあなたの2番目のテーブル(data_createdate)とそれがどこに収まるのか混乱しています。

私が思うに、1つの解決策は、 ( )のcreatedate列にセカンダリインデックスを追加することです。セカンダリインデックスの詳細については、ドキュメントをご覧くださいdataCREATE INDEX data_createdate_index ON data (createdate)

于 2013-02-06T20:18:15.843 に答える
1

ページングを実現したい場合は、最後に取得したセットから最後のキーを保存して、次回、次のページ スライスを取得するときに、クエリのエントリ ポイントが最後に保存されたキーになるようにします。このリンクhttp://www.datastax.com/docs/1.2/cql_cli/using/pagingにアクセスすることをお勧めします 。

于 2013-02-06T12:09:41.517 に答える