cassandra - 如何将 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>>);
但从长远来看,这相对难以支持,尤其是当您添加更多不同类型的嵌套对象时。另外,在嵌套集合/UDT 的情况下,您无法真正更新必须frozen
使用的记录字段- 对于此表结构,您需要替换内部的完整记录。set
另一种方法 - 只需对 JSON 或其他格式的数据进行显式序列化/反序列化,并具有如下表结构:
create table tbl(
id int primary key,
data text);
字段的类型data
取决于您将使用的格式 - 您也可以使用blob
它来存储二进制数据。但在这种情况下,您需要更新/获取完整字段。如果您使用Java 驱动程序的自定义编解码器,您可以简化事情,该编解码器将负责您的 Java 数据结构和所需格式之间的转换。请参阅文档中的示例以了解与 JSON 之间的转换。
推荐阅读
- python - 基于数组字段的MongoDB查找查询
- docker - “docker run --rm -v”从守护进程获取错误响应:状态码不正常,但 500
- c# - 升级我的 Chrome 后,除了 Bootstrap Datepicker 之外还有两个黑点
- c++ - 如何使用 PJSIP 更改 INVITE SDP 中的 RTP 媒体流地址?
- html - 两个并排可滚动的 div,水平滚动始终可见
- plugins - Gatsby createSchemaCustomization 向每个节点添加自定义字段
- powershell - Get-ADUser -LDAPFilter 使用 AND 和 OR
- r - 从依赖于其他变量中的 NA 的变量中删除单个值
- javascript - 使用循环的 Firestore 批量写入
- python-3.x - Python2和Python3之间的字符编码