0

фонОбработка реляционной модели в Кассандре

Мы выбрали Cassandra как наш двигатель хранения, так как у нас есть приложение, которое должно обрабатывать асинхронной передачи сообщений между многими пользователями на сайте и события, хранящих (некоторые виды аналитики, то, что происходит на месте и когда и т. д.). Также у нас есть платформа для голосования, поэтому мы сохраняем голоса на каждого пользователя в день, и Cassandra хороши в этих случаях использования.

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

Проблемных

У нас есть отношения, которые могут быть отредактированы на обоих концах (т.е. кандидат поддерживается компаниями, но в нашей административной панели, которую можно редактировать без кандидата). Кандидат - это одна строка в нашей Cassandra DB, идентифицированная UUID. На лицевой стороне нам нужна полная информация о кандидатах (политическая партия, школы, рабочие места, история голосования, вспомогательные компании). Мы хотим разместить большинство информации о кандидатах в одной строке, чтобы мы могли читать данные с одного чтения. Однако, когда мы размещаем список поддерживающих компаний UDT, у нас есть проблемы с его редактированием (мы должны изменить его в таблицах company_by_id и candidate_by_id).

Вопрос

Как решить проблему редактирования и вопросы реляционной модели в нашей ситуации?

Мы придумали несколько решений:

  1. Гусеницы отношений в Кассандре с дополнительными индексных как таблицы: candidates_by_supporting_company. При обновлении компании мы обновляем кандидатов, которые также имеют эту компанию.
  2. Похож на 1, но с использованием вторичный индекс, если отношение низкое беззаконие и обновление на основе вторичного индекса (у нас есть 10 политических партий, поэтому мы можем поместить индекс в политическую партию в таблицу кандидатов, а при изменении политической партии мы сможем изменить кандидатов политической партией, так как у нас есть индекс)
  3. Используйте реляционную базу данных для реляционного типа данных и оставляйте Cassandra обрабатывать только подходящие варианты использования, такие как временные ряды данных, обмен сообщениями, сортировка событий (это добавляет стоимость обслуживания еще одной базы данных, затраты на развертывание и проблемы, так как наша система распределена как для репликации данных)
  4. Используйте Spark для объединения (это не единственная цель - добавить Spark в систему, мы думаем о добавлении его для импорта больших массивов данных в CSV и делать преобразование поэтому с искрой будет добавлен бонусом, и мы можем использовать SparkSQL место, где нам нужно присоединяется)

Мы склоняемся к варианту 3, так как мы добавит Spark в любом случае, мы останемся только с базой данных Cassandra (что не осложняет обслуживание и развертывание еще одной базы данных), и мы получим от JOINS и GROUP BY эффективные на уровне приложений.

Как вы думаете?

ответ

1

Если вы хотите использовать только cassandra, то правильный путь для продолжения - это номер 1: денормализация. Но если у вас много отношений, это приложит немало усилий на уровне приложений. Если добавление другого dbms не является проблемой в вашей среде, использование подходящего инструмента для правильной работы - лучший выбор: номер 3 для меня

+0

У вас есть, может быть, какое-либо мнение о Spark? Нам нужно добавить его из-за импорта огромных исторических файлов из внешнего CSV, чтобы мы могли уже иметь его в проекте, чтобы помочь нам в JOINS и сортировке. –

+0

Конечно, если вам нужно присоединиться к пакетной среде, идите с искру, не задумываясь. Если вам нужно присоединиться к искре в интерактивном env, что-то вроде соединения jdbc из инструмента деловой интелекции, вы можете использовать бережливый сервер искры: вы можете использовать кеш, и вы добьетесь хорошей производительности, но операции сосут немного, потому что бережливый сервер по-моему, не готово к производству –

+0

Другим жизнеспособным вариантом является периодическая денормализация в искровом режиме и сохранение своего рода материализованного представления в паркетном файле над CFS. Это позволит выполнять взаимодействие SQL с божественной производительностью без кеша. Все n памяти –

Смежные вопросы