Базы данных/Лабораторная работа 5
Задачи лабораторной работы:
- Установить MongoDB
- Рассмотреть различия в моделировании данных для реляционных БД и документоориентированных.
- Попрактиковаться в составлении запросов к MongoDB: добавление, обновление, селекция, фильтрация, агрегация.
- Настроить репликацию данных, инициировать отключение мастер-узла в процессе интенсивного обновления данных, проанализировать действия сервера и проверить целостность измененных данных.
Содержание
Установка MongoDB
Для лабораторных работ достаточно версии 2.4+
- Ubuntu: sudo apt-get install mongodb
- Mac OS: brew install mongodb Подробнее
- Windows: Скачать установщик: https://www.mongodb.com/download-center#community
Импорт данных
Коллекции, содержащие фильмы и длинные текстовые факты о фильмах:
Для импорта коллекций в базу movies выполните:
bzip2 -dc movies.bson.bz2 | mongoimport -d movies -c Movie bzip2 -dc moviesdocs.bson.bz2 | mongoimport -d movies -c MovieDoc
Импортированная коллекция займет примерно 6Гб на диске.
Чтобы проверить корректность импорта, зайдите в консоль MongoDB:
mongo
Показать базы данных:
show dbs;
Переключиться на базу данных (если ее нет, то создастся):
use movies
Показать коллекции текущей базы данных:
show collections;
Моделирование данных в MongoDB
Для импорта IMDb в MongoDB уже есть готовый скрипт, поэтому вам достаточно импортировать дамп базы (ссылки будут позже).
Схема модели данных в MongoDB:
Индексы
В предлагаемом дампе нет индексов (только первичный ключ _id), в ходе выполнения заданий они могут понадобиться.
Просмотр существующих индексов в коллекции:
db.collection_name.getIndexes()
Функция просмотра всех индексов для всех коллекций:
db.getCollectionNames().forEach(function(collection) { indexes = db[collection].getIndexes(); print("Indexes for " + collection + ":"); printjson(indexes); });
Создание индексов:
db.collection_name.createIndex( { field_name: 1 } ) db.collection_name.createIndex( { field_name: "hashed" } ) // хэш-индексы
Дополнительно
- Подробное описание скрипта и модели данных: https://www.packtpub.com/books/content/mongo-goes-to-the-movies
Язык запросов MongoDB
Базовые операции
Дополнительно
Aggregation Framework
Дополнительно
Репликации MongoDB
Принцип работы репликаций в MongoDB
Конфигурация набора реплик
Сценарий отказа мастер-узла
Стартовый скрипт инициализации сбоя во время работы
Дополнительно
Задания на защиту
1. Составить запросы с агрегацией:
- Для каждого года из первой декады XXI века посчитать количество снятых фильмов.
- Выбрать топ-10 наиболее популярных ключевых слов для фильмов заданной страны.
2. Составить свою формулу рейтинга (общего для всех фильмов или по какому-либо фильтру), используя параметры словарей Movie.Rating (Rating - среднее значение оценкой, RatingVotes - количество оценок) или любые другие.
Для примера вот формула Top 250 IMDb Movies
ранг фильма = (v/(v+k))*X + (k/(v+k))*C где: X = рейтинг фильма v = количество голосов k = минимальное количество голосов, чтобы попасть в список (для данного списка 25000) C = средний рейтинг для всех фильмов в этом списке (для данного списка 6.90)
MongoDB поддерживает многие арифметические операции: https://docs.mongodb.com/manual/reference/operator/aggregation-arithmetic/
Данное задание можно выполнить не одним запросом через агрегацию, а используя функцию на JavaScript, которая выполняется в консоле MongoDB.
3. Написать скрипт на bash или любом другом скриптовом языке, который запускает сервер MongoDB в режиме реплики, начинает интенсивно изменять данные, определяет мастер-узел, убивает процесс мастер-узла, после этого заканчивает изменения данных и проверяет целостность данных.
Защита лабораторной работы
- Показать и выполнить запросы с агрегацией, объяснить структуру запросов
- Продемонстрировать работу скрипта инициализации сбоя во время работы и объяснить, что происходит с репликами MongoDB