2010-03-31 3 views
2

Я перемещаю существующее приложение на основе MySQL в Cassandra. До сих пор найти эквивалентную модель данных Cassandra было довольно легко, но я наткнулся на следующую проблему, для которой я оценил бы некоторый входной сигнал:Запрос семейства столбцов Cassandra для строк, которые не были обновлены за X дней

Рассмотрим 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

Для достижения того, что вы описали, вам нужно указать имя столбца в качестве метки времени и использовать функцию среза с использованием времени начала и окончания, это даст вам все строки с именем столбца в этом диапазоне. также используйте сортировку столбцов, чтобы получить результат в упорядоченном по времени.

1

Вам нужно будет отсканировать все строки и захватить метку времени из интересующих вас столбцов. Если это то, что вы запускаете каждый день или около того, делать это в задании Hadoop должно быть хорошо. Если это то, что вы запускаете каждые несколько минут, тогда вам нужно придумать другой подход.

+0

Hi! Запрос выдается раз в пять минут. Теперь я обновил свой вопрос с этой информацией. – knorv