具有允许过滤的物化视图 VS 查询
MATERIALIZED VIEW VS query with ALLOW FILTERING
我有以下 table users((username), last_seen)
其中 last_seen 基本上是 writetime 。 table 中的记录数约为 1000 万条。
插入非常简单 insert into users (username, last_seen) VALUES ([username], now)
但我需要按 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)
查询用户table
select username from users where last_seen < (now - 1 day) ALLOW FILTERING
哪个效率更高? AFAIK 实体化视图是 unstable 并且对性能有影响。
AFAIK materialized view is unstable
此时此刻,我也是这么想的。但这不是使用 ALLOW FILTERING 的理由。如果不是更多,它同样糟糕。
我建议创建另一个 table 或更改当前结构。
CREATE TABLE IF NOT EXISTS user_status (
day date,
id timeuuid,
user text,
PRIMARY KEY ((day), id)
);
这个table是按天划分的。您将只需要查询当天的数据并在客户端程序上准备您的数据。
select * from user_status where day = '2015-05-03'
这对服务器端和客户端来说都不重。根据预期的数据大小,可以进一步调整分区键。
希望对您有所帮助!
我发现在这种情况下使用 SASI Index 是最佳选择
我有以下 table users((username), last_seen)
其中 last_seen 基本上是 writetime 。 table 中的记录数约为 1000 万条。
插入非常简单 insert into users (username, last_seen) VALUES ([username], now)
但我需要按 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)
查询用户table
select username from users where last_seen < (now - 1 day) ALLOW FILTERING
哪个效率更高? AFAIK 实体化视图是 unstable 并且对性能有影响。
AFAIK materialized view is unstable
此时此刻,我也是这么想的。但这不是使用 ALLOW FILTERING 的理由。如果不是更多,它同样糟糕。
我建议创建另一个 table 或更改当前结构。
CREATE TABLE IF NOT EXISTS user_status (
day date,
id timeuuid,
user text,
PRIMARY KEY ((day), id)
);
这个table是按天划分的。您将只需要查询当天的数据并在客户端程序上准备您的数据。
select * from user_status where day = '2015-05-03'
这对服务器端和客户端来说都不重。根据预期的数据大小,可以进一步调整分区键。
希望对您有所帮助!
我发现在这种情况下使用 SASI Index 是最佳选择