在Cassandra中,在指定表格和字段时,必须为每个字段指定一种类型(text
,int
,boolean
等。这同样适用于集合,您必须将集合锁定为特定类型(set<text>
等)。
我需要在Cassandra中存储混合类型的列表。该列表可能包含数字,字符串和布尔值。所以我需要像list<?>
这样的东西。
这是否可以在Cassandra中使用,如果没有,您建议使用哪种解决方法来存储混合类型的项目列表?我勾画了一些,但没有一个看起来是正确的方式......
答案 0 :(得分:2)
Cassandra的CQL接口是严格类型的,因此您将无法创建具有无类型集合列的表。
我基本上看到两个选项:
答案 1 :(得分:2)
根据http://www.mail-archive.com/user@cassandra.apache.org/msg37103.html的建议,我决定将各种值编码为二进制并将它们存储到list<blob>
中。这允许仍然查询集合值(在Cassandra 2.1+中),只需要对查询中的值进行编码。
在python上,最简单的方法可能是在存储数据时进行pickle和hexify:
pickle.dumps('Hello world').encode('hex')
加载它:
pickle.loads(item.decode('hex'))
使用pickle
将实现绑定到python,但它在加载时会自动转换为正确的类型(int,string,boolean等),所以很方便。