CQL3现在需要Cassandra的架构吗?

Arn*_*sen 9 cql cassandra cql3

我上周刚刚参加了Cassandra的速成课程,从Thrift API到CQL到了SuperColumns,我不应该使用它们和用户复合键.

我现在正在尝试CQL3,看起来我不能再插入未在架构中定义的列,或者看到那些列中的列 select *

我错过了一些在CQL3中启用它的选项,或者它是否希望我定义模式中的每一列(忽略宽,灵活行的目的,imho).

jbe*_*lis 6

是的,CQL3确实需要在使用之前声明列.

但是,您可以根据需要执行尽可能多的ALTER,不会导致锁定或性能损失.

也就是说,在早期的C*版本中使用"动态列"的大多数地方都可以通过C*1.2中的Map更好地服务.

  • Yikes:"在早期的C*版本中你使用'动态列'的大多数地方都可以通过C*1.2中的Map更好地服务".这是非常坦率的错误建议,因为CQL Collections文档声明:"永远不要在集合中插入超过64K的项目.如果在集合中插入超过64K的项目,只有64K的项目可以查询,导致数据丢失".http://www.datastax.com/documentation/cql/3.0/webhelp/cql/cql_using/use_collections_c.html (4认同)

小智 5

我建议你用"WITH COMPACT STORAGE"探索复合柱."COMPACT STORAGE"列系列允许您实际上只定义键列:

例:

CREATE TABLE entities_cargo(entity_id ascii,item_id ascii,qt ascii,PRIMARY KEY(entity_id,item_id))具有紧凑的存储

实际上,当您从itemid插入不同的值时,您不会添加具有entity_id,item_id和qt的行,但是您添加了一个名称(item_id内容)和值(qt内容)的列.所以:

插入entities_cargo(entity_id,item_id,qt)值(100,'oggetto 1',3);

插入entities_cargo(entity_id,item_id,qt)值(100,'oggetto 2',3);

现在,以下是您在CQL3中看到这些行的方式:

cqlsh:goh_master> select*from entities_cargo其中entity_id = 100;

entity_id | item_id | QT

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

  100 | oggetto 1 |  3

  100 | oggetto 2 |  3
Run Code Online (Sandbox Code Playgroud)

如果你从cli检查tnem它们是怎么回事:

[default @ goh_master] get entities_cargo [100];

=>(column = oggetto 1,value = 3,timestamp = 1349853780838000)

=>(column = oggetto 2,value = 3,timestamp = 1349853784172000)

返回2个结果.

您可以使用访问单个列

select*from entities_cargo,其中entity_id = 100,item_id ='oggetto 1';

希望能帮助到你