如何在数组中存储Cassandra映射?

时间:2018-07-24 09:51:36

标签: cassandra cassandra-3.0 spring-data-cassandra

我想以以下结构存储数据:-

"id" : 100, -- primary key
"data" : [
           {
               "imei" : 862304021502870,
               "details" : [ 
                          {
                           "start" : "2018-07-24 12:34:50",
                            "end" : "2018-07-24 12:44:34"
                          },
                          {
                           "start" : "2018-07-24 12:54:50",
                           "end" : "2018-07-24 12:56:34"
                          }
              ]
           }
 ] 

那么我如何在Cassandra中创建表架构呢? 预先感谢。

1 个答案:

答案 0 :(得分:3)

有几种方法,具体取决于有关数据访问/修改的要求-例如,您是否需要修改单个字段,或者一次更新:

imei / details的映射声明为user-defined type(UDT),然后声明表:

create table tbl (
   id int primary key,
   data set<frozen<details_udt>>);

但是从长远来看,这相对难以支持,尤其是当您添加更多具有不同类型的嵌套对象时。另外,在嵌套集合/ UDT的情况下,您不能真正更新必须使用的frozen记录的字段-对于此表结构,您需要替换{{ 1}}。

另一种方法-只需将数据显式序列化/反序列化为JSON或其他格式,并具有如下表结构:

set

create table tbl( id int primary key, data text); 字段的类型取决于您将使用的格式-您也可以使用data来存储二进制数据。但是在这种情况下,您需要更新/获取完整字段。如果您使用Java driver's custom codecs,则可以简化操作,这将有助于在Java和所需格式的数据结构之间进行转换。请参见example in the documentation,以获取JSON的转换。