Cassandra CQL与cql2和cql3之间不兼容

时间:2013-04-16 00:33:37

标签: cassandra cql

似乎在Cassandra CQL3中即时添加新列无效;说我有这张桌子:

  

cqlsh:Keyspace2>从用户中选择*;

     

user_name | birth_year |性别|密码| session_token |状态

     

----------- + ------------ + -------- + ------------ + --------------- ------- +

     

jsmith | 1968年| null | ch @ ngem3a | null |空

     

jsmith2 | 1963年| null | ch @ ngem3a2 | null |空

     

cqlsh:Keyspace2>插入用户(user_name,x)值('jsmith',100);

>错误请求:未知标识符x

  

也许您打算使用CQL 2?启动cqlsh时尝试使用-2选项。

但是警告是正确的,当我去CQL2时,同样的事情也有效:

> Blockquote

cqlsh:Keyspace2> exit
[root@bdvm1 ~]# cqlsh
Connected to Test Cluster at localhost:9160.
[cqlsh 2.2.0 | Cassandra 1.1.9-dse-2.2.2-SNAPSHOT | CQL spec 2.0.0 | Thrift protocol 19.33.0]
Use HELP for help.
cqlsh> use Keyspace1;
cqlsh:Keyspace1> select * from users;
 KEY   | birth_year | gender
-------+------------+--------
  TEST |       1968 |      m
  TEST1 |       1968 |      f

cqlsh:Keyspace1> insert into users (KEY, x) values ('jsmith',100);
cqlsh:Keyspace1> select * from users;
 KEY,TEST | birth_year,1968 | gender,m
 KEY,TEST1 | birth_year,1968 | gender,f
 KEY,jsmith | x,100

有谁知道为什么?我原以为CQL3是向后兼容的。

感谢, 马特

2 个答案:

答案 0 :(得分:3)

您需要阅读http://www.datastax.com/dev/blog/cql3-for-cassandra-expertshttp://www.datastax.com/dev/blog/thrift-to-cql3。第一个特别解释了为什么CQL2无法模拟许多常见的Cassandra设计模式,以及我们如何在CQL3中解决这些模式。

简短回答:CQL2中称为“连续动态列”的内容在CQL3中表示为“分区中的多行”。为了减少混淆,我们现在引用name的原始存储引擎atom:value作为单元格而不是列,以及一组具有公共密钥作为分区的单元格。

答案 1 :(得分:2)

直接回答为NO,CQL3向后兼容(请参阅cql3 experts)。但这并不意味着他们已经违背了向后兼容的承诺。 CQL3背后的基础API仍然是Thrift API,它具有与0.7相同的功能,它只是实现风格已经改变的问题。