我有以下表users((username), last_seen)
其中last_seen基本上是写时间。表中的记录数量约为1000万。 插入是非常简单的insert into users (username, last_seen) VALUES ([username], now)
MATERIALIZED VIEW VS查询与允许过滤
但我需要通过last_seen
栏查询(此查询运行,每分钟),例如:
select username from users where last_seen < (now - 1 day)
我有两个选择,因为我看到它:
使用物化视图:
CREATE MATERIALIZED VIEW users_last_seen AS SELECT last_seen, username FROM users WHERE last_seen IS NOT NULL PRIMARY KEY (last_seen, username);
,只是查询
select username from users_last_seen where last_seen < (now - 1 day)
查询用户表
select username from users where last_seen < (now - 1 day) ALLOW FILTERING
哪一个更有效? AFAIK实体化视图不稳定并会影响性能。
非常感谢。然而,这并不能真正解决这个问题,因为'day'是一个参数,它也可以是小时或任何其他时期。因此使用建议的表格不是一个适当的解决方案。 – igx
您总是可以根据参数进行多个查询。 例如:如果是3天,请进行3次查询以获得结果。 通过这种方式,您可以识别Cassandra的分区,并避免完全搜索出现不可预知的性能问题。 – chaitan64arun
我的意思是,我需要的是这样来查询: '选择用户名其中,last_seen <(现在 - 1小时)' 也 '选择用户名从用户那里last_seen <(现在 - 1天)' 所以预定'日/小时'是不可能的。我可以按分钟划分,但它会创建到很多分区不是吗? – igx