Я создатель JobRunr (см. GitHub для исходного кода), фреймворка обработки фоновых заданий для Java, и меня попросили добавить поддержку Cassandra.
Состояние задания сильно меняется (поставлено в очередь, обрабатывается, выполнено, не удалось, ...) в течение его жизненного цикла, и задания имеют идентификатор, который является UUID.
Мои требования:
- , чтобы запросить состояние задания и заказать его по времени последнего обновления задания (как c и des c)
- , чтобы запросить задание по id
- удалить задания по id
Я не могу понять, как решить эту проблему в Cassandra (я, вероятно, думаю о реляционных), без разрешения фильтрации. Вещи, которые я пробовал:
- создать таблицу с ключом раздела для
id
и индексом state
=> это работает, за исключением сортировки updatedAt
- создать таблицу с ключом раздела для
id
и индексом для state
и упорядочить по пункту => невозможно. Сообщение об ошибке ORDER BY with 2ndary indexes is not supported.
- денормализовать и добавить таблицу
jobs_by_state
с ключом раздела на creationDate
(yyyyMMdd - поскольку данные привязаны по времени и имеют более высокое число элементов), state
и ключ кластеризации updatedAt
=> это работает, но как удалить работу? Сообщение об ошибке Non PRIMARY KEY columns found in where clause: id
- материализованное представление? Я колеблюсь, так как он все еще содержит ошибки (если я создам его, он меняет ключ кластеризации без каких-либо сбоев).
1042 * заданий в правильном порядке. При вставке и обновлении я делаю пакет, чтобы гарантировать транзакционность. Но я не думаю, что это хорошая идея, поскольку в некоторых штатах могут быть миллионы рабочих мест в этом штате.
Конечно, должны быть лучшие способы, не так ли?