Cassandra 物化视图与允许筛选的查询
我有下表Cassandra 物化视图与允许筛选的查询,cassandra,cql,Cassandra,Cql,我有下表users((username),last_seen)其中last_seen基本上是写时间。表中的记录数约为1000万条。 插入非常简单插入到用户(用户名,最后一次看到)值([用户名],现在) 但是我需要按最近一次看到的列进行查询(此查询每分钟运行一次),例如: 然后简单地询问 select username from users_last_seen where last_seen < (now - 1 day) 从上次看到的用户中选择用户名(现在-1天) 查询用户表 sele
users((username),last_seen)
其中last_seen基本上是写时间。表中的记录数约为1000万条。
插入非常简单插入到用户(用户名,最后一次看到)值([用户名],现在)
但是我需要按最近一次看到的列进行查询(此查询每分钟运行一次),例如:
然后简单地询问
select username from users_last_seen where last_seen < (now - 1 day)
从上次看到的用户中选择用户名(现在-1天)
查询用户表
select username from users where last_seen < (now - 1 day) ALLOW FILTERING
从上次看到的用户中选择用户名(现在-1天)允许筛选
哪一个更有效?AFAIK物化视图不稳定,会影响性能
AFAIK物化视图不稳定
在这个时候,我也这么认为。但这不是使用允许过滤的理由。如果不是更多,也同样糟糕
我建议创建另一个表或更改当前结构
CREATE TABLE IF NOT EXISTS user_status (
day date,
id timeuuid,
user text,
PRIMARY KEY ((day), id)
);
这张桌子是按天分的。您只需查询当天的数据,并在客户端程序上准备您的数据
从用户状态中选择*,其中日期='2015-05-03'
这对服务器端和客户端来说都不是很重要。根据预期的数据大小,可以进一步调整分区键
希望这有帮助 我发现在这种情况下使用是最好的选择非常感谢。但是,这并不能真正解决这个问题,因为天
是一个参数,它也可以是小时或任何其他时间段。因此,使用建议的表不是一个合适的解决方案。您可以根据参数进行多次查询。如果是3天,则进行3次查询以获得结果。通过这种方式,您可以识别Cassandra的分区,并避免在完整搜索中出现不可预测的性能问题。我的意思是,我需要这样查询:从上次看到的用户中选择用户名(现在-1小时)
,但也从上次看到的用户中选择用户名(现在-1天)
因此不可能预先定义天/小时。我可以按分钟划分,但它会创建许多分区,不是吗?
select username from users where last_seen < (now - 1 day) ALLOW FILTERING
CREATE TABLE IF NOT EXISTS user_status (
day date,
id timeuuid,
user text,
PRIMARY KEY ((day), id)
);