用于查询具有非唯一值的列的 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一些独特的价值?
我正在尝试提出适合我的情况的数据模型。我有以下列:运行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一些独特的价值?