Получить доступ

Почему в Cassandra нормально хранить одни и те же данные в нескольких таблицах?

MiddleКолоночные БД
Ещё спрашивают так:
  • Почему в Cassandra одна таблица на запрос?
Коротко

Моделирование идёт от запросов: эффективен только доступ по ключу партиции, JOIN нет. Поэтому под каждый сценарий — своя таблица с подходящим ключом, и дублирование — норма.

  • «Сообщения чата» и «сообщения пользователя» — две таблицы с разными ключами
  • Запись в несколько таблиц — batch (logged) для согласованности
  • Вторичные индексы и материализованные представления в Cassandra ограниченно полезны

А ещё Место дешевле, чем запросы по всему кластеру

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Первичный ключ здесь состоит из ключа партиции, определяющего узел, и колонок кластеризации, задающих порядок внутри партиции. Запрос по произвольному полю потребовал бы обхода всех узлов, поэтому такой возможности фактически нет. Отсюда переворот привычной логики: сначала перечисляют запросы, потом проектируют таблицы под них. Дисковое пространство дёшево, а невозможность ответить на запрос — нет. Обратная сторона, о которой нужно сказать честно: согласованность копий обеспечивает приложение — при обновлении надо записать во все таблицы, и промежуточные расхождения возможны. Именно поэтому такой подход хорош для добавляемых данных и хуже для часто изменяемых.

Что хотят услышать

  • Почему одна таблица на запрос.
  • Как синхронизировать дубли.
  • Ограничения вторичных индексов.

Частые ошибки

  • Пытаться нормализовать схему и делать соединения на стороне приложения.
  • Забывать, что синхронизацию дублей обеспечивает не база, а вы.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Запросы эффективны только по первичному ключу, поэтому под каждый сценарий делают свою таблицу — дублирование дешевле, чем невозможность запроса
  • ✗Так обеспечивается отказоустойчивость вместо репликации
  • ✗Cassandra автоматически синхронизирует такие таблицы между собой
  • ✗Это временный обходной приём, устаревший в новых версиях

Что спросят дальше

  • Из чего состоит первичный ключ и как он влияет на распределение?
  • Почему вторичные индексы здесь используют с осторожностью?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем