【问题标题】:Cassandra : How to select data updated in last 30 daysCassandra:如何选择最近 30 天内更新的数据
【发布时间】:2018-12-15 08:33:30
【问题描述】:

我们需要从表中加载最近 30 天的更新数据。

以下可能的解决方案之一不允许这样做。

select * from XYZ_TABLE where WRITETIME(lastupdated_timestamp) > (TOUNIXTIMESTAMP(now())-42,300,000);

select * from XYZ_TABLE where lastupdated_timestamp > (TOUNIXTIMESTAMP(now())-42,300,000);

表格的列为

lastupdated_timestamp (with an index on this field)
lastupdated_userid (with an index on this field)

任何指针...

【问题讨论】:

  • 你的表定义是什么样的?这最终决定了数据的排序方式以及查询方式。
  • 表定义有 lastupdated_timestamp(在这个字段上有一个索引)。
  • Sam 的回答很到位。如果您希望能够查询最近 30 天的更新数据,则需要构建您的表以从一开始就支持该查询。
  • 同意,如果我正在创建一个新的表设计,Sams 解决方案很好,但在这里我将扩展这个表作为设计扩展的一部分,并根据业务维护当前的主键(分区和集群键)需要。
  • 如果可能,请考虑将搜索引擎放在前面。像太阳能或弹性搜索。这将是您获得灵活性的最佳选择(现在和将来)。另一种解决方案是运行数据管道,将“最近 30 天更新”的记录(或 ID)保存在单独的数据库中,然后使用它来获得您需要的结果。

标签: cassandra nosql cassandra-3.0


【解决方案1】:

除非您的表是在考虑此查询的情况下构建的,否则您的查询将搜索数据库的每个分区,一旦您的数据集变得很大,这将变得非常昂贵,并且可能会导致超时。

为了有效地完成这个查询,XYZ_TABLE 应该有一个类似这样的主键:

PRIMARY KEY ((update_month, update_day), lastupdated_timestamp)

这样 Cassandra 就知道去哪里查找数据了。它有可以快速找到的月份和日期存储桶,然后您可以运行这样的查询来查找某一天的更新。

SELECT * FROM XYZ_TABLE WHERE update_month = 07-18 and update_day = 06

【讨论】:

  • Sam,如果我正在创建一个新的表设计,这个解决方案很好,但在这里我扩展这个表作为设计扩展的一部分,并根据业务维护当前的主键(分区和集群键)需要。我可以使用索引查询 lastupdated_timestamp 吗?
猜你喜欢
  • 2017-07-18
  • 2014-02-08
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
  • 2017-06-13
  • 2021-07-30
相关资源
最近更新 更多