首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CQL3现在需要Cassandra的模式吗?

CQL3现在需要Cassandra的模式吗?
EN

Stack Overflow用户
提问于 2012-10-09 10:24:28
回答 4查看 3.7K关注 0票数 9

上周我刚上了一个Cassandra的速成课程,从Thrift API到CQL,再到摸索SuperColumns,再到我不应该使用它们和用户组合键。

我现在正在尝试使用CQL3,但似乎不能再插入未在模式中定义的列,也不能在select *中查看这些列

我是不是错过了在CQL3中启用它的一些选项,或者它希望我定义模式中的每一列(这违背了宽而灵活的行的目的,imho)。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-09 22:26:26

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

但是,您可以进行任意多的更改,不会导致锁定或性能影响。

也就是说,在更早的C*版本中使用“动态列”的大多数地方,在C* 1.2中使用Map的效果更好。

票数 6
EN

Stack Overflow用户

发布于 2012-10-10 15:27:47

我建议您使用“使用紧凑存储”来探索复合列。“紧凑存储”列族实际上只允许您定义键列:

示例:

使用紧凑存储创建表entities_cargo (entity_id ascii、item_id ascii、qt ascii、主键( entity_id、item_id) )

实际上,当您插入来自itemid的不同值时,您不会添加包含entity_id、item_id和qt的行,而是添加一个包含name (item_id内容)和value (qt内容)的列。所以:

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

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

现在,下面是在CQL3中查看此行的方式:

select cqlsh:goh_master> *

entities_cargo where entity_id = 100;

entity_id | item_id | qt

100 | oggetto 1|3 100 | oggetto 2|3

如果你从cli中检查tnem,它们是怎样的:

default@goh_master get entities_cargo100;

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

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

返回了%2个结果。

您可以使用以下命令访问单个列

select * from entities_cargo where entity_id = 100 item_id = 'oggetto 1';

希望能有所帮助

票数 5
EN

Stack Overflow用户

发布于 2014-01-15 22:35:21

Cassandra仍然允许使用宽行。这个答案引用了在问题提出之后编写的that DataStax blog entry,它详细说明了CQL和底层架构之间的联系。

传统支持

使用以下命令通过Thrift定义的动态柱族(请注意,没有特定于列的元数据):

代码语言:javascript
复制
create column family clicks
  with key_validation_class = UTF8Type
  and comparator = DateType
  and default_validation_class = UTF8Type

以下是CQL中的完全等效内容:

代码语言:javascript
复制
CREATE TABLE clicks (
  key text,
  column1 timestamp,
  value text,
  PRIMARY KEY (key, column1)
) WITH COMPACT STORAGE

这两个命令都创建了一个宽行列族,用于存储按日期排序的记录。

CQL附加组件

此外,CQL还提供了将标签分配给行id、列和值元素的功能,以指示正在存储的内容。以下是在CQL中定义相同结构的另一种方法,在DataStax的示例中突出了这一特性-用于存储用户在网站上的点击量的列系列,按时间排序:

代码语言:javascript
复制
CREATE TABLE clicks (
  user_id text,
  time timestamp,
  url text,
  PRIMARY KEY (user_id, time)
) WITH COMPACT STORAGE

笔记

CQL中的表始终映射到

  • 中的列族。CQL驱动程序使用主键定义的第一个元素,因为行key
  • Composite列用于实现可以在CQL中定义的额外列。对于新设计,不建议使用紧凑存储的
  • ,因为它固定了可能的列数。换句话说,ALTER TABLE ...在这样的表上不能添加。除非绝对必要,否则就把它去掉。--
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12792040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档