Cassandra中的复合列值?

时间:2013-09-20 16:53:15

标签: java cassandra astyanax column-family

我们可以在Cassandra Column Family的每一列中都有复合值吗?

user-id   column1-name
123      (Column1-Value  Column1-SchemaName  Column1-LastModifiedDate)

userId是这里的rowKey。同样的事情也适用于其他专栏。

每个列值始终包含三个以下内容 -

ByteType for Column-Value

UTF8Type for Column-SchemaName

DateType for LastModifiedDate

如果是的话,有人可以帮我设计列系列吗?我将使用Astyanax客户端插入上面的列族。

3 个答案:

答案 0 :(得分:1)

有两种方法:

  1. 对列使用CompositeType。在这种情况下,将有4个组件复合列名称和空列值。
  2. 使用astyanax自定义序列化程序。在这种情况下,列名称将保持不变。自定义序列化程序将从bytebuffer转换为您的自定义对象并返回。

答案 1 :(得分:0)

你似乎正在尝试创造一个所谓的“超级专栏”,最近在Cassandra中被高度“推荐”(Why are super columns in Cassandra no longer favoured?)。所以,我会说你应该尝试重新考虑你的设计,如果你真的需要在一个列中拥有所有这些值,你可以从应用程序中自己编组/解组,或者你也可以考虑使用“复合键”,如果这对你有所帮助。

答案 2 :(得分:0)

我不认为,在卡桑德拉完全可能。要么必须对列族进行去规范化,要么照看 Cassandra Collection 支持。如果您可以将架构名称 LastModifiedDate 的数据模型数据类型限制为单一类型,则可能地图对您的情况有帮助。