查询Cassandra列族以查找在X天内未更新的行

时间:2010-03-31 12:53:05

标签: database-design data-modeling nosql cassandra

我正在将现有的基于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数据模型是什么,它允许我存储给定的信息并有效地查询实体表中需要更新的实体(即:过去七天内未更新的实体)?

2 个答案:

答案 0 :(得分:2)

要实现您所描述的内容,您需要将列名作为时间戳,并使用开始时间和结束时间使用获取切片功能,它将为您提供具有该范围内列名称的所有行。也可以使用列名排序,以便按时间顺序获得结果。

答案 1 :(得分:1)

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