ScyllaDB:防止特定列上的重复条目
ScyllaDB: Prevent duplicate entries on specific columns
我正在使用 ScyllaDB
并且我有一个包含以下 5 列的 table:
K1 K2 V1 V2 V3
其中K1
是分区键,K2
是集群键,V1..V3
是代表table中3个不同值的三列。
我想防止将重复值添加到 table,其中 K1, K2, V1 and V2
与 table 中的现有条目匹配。换句话说,不应该 add/store 超过一行,其中该行中的所有 4 列都与具有相同值的现有行相匹配。
这可以用 Scylla 实现吗?
谢谢
实现这一点的最可靠方法是使所有 4 个列成为 table 的主键的一部分。键自然是 de-duplicated 或者更好的说法,一个新的键值写入只会用该键覆盖旧值。
您提到当前模式是这样的(为简单起见,假设文本为类型):
CREATE TABLE ks.tbl (
K1 text,
K2 text,
V1 text,
V2 text,
V3 text,
PRIMARY KEY(K1, K2)
);
您可以将主键更改为:PRIMARY KEY(K1, (K2, V1, V2))
。
您仍然可以仅基于 K1
和 K2
进行查询,因为集群限制只允许指定集群键的前缀。
我正在使用 ScyllaDB
并且我有一个包含以下 5 列的 table:
K1 K2 V1 V2 V3
其中K1
是分区键,K2
是集群键,V1..V3
是代表table中3个不同值的三列。
我想防止将重复值添加到 table,其中 K1, K2, V1 and V2
与 table 中的现有条目匹配。换句话说,不应该 add/store 超过一行,其中该行中的所有 4 列都与具有相同值的现有行相匹配。
这可以用 Scylla 实现吗?
谢谢
实现这一点的最可靠方法是使所有 4 个列成为 table 的主键的一部分。键自然是 de-duplicated 或者更好的说法,一个新的键值写入只会用该键覆盖旧值。 您提到当前模式是这样的(为简单起见,假设文本为类型):
CREATE TABLE ks.tbl (
K1 text,
K2 text,
V1 text,
V2 text,
V3 text,
PRIMARY KEY(K1, K2)
);
您可以将主键更改为:PRIMARY KEY(K1, (K2, V1, V2))
。
您仍然可以仅基于 K1
和 K2
进行查询,因为集群限制只允许指定集群键的前缀。