0

是否可以使用 hector api 在 cassandra 中插入一行以下格式:

rowkey1 ==>     "Column name1":{"item1","item2","item3"}
                "Column name2":{"item11","item22","item33"}
                "Column name3":{"item111","item222","item333"}

rowkey2 ==>     "Column name1-a":{"item1","item2","item3"}
                "Column name2-b":{"item11","item22","item33"}
                "Column name3-c":{"item111","item222","item333"}

即每列将包含:column_name,多列值即一列将由列名组成,其值将由多个内容组成,例如 {'item title','item price','about item'} .Columns name 和 kind列的值是动态的,不同的行可能有不同的列,不同的数量和不同的值。

我正在考虑做类似的事情:列名将是字符串,列值将是一些具有必需属性的类对象。好吗?背后的想法是它将包含同一列中的所有内容,并且在对列的单个调用中将给出所有多个值。使用多列可能会增加读取多列的工作量。

我认为编辑和阅读记录应该不是问题。我使用的是 hector 核心 API 而不是 CQL,因为列是动态的。

有什么建议或解决方案吗??

4

2 回答 2

3

听起来您想要使用的是CQL Map。Hector 对 CQL 的支持很差;请改用DataStax Java 驱动程序

不幸的是,声称 CQL 不支持动态列是一种常见的误解。

于 2013-07-10T18:51:29.140 回答
0

根据定义,Cassandra 是一个键值数据库,因此您寻找的模型不符合 Cassandra 的理念。列名必须是唯一的,所以如果你做了:

create columnfamily demo WITH comparator = UTF8Type AND key_validation_class = UTF8Type AND default_validation_class=UTF8Type;
 set demo['1']['column1'] = 'value';
 set demo['1']['column1'] = 'value2';

当您执行获取时:

 GET demo['1'];
=> (column=column1, value=value2, timestamp=1373438507059000)

我建议创建两个具有相同结构的列族,因此您可以在两个列族中具有相同的列名,但在每个列族中存储不同的列值。使用这种方法,您可以独立编辑列。

于 2013-07-10T06:47:23.017 回答