2

我正在将现有的基于 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 天内未更新的实体)?

4

2 回答 2

2

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

于 2010-04-17T04:21:32.167 回答
1

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

于 2010-03-31T15:01:56.087 回答