如何在数组中存储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中创建相同的表模式呢?提前谢谢。

根据数据访问/修改的要求,有几种方法可以实现这一点,例如,您需要修改单个字段,还是一次更新:

imei/details的映射声明为用户定义类型(UDT(,然后像这样声明表:

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

但从长远来看,这是相对难以支持的,尤其是如果添加了更多不同类型的嵌套对象。此外,您不能真正更新frozen记录的字段,必须才能在嵌套集合/UDT的情况下使用这些字段-对于此表结构,您需要替换set中的完整记录。

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

create table tbl(
id int primary key,
data text);

data字段的类型取决于您将使用的格式——您也可以使用blob来存储二进制数据。但在这种情况下,您需要更新/获取完整字段。如果您使用Java驱动程序的自定义编解码器来处理Java中的数据结构之间的转换,那么您可以简化事情;所需格式。请参阅文档中的示例,了解JSON的转换。

最新更新