代码之家  ›  专栏  ›  技术社区  ›  igx

物化视图与允许过滤的查询

  •  0
  • igx  · 技术社区  · 7 年前

    我有下表 users((username), last_seen) 最后一次看到的时间基本上是writetime。表中的记录数约为1000万条。 插入非常简单 insert into users (username, last_seen) VALUES ([username], now)

    last_seen 列(此查询每分钟运行一次),例如:

    select username from users where last_seen < (now - 1 day) 
    

    1. 使用物化视图:

      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)
      
    2. select username from users where last_seen < (now - 1 day) ALLOW FILTERING
      

    哪一个更有效?AFAIK物化视图不稳定,会影响性能。

    2 回复  |  直到 7 年前
        1
  •  1
  •   chaitan64arun    7 年前

    AFAIK物化视图不稳定

    在这个时候,我也这么认为。但这不是使用允许过滤的原因。如果不是更多,也同样糟糕。

    我建议创建另一个表或更改当前结构。

    CREATE TABLE IF NOT EXISTS user_status (
        day date,
        id timeuuid,
        user text,
        PRIMARY KEY ((day), id)
    );
    

    select * from user_status where day = '2015-05-03'

    这对服务器端和客户端来说都不重要。根据数据的预期大小,可以进一步调整分区键。

    希望这有帮助!

        2
  •  0
  •   igx    7 年前

    我发现使用 SASI Index 是这种情况下的最佳选择