database - 是否可以在 Yugabyte YCQL 中建模一对多映射?
问题描述
例如,
key | value
-------------+-------
primary_key1 | v1
primary_key1 | v2
在同一个键有多个值的情况下是否允许上述情况?还是需要一个显式的集群键?如果我有一个包含 2 列的表,该值可以是集群键吗?
解决方案
主键必须是唯一的。这是您区分行的方式。您可以使用集合列(地图、集合、列表)作为值:
cqlsh> create table david.test(key TEXT, value SET<TEXT>, PRIMARY KEY(key));
cqlsh> insert into david.test(key,value) VALUES ('primary_key1', {'v1','v2'});
cqlsh> select * from david.test;
key | value
--------------+--------------
primary_key1 | {'v1', 'v2'}
另一种方法是添加集群键。key
将是分区列,而value
将是集群键(这会将主键更改为(key,value)
):
cqlsh> create table david.test(key TEXT, value TEXT, PRIMARY KEY((key), value)) WITH CLUSTERING ORDER BY (value DESC);
cqlsh> insert into david.test(key,value) values('primary_key1', 'v1');
cqlsh> insert into david.test(key,value) values('primary_key1', 'v2');
cqlsh> select * from david.test;
key | value
--------------+-------
primary_key1 | v2
primary_key1 | v1
这里,key
是partition value
. 是primary key
(键,值);
推荐阅读
- javascript - 尝试使用':is =“component”'渲染组件时如何修复空白屏幕
- uwp - 等待安装程序在隔离环境中完成
- asp.net-core - LocalDB AttachDbFilename connsectionString 绝对路径有效,但相对无效
- python-3.x - python 中的哪个调度程序有助于在特定日期和时间运行 cron 类型的调度以一次性执行?
- node.js - Azure:尝试获取 blob 内容时函数停止工作
- gcc - Fedora 的 GCC 交叉编译工具
- java - 如何在 Swift 中将 Java 的字节更改为 long
- modelica - 如何在参数窗口中生成 n 个参数/选项?
- c++ - c++中类实例的大小
- java - 在图书馆找不到 jar