Cassandra:使用附加数据存储列值

时间:2013-07-09 18:22:15

标签: cassandra hector

是否可以使用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,多列值,即 列将包含列名称,其值将包含多个内容,例如{'商品标题','商品价格','关于商品'} 。列名称和列值类型是动态的,不同的行可能有不同的列,具有不同的数字和不同类型的值。

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

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

任何建议或解决方案??

2 个答案:

答案 0 :(得分:3)

听起来你想要使用的是CQL Map。 Hector对CQL的支持很少;请改用DataStax Java Driver

CQL不支持动态列的说法是an unfortunately common misunderstanding

答案 1 :(得分: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:

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

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