Вопрос с собеседования · Базы данных

На каком уровне документная база вроде MongoDB даёт атомарность по умолчанию?

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

По умолчанию атомарна операция над одним документом, включая вложенные массивы и поля. Всё, что должно меняться вместе, стараются положить в один документ.

  • Многодокументные транзакции есть с MongoDB 4.0 (реплика-сет) и 4.2 (шарды), но дороже
  • Атомарные операторы: $inc, $push, findOneAndUpdate
  • Модель данных подбирают так, чтобы транзакции между документами были редки

А ещё Ограничения транзакций: время жизни, размер, нагрузка на кластер

Подробно

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

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

  • Атомарность на уровне документа.
  • Многодокументные транзакции и их цена.
  • Влияние на моделирование.

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

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

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

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

Показать варианты и ответ
  • ✓На уровне одного документа; несколько документов — через явные транзакции
  • ✗Атомарности нет ни на каком уровне
  • ✗На уровне коллекции: все операции в одной коллекции атомарны без явных транзакций
  • ✗На уровне всей базы данных

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

  • Как это соотносится с понятием агрегата в DDD?
  • Когда всё же приходится разносить данные по коллекциям?

Разбор темы

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

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования