gpt4 book ai didi

Cassandra 数据建模 : Timestamp as partition keys

转载 作者:行者123 更新时间:2023-12-01 01:42:28 24 4
gpt4 key购买 nike

我需要能够返回在指定时间间隔内执行操作的所有用户。 Cassandra 中的表定义如下:

create table t ( timestamp from, timestamp to, user text, PRIMARY KEY((from,to), user))

我正在尝试在 Cassandra 中实现以下查询:
select * from t WHERE from > :startInterval and to < :toInterval

然而,这个查询显然不起作用,因为它代表了对分区键的范围查询,迫使 Cassandra 搜索集群中的所有节点,违背了其作为高效数据库的目的。

在 Cassandra 中建模这个查询是否有效?

我的解决方案是将两个时间戳拆分为相应的年份和月份,并将它们用作分区键。该表将如下所示:
 create table t_updated ( yearFrom int, monthFrom int,yearTo int,monthTo int, timestamp from, timestamp to, user text, PRIMARY KEY((yearFrom,monthFrom,yearTo,monthTo), user) )

如果我想要在 2017 年 1 月和 2017 年 7 月之间执行操作的用户,查询将如下所示:
select user from t_updated where yearFrom IN (2017) and monthFrom IN (1,2,3,4,5,6,7) and yearTo IN (2017) and  monthTo IN (1,2,3,4,5,6,7)

在 Cassandra 中是否有更好的方法来模拟这个查询?你会如何处理这个问题?

最佳答案

首先,分区键​​必须对等于运算符进行操作。最好在这里使用 PRIMARY KEY (BUCKET, TIME_STAMP) ,其中存储桶可以是年、月(或包括天、小时等,具体取决于您的数据集有多大)的组合。

最好在客户端执行多个查询并合并结果。

关于Cassandra 数据建模 : Timestamp as partition keys,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55046104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com