是否可以使用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,因为列是动态的。
任何建议或解决方案??
答案 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)
我建议创建两个具有相同结构的列族,因此您可以在两个列族中具有相同的列名,但在每个列族中存储不同的列值。使用此方法,您可以单独编辑列。