在Cassandra中存储混合类型列表

在Cassandra中存储混合类型列表,cassandra,cassandra-2.0,Cassandra,Cassandra 2.0,在Cassandra中,当指定表和字段时,必须为每个字段指定一个类型text、int、boolean等。。这同样适用于集合,您必须将集合锁定到特定类型集等 我需要在Cassandra中存储一个混合类型列表。该列表可能包含数字、字符串和布尔值。所以我需要一些类似列表的东西 这在Cassandra中可能吗?如果不可能,您建议如何解决存储混合类型项列表的问题?我画了一些,但没有一个是正确的方法…Cassandra的CQL接口是严格类型化的,因此您将无法创建具有非类型化集合列的表 我基本上看到两种选择:

在Cassandra中,当指定表和字段时,必须为每个字段指定一个类型text、int、boolean等。。这同样适用于集合,您必须将集合锁定到特定类型集等

我需要在Cassandra中存储一个混合类型列表。该列表可能包含数字、字符串和布尔值。所以我需要一些类似列表的东西


这在Cassandra中可能吗?如果不可能,您建议如何解决存储混合类型项列表的问题?我画了一些,但没有一个是正确的方法…

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

我基本上看到两种选择:

我同意,创建一个列表字段,并将所有内容转换为不太好的文本 使用并按原样存储所有内容。
Cassandra的CQL接口是严格类型化的,因此您将无法创建具有非类型化集合列的表

我基本上看到两种选择:

我同意,创建一个列表字段,并将所有内容转换为不太好的文本 使用并按原样存储所有内容。 正如在会议上建议的那样,我决定将各种值编码成二进制,并将它们存储到列表中。这允许在Cassandra 2.1+中仍然查询集合值,只需对查询中的值进行编码即可

在python上,最简单的方法可能是在存储数据时进行pickle和hexify:

pickle.dumps('Hello world').encode('hex')
要加载它,请执行以下操作:

pickle.loads(item.decode('hex'))
使用pickle将实现与python绑定,但在加载时它会自动转换为正确的int、string、boolean等类型,因此很方便。

正如在上所建议的那样,我决定将各种值编码为二进制并存储到列表中。这允许在Cassandra 2.1+中仍然查询集合值,只需对查询中的值进行编码即可

在python上,最简单的方法可能是在存储数据时进行pickle和hexify:

pickle.dumps('Hello world').encode('hex')
要加载它,请执行以下操作:

pickle.loads(item.decode('hex'))

使用pickle将实现绑定到python,但在加载时它会自动转换为正确的int、string、boolean等类型,因此很方便。

在意识到问题的流量很低之后,我在cassandra用户邮件列表上问了这个问题,并在那里得到了更多的答复:在意识到问题的流量很低之后,我在cassandra用户邮件列表上问了这个问题,得到了更多的回复:谢谢你的建议,我还考虑过将所有内容转换为字符串,添加某种元数据前缀,例如!int:,但它确实很难看,并且使查询变得困难。我不熟悉Cassandra,但我认为Thrift协议有些不受欢迎,我想避免,即使即将发布的2.1版本中的cqlsh似乎使用本机协议而不是Thrift。感谢您的建议,我还考虑将所有内容转换为字符串,添加某种元数据前缀,例如!int:,但它确实很难看,并且使查询变得困难。我不熟悉Cassandra,但我认为Thrift协议有点不受欢迎,我想避免,即使即将发布的2.1版本中的cqlsh似乎使用本机协议而不是Thrift。+1我想知道这一点,并认为您可能能够在Cassandra 2.1中解决这个问题,它应该具有用户定义的类型。不过,解决方法不错。@BryceAtNetwork23实际上,用户定义的类型没有帮助。我可以定义一个列表,但是我仍然需要为每种类型指定单独的字段。是的,它可以工作,但不会比为每种类型使用单独的列表更好。+1我想知道这一点,并认为也许你可以在Cassandra 2.1中解决这个问题,它应该有用户定义的类型。不过,解决方法不错。@BryceAtNetwork23实际上,用户定义的类型没有帮助。我可以定义一个列表,但是我仍然需要为每种类型指定单独的字段。所以它会工作是的,但不会比为每种类型使用单独的列表更好。