0

さまざまなアプローチを試しましたが、問題の解決策が見つかりません: 私のデータはテーブルのようなものです。つまり、一連の文字列からの入力の組み合わせごとに 1 つのデータ ポイント (float) があります。

(a mapping of S × S → ℝ )

次のルックアップを実行できるように、スキーマをモデル化したいと考えています。

  • 特定の範囲の値を持つ文字列のすべてのペア
  • 特定の入力文字列に対して、マップされた値が特定の範囲内にあるすべての文字列
  • 入力文字列の特定の組み合わせについて、マップされた値

マッピングは対称 ( ) であるため、マッピング全体ではなく一意の値m(x,y) == m(y,x)のみを保存すればよかったと思います。
n*(n+1) / 2n^2

私がこれまでに試したこと:

  1. S1+" "+S2 が行キー、値が列名
  2. 行キーとして S1、列名として [S2:value] の複合キー
  3. S1 は行キー、S2 は列名、値は列値です。

残念ながら、これらすべてのアプローチでは、必要なすべてのクエリを実行できるわけではありません。これは Cassandra でも可能ですか?

4

1 に答える 1

0

Cassandra は、最初のクエリ(特定の範囲内の値を持つ文字列のすべてのペア) をサポートしていません。現在、Cassandra では、少なくとも 1 つEQWHERE句を含む範囲クエリのみが許可されているためです。ただし、2番目と3番目のクエリは実行可能です:)


次の例を検討してください。

cqlsh:so> desc table string_mappings;
CREATE TABLE string_mappings (
  s1 ascii,
  s2 ascii,
  value float,
  PRIMARY KEY (s1, s2, value)
) 

そして、次のタプルがあります。

cqlsh:so> select * from string_mappings;

 s1    | s2    | value
-------+-------+-------
 hello | hello |     1
 hello | world |   0.2
 stack | hello |     0
 stack | stack |     1
 stack | world |     0
 world | world |     1

EQCassandra は現在、 on theWHERE句のない範囲クエリをサポートしていないため、最初のクエリは機能しません。

cqlsh:so> select * from string_mappings where value>0.5;
Bad Request: PRIMARY KEY part value cannot be restricted (preceding part s2 is either not restricted or by a non-EQ relation)

ただし、次の範囲クエリ (2 番目のクエリ) は、次のものがあるため問題ありませんEQ

cqlsh:so> select * from string_mappings where value > 0.5 and s2='hello' allow filtering;

 s1    | s2    | value
-------+-------+-------
 hello | hello |     1

キーワードを入れることを忘れないでALLOW FILTERINGください。そうしないと、次のエラーが発生します。

cqlsh:so> select * from string_mappings where value > 0.5 and s2='hello';
Bad Request: Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING

最後に、3 番目のクエリも問題ではありません :)

cqlsh:so> select * from string_mappings where S1='hello' and S2='world';

 s1    | s2    | value
-------+-------+-------
 hello | world |   0.2
于 2013-08-13T06:06:35.687 に答える