我正在努力想出一个适合我情况的数据模型。我有以下列:runid,stat1,stat2,stat3。
我将基于runid查询(例如select * from table in runid = 123)但是runid会有重复值,所以我不能把它作为主键。 此外,在查询时我对stat1-3一无所知,所以我也不能将这些列作为主键的一部分。
(背景:我的Cassandra实例由另一个程序填充,我的程序只会从中获取特定runid的信息并将其显示在屏幕上)
这似乎是一个很常见的场景,但我是Cassandra的新手。我知道runid需要成为主键的一部分,因为我必须基于它运行查询,但它有重复的值。
有什么建议吗?
答案 0 :(得分:2)
你认为这是一个很常见的场景是正确的,幸运的是你不必知道完整的主键来进行查询!只是分区键(选择条件中需要主键的第一部分。
例如,如果您创建这样的表:
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来创建一些唯一值?