带有一个主键,一个聚类列和一个常规列的Cassandra表不会附加数据。它会覆盖它

时间:2015-03-09 21:42:58

标签: cassandra data-modeling nosql

我想我必须遗漏一些基本的东西。

我的表定义是:

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_idbundle_id组合的 component_type。我的印象是该表会有很宽的行,所以如果它们具有相同的component_idsbundle_id组合,我会有多个component_type

这就是行动中的问题。 INSERT的两个component_id语句具有不同的值,导致单个条目(前一个条目被覆盖):

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

有人可以告诉我我在这里做错了吗?

1 个答案:

答案 0 :(得分:2)

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

您可能想要做的是将component_id添加到主键((bundle_id, component_type, component_id)),这将允许您拥有具有相同bundle_id和component_type的多个组件。有了这个改变,我得到以下输出:

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来查询数据{{1}}