Запрос семейства столбцов Cassandra для строк, которые не были обновлены за X дней - PullRequest
2 голосов
/ 31 марта 2010

Я перенесу существующее приложение на базе 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 ]

2 голосов
/ 17 апреля 2010

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

1 голос
/ 31 марта 2010

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

...