我想创建一个包含以下列的表: id1, id2, type, time, data, version
.
常见的查询是:
select * from table_name where id1 = ... and id2 =... and type = ... select * from table_name where id1= ... and type = ... and time > ... and time < ...
我不知道如何设置快速查询的主键?
我想创建一个包含以下列的表: id1, id2, type, time, data, version
.
常见的查询是:
select * from table_name where id1 = ... and id2 =... and type = ... select * from table_name where id1= ... and type = ... and time > ... and time < ...
我不知道如何设置快速查询的主键?
1条答案
按热度按时间ohtdti5x1#
由于您有两个不同的查询,您可能需要有两个不同的表才能使它们运行良好。这对于cassandra数据模型来说并不罕见。请记住,对于这两种情况,cassandra中的主键定义在很大程度上取决于基数和预期的查询模式。由于您只提供了后者,因此可能需要根据
id1
,id2
,和type
.select * from table_name where id1 = X and id2 = Y and type = Z;
所以我要做一个有根据的猜测id1
以及id2
几乎是唯一的(高基数),就像ID通常一样。我不知道您的应用程序中有多少种可用类型,但只要不超过10000种,就可以:这会将分区的密钥设置为
id1
以及id2
,按type
(默认升序)。select * from table_name where id1= X and type = Z and time > A and time < B;
同样,支持此查询的表如下所示:同样,只要您的类型/时间组合不超过几千个,就应该可以这样做。
不过,我要做的最后一个调整是,判断在应用程序的整个生命周期中,您希望有多少类型/时间组合。如果这些数据会随着时间的推移而增长,那么上述情况将导致分区增长到无法维护的程度。为了避免这种情况发生,我还建议添加一个时间“桶”
同样,也需要调整查询:
希望这有帮助。
如何保证这两个插入的原子性?
简单地说,你可以运行这两个
INSERT
在一个原子批次里。有关更多信息,请查看原子批处理上的datastax文档:https://docs.datastax.com/en/dse/6.7/cql/cql/cql_using/usebatchgoodexample.html