Cassandra table 1个主键,1个聚类列,1个常规列,不追加数据。它覆盖它

Cassandra table with one primary key, one clustering column, and one regular column does not append data. It overwrites it

我想我一定遗漏了一些基本的东西。

我的table定义是:

CREATE TABLE IF NOT EXISTS bundle_components (
    bundle_id uuid,
    component_type text,
    component_id uuid,
    PRIMARY KEY (bundle_id, component_type)
);

CREATE INDEX ON bundle_components(component_type);
CREATE INDEX ON bundle_components(component_id);

但是,我似乎只得到一个 单个 component_id 每个独特的 bundle_idcomponent_type 组合。我的印象是 table 会有宽行,所以如果它们具有相同的 bundle_idcomponent_type 组合,我会有多个 component_ids

这是实际问题。 component_id 具有不同值的两个 INSERT 语句导致单个条目(先前的条目被覆盖):

cqlsh:voltron> INSERT INTO bundle_components(bundle_id, component_type, component_id) VALUES(8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf, 'script', 6558981e-1d89-43c3-a1fc-b2cf45119bcc);
cqlsh:voltron> select * from bundle_components ;

 bundle_id                            | component_type | component_id
--------------------------------------+----------------+--------------------------------------
 8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf |        channel | a02069df-be81-4960-b64e-9ed8ee09550f
 8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf |         script | 6558981e-1d89-43c3-a1fc-b2cf45119bcc

(2 rows)
cqlsh:voltron> INSERT INTO bundle_components(bundle_id, component_type, component_id) VALUES(8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf, 'script', 7fcf4402-c8b3-41ed-a524-b1b546511635);
cqlsh:voltron> select * from bundle_components ;

 bundle_id                            | component_type | component_id
--------------------------------------+----------------+--------------------------------------
 8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf |        channel | a02069df-be81-4960-b64e-9ed8ee09550f
 8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf |         script | 7fcf4402-c8b3-41ed-a524-b1b546511635

谁能告诉我我做错了什么?

您的主键是 (bundle_id, component_type),因此您只能有 1 个 (bundle_id, component_type) 的唯一组合。

您可能想要做的是将 component_id 添加到您的主键 ((bundle_id, component_type, component_id)),这将使您拥有多个具有相同 bundle_id 和 [=24= 的组件].通过该更改,我得到以下输出:

cqlsh:test> select * from bundle_components ;

 bundle_id                            | component_id                         | component_type
--------------------------------------+--------------------------------------+----------------
 8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf | 6558981e-1d89-43c3-a1fc-b2cf45119bcc |         script
 8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf | 7fcf4402-c8b3-41ed-a524-b1b546511635 |         script

根据您希望查询数据的方式,您可以更改 component_id 和 component_type 的顺序,但我猜您想查询数据通过 bundle_id, component_type 而不是 bundle_id, component_id