是否可以在 Yugabyte YCQL 中模拟一对多映射?
Is it possible to model one-to-many mappings in Yugabyte YCQL?
例如,
key | value
-------------+-------
primary_key1 | v1
primary_key1 | v2
是否允许同一个键有多个值?还是需要一个明确的集群密钥?如果我有一个包含 2 列的 table,该值可以作为聚类键吗?
主键必须是唯一的。这就是您区分行的方式。
您可以使用值 a collection column (map,set,list):
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'}
另一种方法是添加 clustering key。 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
是 (key,value);
例如,
key | value
-------------+-------
primary_key1 | v1
primary_key1 | v2
是否允许同一个键有多个值?还是需要一个明确的集群密钥?如果我有一个包含 2 列的 table,该值可以作为聚类键吗?
主键必须是唯一的。这就是您区分行的方式。 您可以使用值 a collection column (map,set,list):
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'}
另一种方法是添加 clustering key。 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
是 (key,value);