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)
    );