Базы данных/Лабораторная работа 5 — различия между версиями

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
(Задания на защиту)
Строка 6: Строка 6:
  
 
== Установка MongoDB ==
 
== Установка MongoDB ==
 +
 +
Для лабораторных работ достаточно версии 2.4+
 +
 +
* Ubuntu: sudo apt-get install mongodb
 +
* Mac OS: brew install mongodb [http://www.mongodbspain.com/en/2014/11/06/install-mongodb-on-mac-os-x-yosemite/ Подробнее]
 +
* Windows: Скачать установщик: https://www.mongodb.com/download-center#community
 +
 +
== Импорт данных ==
 +
Коллекции, содержащие фильмы и длинные текстовые факты о фильмах:
 +
* https://disk.yandex.ru/client/disk/imdb/mongo-dump
 +
 +
Для импорта коллекций в базу 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 ==
 
== Моделирование данных в MongoDB ==
Строка 16: Строка 49:
 
=== Индексы ===
 
=== Индексы ===
  
В предлагаемом дампе уже есть некоторые важные индексы, но в ходе выполнения заданий могут понадобиться еще.
+
В предлагаемом дампе нет индексов (только первичный ключ _id), в ходе выполнения заданий они могут понадобиться.
  
 
Просмотр существующих индексов в коллекции:
 
Просмотр существующих индексов в коллекции:

Версия 02:13, 4 июня 2016

Задачи лабораторной работы:

  • Установить MongoDB
  • Рассмотреть различия в моделировании данных для реляционных БД и документоориентированных.
  • Попрактиковаться в составлении запросов к MongoDB: добавление, обновление, селекция, фильтрация, агрегация.
  • Настроить репликацию данных, инициировать отключение мастер-узла в процессе интенсивного обновления данных, проанализировать действия сервера и проверить целостность измененных данных.

Установка MongoDB

Для лабораторных работ достаточно версии 2.4+

Импорт данных

Коллекции, содержащие фильмы и длинные текстовые факты о фильмах:

Для импорта коллекций в базу 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:

1-flatmodel.gif

Индексы

В предлагаемом дампе нет индексов (только первичный ключ _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" } )  // хэш-индексы


Дополнительно

Язык запросов 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