我想以以下结构存储数据:-
"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中创建表架构呢? 预先感谢。
答案 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的转换。