cassandra 2.0.9:写入重列的最佳实践

时间:2014-07-22 20:37:30

标签: database-schema cassandra-2.0

我对Cassandra的聚类感到有些困惑。我有一个非常重写和更新的应用程序。使用传统的关系数据库,我将数据分成两个表:一个表用于不经常更改的数据;和一个表(具有较短的行)用于经常更改的列:

例如:

create table user_def ( id int primary key, email list< varchar > ); # stable
create table user_var ( id int primary key, state int ); # changes all the time

但是Cassandra似乎已经针对访问稀疏填充的列进行了优化,所以我不确定为Cassandra模式模仿这种方法有什么优势。

使用Cassandra,将频繁更新的列分离到单独的表/列系列(远离不经常更新的列)是否有任何优势,还是应该将所有列组合成一个表/列族?如果我有复合主键并且聚类发挥作用,情况会发生变化吗?

2 个答案:

答案 0 :(得分:0)

Cassandra会像这样处理主键:

主键中的第一个键(可以是复合键)用于分区您的数据。这定义了您的数据保存在(并复制到)的节点。然后,主键中的其他字段用于对分区中的条目进行排序。整个分区总是在一个节点(和副本节点)中。此外,节点内的每个条目都由&#34;其他&#34;主键中的字段。 [主键的第一个元素称为分区键,而主键中的其他字段称为集群键。]

基于此,我说你不妨简单地拥有一个包含id,state和email的表格。看起来你正在使用瘦小的行,我不认为你获得创建单独表格的任何东西(如果有的话)。

答案 1 :(得分:0)

我已经批准了ashic的回答,直到我发现这个:     http://www.datastax.com/dev/blog/cassandra-anti-patterns-queues-and-queue-like-datasets

指出(对于删除大量访问):

...考虑将具有大量流失率的数据划分为单独的行,并在不再需要时删除整行。或者,将其划分为单独的表,并在不再需要时将其截断...

这属于产品的“队列”反模式。