在Cassandra中存储混合类型的列表

时间:2014-06-24 06:52:46

标签: cassandra cassandra-2.0

在Cassandra中,在指定表格和字段时,必须为每个字段指定一种类型(textintboolean等。这同样适用于集合,您必须将集合锁定为特定类型(set<text>等)。

我需要在Cassandra中存储混合类型的列表。该列表可能包含数字,字符串和布尔值。所以我需要像list<?>这样的东西。

这是否可以在Cassandra中使用,如果没有,您建议使用哪种解决方法来存储混合类型的项目列表?我勾画了一些,但没有一个看起来是正确的方式......

2 个答案:

答案 0 :(得分:2)

Cassandra的CQL接口是严格类型的,因此您将无法创建具有无类型集合列的表。

我基本上看到两个选项:

  • 创建一个列表字段,并将所有内容转换为文本(不太好,我同意)
  • 使用thift API并按原样保存所有内容。

答案 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等),所以很方便。