На каком уровне документная база вроде MongoDB даёт атомарность по умолчанию?
- Есть ли транзакции в MongoDB?
По умолчанию атомарна операция над одним документом, включая вложенные массивы и поля. Всё, что должно меняться вместе, стараются положить в один документ.
- Многодокументные транзакции есть с MongoDB 4.0 (реплика-сет) и 4.2 (шарды), но дороже
- Атомарные операторы: $inc, $push, findOneAndUpdate
- Модель данных подбирают так, чтобы транзакции между документами были редки
А ещё Ограничения транзакций: время жизни, размер, нагрузка на кластер
Подробно
Из этого правила напрямую вытекает подход к моделированию: связанные данные, изменяемые одной операцией, вкладывают в документ, а не разносят по коллекциям — тогда транзакции просто не нужны. Многодокументные транзакции появились в поздних версиях и работают, но стоят дороже и в распределённой конфигурации накладывают ограничения, поэтому опираться на них как на основной приём проектирования не стоит. Полезно провести параллель с DDD: документ хорошо соответствует агрегату, и правило «одна транзакция меняет один агрегат» здесь становится техническим ограничением, а не рекомендацией.
Что хотят услышать
- Атомарность на уровне документа.
- Многодокументные транзакции и их цена.
- Влияние на моделирование.
Частые ошибки
- Переносить реляционную схему в документную базу как есть и компенсировать транзакциями.
- Считать многодокументные транзакции бесплатными.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓На уровне одного документа; несколько документов — через явные транзакции
- ✗Атомарности нет ни на каком уровне
- ✗На уровне коллекции: все операции в одной коллекции атомарны без явных транзакций
- ✗На уровне всей базы данных
Что спросят дальше
- Как это соотносится с понятием агрегата в DDD?
- Когда всё же приходится разносить данные по коллекциям?
Разбор темы
- Документоориентированные БД (MongoDB)
Модель документа, embedding против referencing, индексы, aggregation pipeline, атомарность документа и шардирование.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.