用于查询非唯一值列的Cassandra数据模型

用于查询非唯一值列的Cassandra数据模型,cassandra,datamodel,Cassandra,Datamodel,我正试图提出一个适合我的情况的数据模型。我有以下列:runid、stat1、stat2、stat3 我将基于runid进行查询(例如,从runid=123的表中选择*),但runid将有重复的值,所以我不能将其作为主键。 另外,在查询时,我对stat1-3一无所知,因此我也不能将这些列作为主键的一部分 (背景:我的Cassandra实例由另一个程序填充,我的程序只需从中提取特定于特定runid的信息,并将其显示在屏幕上) 这似乎是一个很常见的场景,但我对卡桑德拉还不熟悉。我知道runid需要是主

我正试图提出一个适合我的情况的数据模型。我有以下列:runid、stat1、stat2、stat3

我将基于runid进行查询(例如,从runid=123的表中选择*),但runid将有重复的值,所以我不能将其作为主键。 另外,在查询时,我对stat1-3一无所知,因此我也不能将这些列作为主键的一部分

(背景:我的Cassandra实例由另一个程序填充,我的程序只需从中提取特定于特定runid的信息,并将其显示在屏幕上)

这似乎是一个很常见的场景,但我对卡桑德拉还不熟悉。我知道runid需要是主键的一部分,因为我必须基于它运行查询,但它有重复的值


有什么建议吗?

您认为这是一个足够常见的场景,幸运的是您不必知道完整的主键即可进行查询!仅分区键(选择条件中需要主键的第一部分)

例如,如果您像这样创建表:

CREATE TABLE test.runs (
    stat1 text,
    stat2 text,
    stat3 text,
    runid int,
    PRIMARY KEY (runid, stat1)
 );
您只需指定分区键(runid)即可检索数据:

也就是说,为主键提供一个更好的辅助值可能会更好,以允许多个“stat1”列在一个runid中具有相同的值,或者一个随机uuid来创建一些唯一的值

cassandra@cqlsh:test> insert into runs (runid, stat1, stat2, stat3) values (0, '1', 'hi', 'hi'); 
cassandra@cqlsh:test> insert into runs (runid, stat1, stat2, stat3) values (0, '2', 'lo', 'lo');
cassandra@cqlsh:test> insert into runs (runid, stat1, stat2, stat3) values (0, '3', 'yo', 'yo');
cassandra@cqlsh:test> insert into runs (runid, stat1, stat2, stat3) values (1, '1', '22', '33');
cassandra@cqlsh:test> select * from runs where runid = 0;

 runid | stat1 | stat2 | stat3
-------+-------+-------+-------
     0 |     1 |    hi |    hi
     0 |     2 |    lo |    lo
     0 |     3 |    yo |    yo