【问题标题】:Querying a Cassandra column family for rows that have not been updated in X days在 Cassandra 列族中查询 X 天内未更新的行
【发布时间】:2011-02-02 22:10:31
【问题描述】:

我正在将现有的基于 MySQL 的应用程序转移到 Cassandra。到目前为止,找到等效的 Cassandra 数据模型非常容易,但我偶然发现了以下问题,希望能提供一些意见:

考虑一个包含数百万个实体的 MySQL 表:

CREATE TABLE entities (
  id INT AUTO_INCREMENT NOT NULL,
  entity_information VARCHAR(...),
  entity_last_updated DATETIME,
  PRIMARY KEY (id),
  KEY (entity_last_updated)
);

每五分钟查询一次表中需要更新的实体:

 SELECT id FROM entities 
  WHERE entity_last_updated IS NULL 
     OR entity_last_updated < DATE_ADD(NOW(), INTERVAL -7*24 HOUR)
  ORDER BY entity_last_updated ASC;

然后使用以下查询更新此查询返回的实体:

 UPDATE entities 
    SET entity_information = ?, 
        entity_last_updated = NOW()
  WHERE id = ?;

对应的 Cassandra 数据模型将允许我存储给定信息并有效地查询实体表以查找需要更新的实体(即:过去 7 天内未更新的实体)?

【问题讨论】:

    标签: database-design data-modeling nosql cassandra


    【解决方案1】:

    要实现您所描述的,您需要将列名作为时间戳,并使用开始时间和结束时间获取切片函数,它将为您提供列名在该范围内的所有行。还可以使用列名排序,这样您就可以得到按时间排序的结果。

    【讨论】:

      【解决方案2】:

      您必须扫描所有行并从您感兴趣的列中获取时间戳。如果这是您每天运行的东西,那么在 Hadoop 作业中执行此操作应该没问题。如果它是你每隔几分钟运行一次的东西,那么你需要想出另一种方法。

      【讨论】:

      • 嗨!该查询每五分钟发出一次。我现在已经用该信息更新了我的问题。
      猜你喜欢
      • 2013-06-10
      • 1970-01-01
      • 2010-12-29
      • 2012-03-21
      • 2012-03-24
      • 2014-07-09
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多