Выбор записей в Кассандре на основе временного диапазона с частыми интервалами - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть таблица в Кассандре, где я храню события по мере их поступления, на разных этапах выполняется различная обработка событий.События заносятся в таблицу с указанием времени возникновения события.Мне нужно получить все события, у которых время события меньше определенного времени, и выполнить их обработку.В качестве запроса выбора диапазона и его неизменно будет использоваться разброс сбора.Может кто-нибудь предложить лучший способ сделать это.Этот процесс будет происходить каждые 5 секунд, и сбор данных разброса, происходящий в Cassandra, который часто происходит, не является хорошей идеей, поскольку накладные расходы на саму Cassandra ухудшают общую производительность моего приложения.

Таблица выглядит следующим образом: PAS_REQ_STAGE (PartitionKey = EndpointID, категория; clusterkey = Automation_flag, alertID)

  • AlertID
  • BatchPickTime: отметка времени
  • Automation_Threshold
  • ResourceID
  • ConditionID
  • категория
  • Automation_time: отметка времени
  • Automation_flag
  • FilterValue

Время события, которое я упомянул выше, - это BatchPickTime.

Планировщик активируется с регулярным интервалом и получает все записи, чье значение BatchPickTime меньше текущего времени запуска планировщика, и удаляет их изтаблица для их обработки.

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

1 Ответ

0 голосов
/ 25 сентября 2018

Привет и добро пожаловать в Stackoverflow.

Пожалуйста, опубликуйте свою схему и, возможно, пример кода со своим вопросом - вы можете отредактировать его:)

Cassandra-способ сделать это - денормализовать данные при необходимости и построить вашу схему вокругзапросы.В вашем случае я бы предложил поместить ваши события в таблицу вместе с временным интервалом:

CREATE TABLE events (event_source int, bucket timestamp, 
    event_time timestamp, event_text text PRIMARY KEY ((event_source, bucket),event_time));

Причина этого в том, что в Кассандре очень эффективно выбирать строку с помощью ее так называемого ключа разделения(в этом примере (event_source, bucket)), поскольку такой запрос затрагивает только один узел.Напоминание о первичном ключе называется кластеризация столбцов и определяет порядок данных, здесь все события за день внутри корзины сортируются по event_time.

Попробуйте смоделировать таблицу событий так, чтобы вам не нужно было делать несколько запросов.Существует хороший и бесплатный курс по моделированию данных из DataStax: https://academy.datastax.com/resources/ds220-data-modeling

Одно замечание - будьте осторожны при использовании cassandra в качестве очереди - это, возможно, антипаттерн, и вам лучше использовать очередь сообщений в качестве ActiveMQили RabbitMQ или аналогичный.

...