Базы данных/Лабораторная работа 5 — различия между версиями
Ivsavin (обсуждение | вклад) (→Язык запросов MongoDB) |
Ivsavin (обсуждение | вклад) (→Задания на защиту) |
||
| Строка 65: | Строка 65: | ||
== Задания на защиту == | == Задания на защиту == | ||
| − | + | 1. Составить запросы с агрегацией: | |
| − | + | * Для каждого года из первой декады XXI века посчитать количество снятых фильмов. | |
| − | + | * Выбрать топ-10 наиболее популярных ключевых слов для фильмов заданной страны. | |
| − | * Написать скрипт на bash или любом другом скриптовом языке, который запускает сервер MongoDB в режиме реплики, начинает интенсивно изменять данные, определяет мастер-узел, убивает процесс мастер-узла, после этого заканчивает изменения данных и проверяет целостность данных. | + | |
| + | 2. Составить свою формулу рейтинга (общего для всех фильмов или по какому-либо фильтру), используя параметры словарей Movie.Rating (Rating - среднее значение оценкой, RatingVotes - количество оценок) или любые другие. | ||
| + | |||
| + | Для примера вот формула [http://www.imdb.com/chart/top 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 | * Продемонстрировать работу скрипта инициализации сбоя во время работы и объяснить, что происходит с репликами MongoDB | ||
Версия 13:22, 3 июня 2016
Задачи лабораторной работы:
- Установить MongoDB
- Рассмотреть различия в моделировании данных для реляционных БД и документоориентированных.
- Попрактиковаться в составлении запросов к MongoDB: добавление, обновление, селекция, фильтрация, агрегация.
- Настроить репликацию данных, инициировать отключение мастер-узла в процессе интенсивного обновления данных, проанализировать действия сервера и проверить целостность измененных данных.
Содержание
Установка MongoDB
Моделирование данных в MongoDB
Для импорта IMDb в MongoDB уже есть готовый скрипт, поэтому вам достаточно импортировать дамп базы (ссылки будут позже).
Схема модели данных в MongoDB:
Индексы
В предлагаемом дампе уже есть некоторые важные индексы, но в ходе выполнения заданий могут понадобиться еще.
Просмотр существующих индексов в коллекции:
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