Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果不是物化视图,也不是二级索引,那么在cassandra中查询数据的推荐方法是什么_Cassandra_Cassandra 3.0 - Fatal编程技术网

如果不是物化视图,也不是二级索引,那么在cassandra中查询数据的推荐方法是什么

如果不是物化视图,也不是二级索引,那么在cassandra中查询数据的推荐方法是什么,cassandra,cassandra-3.0,Cassandra,Cassandra 3.0,我有一些卡桑德拉的数据。说 create table MyTable { id text PRIMARY KEY, data text, updated_on timestamp } 我的应用程序除了按主键id查询此数据外,还需要按时间戳上的更新_进行查询。为了实现“按时间查询”用例,我尝试了以下方法 create table MyTable { id text PRIMARY KEY, data text, updated_on timesta

我有一些卡桑德拉的数据。说

create table MyTable {
    id text PRIMARY KEY,
    data text,
    updated_on timestamp
}
我的应用程序除了按主键id查询此数据外,还需要按时间戳上的更新_进行查询。为了实现“按时间查询”用例,我尝试了以下方法

create table MyTable {
    id text PRIMARY KEY,
    data text,
    updated_on timestamp,
    updated_on_minute timestamp
}
  • 更新的分钟字段上的二级索引。据我所知,对于高基数的情况,不建议使用二级索引(这是我的情况,因为我可以在同一分钟内拥有大量数据)。此外,我有经常更新的数据,这意味着每分钟更新的数据将继续增加

  • MaterializedView,updated_on_minute作为分区键,id作为集群键。我使用的是cassandra的3.9版,刚刚开始使用这些版本,但遗憾的是,我发现了这些3.11x()的发行说明,它们声明它们纯粹是实验性的,不适用于生产集群

  • 那么我有什么选择呢?我是否只需要维护自己的表来跟踪按时间顺序传入的数据?我希望能在这方面有所帮助


    提前感谢。

    一如既往,创建其他表以使用不同的分区键进行查询

    在你的情况下,这张桌子是

    create table MyTable_by_timestamp {
        id text,
        data text,
        updated_on timestamp,
        Primary key(updated_on, id)
    }
    
    写入两个表mytable_by_timetamp和mytable_by_id。根据分区键updated_on或id使用相应的表进行读取

    根据它试图解决的用例(查询)复制数据是绝对正确的

    编辑:

    如果您担心巨大的分区,您可以将其存储到较小的分区中。例如,上面的表格可以细分为

    create table MyTable_by_timestamp {
        id text,
        data text,
        updated_on timestamp,
        updated_min timestamp,
        Primary key(updated_min, id)
    }
    

    在这里,我选择了每分钟作为桶的大小。根据收到的更新数量,可以将其更改为秒(更新秒),以进一步减小分区大小

    如果复制数据,那么分区就会变大。因此,我可能会创建一个只包含维度而不包含日期的表。你看不出这有什么问题,是吗?如果你只存储维度,那么你不能按日期正确查询?我以为这是你最初的问题。您可以随时使用bucket大小或引入人工bucket来减少分区大小。很酷,我只需要确认在应用程序级别维护单独的表仍然是推荐的方法。看起来是的。