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

Cassandra data model for querying column with non-unique values

我正在尝试提出适合我的情况的数据模型。我有以下列:运行id、stat1、stat2、stat3。

我将根据 运行id 进行查询(例如 select * 来自 table,其中 运行id=123)但是 运行id 会有重复的值,所以我不能把它作为主键。 此外,在查询时我对 stat1-3 一无所知,因此我也无法将这些列作为主键的一部分。

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

这似乎是一个很常见的场景,但我是 Cassandra 的新手。我知道 运行id 需要成为主键的一部分,因为我必须 运行 基于它进行查询,但它有重复的值。

有什么建议吗?

您认为这是一个足够常见的场景是正确的,幸运的是您不必知道完整的主键就可以进行查询!只是分区键(主键的第一部分在您的 select 条件中是必需的。

例如,如果您这样创建 table:

CREATE TABLE test.runs (
    stat1 text,
    stat2 text,
    stat3 text,
    runid int,
    PRIMARY KEY (runid, stat1)
 );

您应该能够通过指定分区键 (runid) 来检索数据:

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

也就是说,为您的主键提供一个更好的辅助值可能会更好,以允许多个 'stat1' 列在一个 runid 中具有相同的值,也许可以创建一个随机 uuid一些独特的价值?