在Cassandra中将三列值组合成一列?

时间:2013-09-21 00:23:33

标签: java cassandra astyanax column-family

以下是我需要在Cassandra Column Family中表示的数据。

rowKey           e1_name                    e1_schemaname                   e1_last_modified_date
123             (ByteArray value)           abc (some string)               some_date

userId在这里是rowKeye1_namee1_schemanamee1_last_modified_date是专门用于e1的列。所有这三列都包含专门用于e1列的值。以同样的方式,我将有另一个列,如下面。

 e2_name                    e2_schemaname                   e2_last_modified_date
(ByteArray value)           abc (some string)               some_date

 e3_name                    e3_schemaname                   e3_last_modified_date
(ByteArray value)           abc (some string)               some_date

现在我在想 - 有没有办法将这三件事e1_namee1_schemanamee1_last_modified_date分组到一个列e1中并存储复合值一起为所有三个,而不是分开存储。

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

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您可以按以下方式设计架构:

列:

user_id,record_type,name,schemaname,last_modified_date

user_id是您的行键(分区键)

如果e1,e2在单个用户中是唯一的,则

record_type左右(e1,e2)可能是群集密钥。否则,您的群集密钥可能是复合的,包括用于创建唯一密钥的字段集

在第一种情况下PRIMARY_KEY(user_id,record_type)

          e1                          e2
123 : {name, schemaname, date }  | {name, schemaname, date }

第二个例子可能是PRIMARY_KEY(user_id,record_type,name)

          e1|name                    e2|name
123 : {schemaname, date }  | {schemaname, date }

听起来不错吗?

最后我要说有一个非常好的官方Datastax驱动程序用于cassandra本地传输:

https://github.com/datastax/java-driver