← К оглавлению занятия

💻 Примеры

📁 Блок: MongoDB / повторение репликации и CAP ⏱️ Время изучения: ~60 мин 🎯 Сложность: Повторение

⚡ Кратко: суть занятия

Summary session 18 повторяет репликацию, цели репликации, синхронный и асинхронный подходы, CAP и ACID.

Репликация нужна для надёжности, отказоустойчивости и распределения нагрузки чтения.

Синхронная репликация держит копии актуальными, но добавляет задержку.

Асинхронная репликация быстрее для записи, но допускает отставание копии.

CAP описывает ограничение распределённых систем: Consistency, Availability, Partition Tolerance.

ACID описывает свойства транзакций: Atomicity, Consistency, Isolation, Durability.

В домашке 18 разбираются Hawaii в sample_airbnb и фильмы imdb > 8 за 2015–2023.

Топ-3 ошибки: путать Consistency CAP и ACID, считать $out индексом, забывать $match перед $group.

Рабочие примеры

Закрепление: синхронизация данных

Ответ: репликация.

Денормализация меняет модель данных, унификация не является механизмом синхронизации, шардирование делит данные по узлам.

Закрепление: создание индекса

Ответ: createIndex().

dropIndex() удаляет индекс, explain() анализирует план выполнения, ensureIndex() исторически встречается в старых материалах, но в курсе используем createIndex().

ДЗ 18: Hawaii через market

db.listingsAndReviews.aggregate([
  { $match: { "address.market": { $in: ["Oahu", "Maui", "Kauai", "The Big Island"] } } },
  { $group: { _id: null, avgPrice: { $avg: "$price" } } }
])

Источник разрешает перечислить возможные острова через market.

ДЗ 18: фильмы imdb

db.movies.aggregate([
  { $match: { "imdb.rating": { $gt: 8 }, year: { $gte: 2015, $lte: 2023 } } },
  { $sort: { "imdb.rating": -1 } },
  { $group: { _id: null, count: { $sum: 1 }, topRating: { $first: "$imdb.rating" }, topTitle: { $first: "$title" } } }
])

Сортировка перед $group нужна, чтобы $first взял фильм с максимальным рейтингом.