intermediate

Collections

Разделяйте collections по ownership, query needs, validation rules, lifecycle и sharding expectations.

Коллекции — это пространства имён для документов с общими ожиданиями по запросам, валидации и жизненному циклу, а не просто «таблицы с другим названием». Делите или объединяйте коллекции по ownership, access pattern, retention и совместимости shard key.

					// Разные коллекции, когда расходятся lifecycle и индексы
db.orders.insertOne({ ... })       // горячие транзакционные данные
db.order_events.insertOne({ ... }) // append-only audit trail
				

| Делить коллекции, когда | Держать вместе, когда | |-------------------------|----------------------| | Разный TTL или архивная политика | Всегда читаются как единое целое | | Разные shard keys или cardinality | Одни индексы обслуживают все запросы | | Независимые write rates | Общая валидация и ownership | | Границы безопасности / tenancy | Рост документа ограничен |

На уровне коллекции важны `validator`, `collation`, capped collections для логов фиксированного размера и time series collections для метрик.

На интервью: обоснуйте границы коллекций query shapes и операционными политиками, а не «красотой папок».

Типовые ошибки: одна огромная коллекция с несвязанными формами документов; разделение, после которого всегда нужны join в приложении; игнорирование shard key при проектировании; смешение PII и публичных данных.

Компромисс — изоляция эксплуатации vs стоимость join: больше коллекций упрощает масштабирование и политики, но переносит связи в приложение или aggregation pipeline.

Чеклист:

  • Сопоставьте коллекцию с owner и access pattern.
  • Опишите validation, TTL и архивную политику.
  • Объясните последствия shard key заранее.
  • Назовите, когда допустима цена `$lookup`.