0

私のデータストレージ形式は次のとおりです。

RowKey: a:b:c
=> ( counter=d:e:f:g, value=1)
どこ、
 a:タイムスタンプ(形式:YYYYMMDDHH、HHは00〜23の範囲で変化します)
 b:エンコードされたUrl
 c:id(0〜9によって異なります)

 d:文字列型
 e:浮動値
 f:浮動値
 g:整数型

そのようなすべての行(含まれる列を含む)をフェッチしたくありません。ここで、url =列ファミリー全体から与えられた値です。cは00〜23

です。Java(できればHectorクライアントを使用)でこれをどのように実現できますか?

4

1 に答える 1

2

これはCassandraでは不可能です。CompositeKeysは非常にシンプルで、基本的には個別のパーツを1つのキーに変換するだけです。そのため、データはキー順にcassandraに保存(およびソート)され、これがデータの取得方法です。

複合キー(a:b:c)全体に対してのみ範囲/スライスクエリを実行できます。これは、最初にa、次にb、次にcでソートされます。cで範囲クエリを実行できるようにする場合は、c:a:bの形式で複合キーを使用してデータを保存する必要があります。この場合、aとbで範囲クエリを実行することはできません。 1人。

ここには2つのオプションがあります。

1)リレーショナルデータベースを使用します(おそらくここでは適切なソリューションではありません)2)データを複製します。したがって、データ用に2つの行を用意します。1つはCompositeKeyがa:b:cで、もう1つはCompositeKeyがc:a:bです(範囲/スライスクエリの並べ替えが必要な場合は3つ目のb:c:a)。 bのみ)。データ自体は、これらの2つ(/ 3つ)の行すべてで同じになり、必要なクエリに基づいて適切な行を検索できます。残念ながら、これはCassandraの欠点の1つですが、BigDataモデルを実現するために必要です。

于 2013-01-14T15:34:47.187 に答える