Кассандра - выбор по состоянию и заказ по последнему обновлению - PullRequest
0 голосов
/ 07 мая 2020

Я создатель 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 * заданий в правильном порядке. При вставке и обновлении я делаю пакет, чтобы гарантировать транзакционность. Но я не думаю, что это хорошая идея, поскольку в некоторых штатах могут быть миллионы рабочих мест в этом штате.

Конечно, должны быть лучшие способы, не так ли?

...