2

質問 - CQL2 では、存在しない列の値に対して select ステートメントを使用して結果を取得できます (ただし、これは CQL3 では発生しません)。誰かが私にこれを説明できますか?

存在しない C0 列の値 ('test') を使用して選択クエリで結果が得られる理由を理解していますか? よくわかりません – 以下を参照してください: 何か設定が間違っているはずですが、何が?

cqlsh> use Keyspace1;
cqlsh:Keyspace1> CREATE COLUMNFAMILY users (
             ... KEY varchar PRIMARY KEY,
             ... gender varchar,
         ... birth_year bigint);
cqlsh:Keyspace1> INSERT INTO users (KEY, gender, birth_year) VALUES ('TEST', 'm', 1968);
cqlsh:Keyspace1> select * from users;
 KEY  | birth_year | gender
------+------------+--------
 TEST |       1968 |      m

cqlsh:Keyspace1> select * from users where key = 'TEST';
 KEY  | birth_year | gender
------+------------+--------
 TEST |       1968 |      m

cqlsh:Keyspace1> CREATE INDEX birth_year_key ON users (birth_year);
cqlsh:Keyspace1> CREATE INDEX gender_key ON users (gender);
cqlsh:Keyspace1> select * from users where key = 'TEST' and birth_year = 1968;
 KEY  | birth_year | gender
------+------------+--------
 TEST |       1968 |      m

cqlsh:Keyspace1> select * from users where  birth_year = 1968;
 KEY  | birth_year | gender
------+------------+--------
 TEST |       1968 |      m

ここまでは順調ですが、次の動画をご覧ください。

cqlsh:Keyspace1> select * from users where key = 'TEST' and birth_year = 1962;
 KEY  | birth_year | gender
------+------------+--------
 TEST |       1968 |      m

ここで何が起こっているのですか?ありがとう、マット

4

1 に答える 1

2

私にはCQL2のバグのように聞こえます。

基本的に、CQL2 がまだ残っている唯一の理由は、CQL2 に対して書かれたいくつかのアプリケーションが引き続き機能するようにするためです。新しい機能は追加されず、バグは修正されません (他の場所でリグレッションが発生する可能性があるため)。

したがって、新しいアプリケーションを構築する場合は、絶対に CQL3 を使用する必要があります。CQL2 を意味のある意味での代替手段と考えないでください。代替として CQL3 を作成するきっかけとなった CQL2 の欠点の詳細な内訳については、http: //www.datastax.com/dev/blog/cql3-for-cassandra-experts を参照してください。

于 2013-04-14T04:59:46.650 に答える