我正在将现有的基于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数据模型是什么,它允许我存储给定的信息并有效地查询实体表中需要更新的实体(即:过去七天内未更新的实体)?
答案 0 :(得分:2)
要实现您所描述的内容,您需要将列名作为时间戳,并使用开始时间和结束时间使用获取切片功能,它将为您提供具有该范围内列名称的所有行。也可以使用列名排序,以便按时间顺序获得结果。
答案 1 :(得分:1)
您必须扫描所有行并从您感兴趣的列中获取时间戳。如果这是您每天都在运行的事情,那么在Hadoop作业中执行此操作应该没问题。如果这是你每隔几分钟运行的东西,那么你需要提出另一种方法。