Учебное пособие Разработка баз данных в MongoDB

На этой неделе в издательстве Красноярского государственного педагогического университета им В.П. Астафьева вышло мое учебное пособие «Разработка баз данных в MongoDB».

TitleMongoDB

Учебное пособие обладает яркой практической и проблемно-ориентированной направленностью. В учебном пособии читатели познакомятся с принципиально новой документо-ориентированной системой управления базами данных MongoDB. Научатся создавать базы данных, планировать запросы поиска и редактирования данных, индексации, с доступом к MongoDB в проектах на языках Python, Java и PHP. Изучат работу с хранилищем больших данных GridFS, выполнение геоинформационных запросов. Учебное пособие предназначено для студентов, аспирантов и преподавателей, занимающихся изучением и преподаванием дисциплин, связанных с базами данных и современными информационными системами.

В скором времени выложу на сайт статьи по MongoDB на основе глав из книги.

Фрагмент из введения

Настоящее учебное пособие раскрывает особенности разработки баз данных в MongoDB, выполнения команд выборки и модификации данных, построения индексов. Кроме того, представлено использование MongoDB в языках программирования Python, Java и PHP.

MongoDB это документо-ориентированная система управления базами данных (СУБД) с открытым исходным кодом, не требующая описания схемы данных. Она написана на языке C++ и распространяется в рамках лицензии Creative Commons. Разработка MongoDB началась в октябре 2007 года компанией 10gen. Первый общедоступный релиз состоялся в феврале 2009. С 6 июня 2012 г. компания 10gen начала длительное сотрудничество с корпорацией Microsoft, предоставив MongoDB ее облаку Windows Azure. В результате партнерства конечные разработчики получили легкий доступ к запуску MongoDB на виртуальных машинах Windows Azure. Это позволяет объединить возможности ведущей базы данных NoSQL с технологиями Microsoft, включая Windows Azure, .NET и другие технологии с открытым исходным кодом, которые поддерживает Microsoft.

MongoDB имеет подробную и качественную документацию, большое число примеров и драйверов под популярные языки Java, Node.js, C++, C#, PHP, Python, Perl, Ruby, Grails&Groovy.

Рост объема данных и усложнение их структуры привели к появлению нереляционных баз данных, называемых иначе NoSQL (Not only SQL). С определённой точки зрения это новый виток развития систем управления базы данных. Отсутствие схемы базы данных в традиционном ее понимании и невероятная гибкость при первом рассмотрении поражает своей легкостью использования. С одной стороны это позволяет тратить меньше время на проектирование структуры будущей базы, а с другой — быстро их разрабатывать. Однако за этими весьма приятными вещами скрываются, как и в различных других областях и технологиях, свои ограничения. О них следует знать, помнить и представлять процесс разработки гибких решений с их учетом.

В данном учебном пособии читатели познакомятся с системой управления базами данных MongoDB как разработчики. Выполняя практические задания, научатся создавать базы данных, обращаться к ним из приложений, выполнять запросы поиска и модификации документов, агрегации данных, многоступенчатой обработки, получат представление о работе с хранилищем больших данных GridFS, а также с обычными и геоинформационными индексами. Все пример реализованы в среде Linux, однако, для пользователей Windows отличия коснутся только при описании путей при файловых операциях.

Предполагается, что читатели немного знакомы с сущностью традиционных реляционных баз данных. Опыт работы в одной из их реализаций, например, MySQL, Microsoft Access, Microsoft SQL Server или других будет полезен, но не является обязательным. Равно как и опыт написания SQL запросов в любой из СУБД, поскольку мир нереляционной NoSQL базы данных MongoDB отличается от них. Следует сразу привыкать мыслить и проектировать решения сразу в терминах MongoDB, а не переводить их с реляционного прототипа. Параллели между реляционными запросами и командами MongoDB проводятся, тем более, что их приводят сами создатели СУБД, однако, в большей степени они присутствуют для повышения понимания теми разработчиками, которые хорошо знакомы с SQL и желают быстрее понять MongoDB, используя свой опыт в реляционных базах.

Консоль MongoDB Shell является JavaScript-ориентированной. Для работы с командами и объектами, а также форматом данных JSON, знание JavaScript на начальном уровне будет преимуществом. Однако, в учебном пособии учитывается различный опыт читателей и весь код достаточно подробно прокомментирован.

Вместе с представлением MongoDB в пособии показано использование MongoDB в языках программирования. Для этой задачи выбран один из молодых мультипарадигмальных языков — Python. Использование MongoDB на языке Python через драйвер PyMongo происходит весьма нативно и здесь нет больших отличий от командной строки MongoDB (MonogDB Shell). Опыт программирования на Python не требуется, но, естественно, будет ценен. Кроме того, продемонстрировано использование MongoDB в проектах на Java и PHP. Приведены примеры работы с хранилищем больших данных GridFS из проектов на Python и Java.

Содержание

0 История развития баз данных 11
0.1 Реляционные базы данных 11
0.2 Подход к хранению больших данных (Big Data) 12
0.3 Нереляционные NoSQL базы данных 15
0.4 Представители NoSQL 16
1 Особенности и возможности MongoDB 19
1.1 Документы и формат JSON 19
1.2 Ключи и значения 22
1.3 Преимущества и ограничения MongoDB 24
1.3.1 Хранилище на основе ключ-значение (key-value) 25
1.3.2 Бессхемность 27
1.3.3 Атомарность и отсутствие транзакций 28
1.3.4 Масштабируемость и отказоустойчивость 28
1.3.5 Ограничения на объем данных 28
2 Установка и запуск MongoDB 30
2.1 Установка и запуск в среде Windows 31
2.2 Установка и запуск в среде Linux 35
2.3 Быстрый старт с MongoDB 37
2.3.1 Базы данных и коллекции 38
2.3.2 CRUD операции в MongoDB shell 40
2.3.3 Добавление и поиск документов 40
2.3.4 Редактирование документов 45
2.3.5 Удаление документов 47
3 Поиск и обновление документов 49
3.1 Типы данных 49
3.1.1 Значения null и undefined 49
3.1.2 Логический тип Boolean 51
3.1.3 Числа integer и float 52
3.1.4 Тип String 52
3.1.5 Тип Date 52
3.1.6 Тип ObjectId 53
3.1.7 Максимальные и минимальные значения 54
3.1.8 Регулярные выражения (regular expression) 54
3.1.9 Массивы array 55
3.1.10 Документы (embedded document) 55
3.1.11 Программный код (code) 56
3.2 Поиск документов 57
3.2.1 Параметры команд find и findOne 57
3.2.2 Работа с курсором 61
3.2.3 Команды limit, skip, sort и count 65
3.3 Использование модификаторов при поиске 70
3.3.1 Использование регулярных выражений 71
3.3.2 Модификатор условий ($lt, $lte, $gt, $gte, $ne) 73
3.3.3 Логические условия ($or, $nor, $and, $not) 76
3.3.4 Модификатор остатка от деления $mod 79
3.3.5 Модификатор типа данных $type 80
3.3.6 Модификатор наличия $exists 82
3.3.7 Модификаторы поиска значений $in и $nin 83
3.4 Поиск в списках и словарях 84
3.4.1 Поиск документов по значениям в списках 85
3.4.2 Использование модификаторов $in и $nin 87
3.4.3 Модификатор $all 87
3.4.4 Модификатор $size 88
3.4.5 Работа с поддокументами 89
3.4.6 Обращение к спискам 94
3.4.7 Модификаторы проекций (projection) $elemMatch и $slice 102
3.4.8 Пользовательские условия (модификатор $where) 108
3.5 Обновление документов 111
3.5.1 Модификатор $set и $unset 111
3.5.2 Множественные изменения командой update. Опция multi 113
3.5.3 Создание документов командой update. Опция upsert 115
3.5.4 Модификатор $inc 117
3.5.5 Модификаторы работы со списками ($push, $pull, $addToSet, $each) 120
3.5.6 Оператор позиции в списке ($) 133
3.5.7 Возвращение обновлений (findAndModify) 136
3.5.8 Удаление документов и очистка коллекций 137
4 Управление коллекциями и базам данных 139
4.1 Управление коллекциями 139
4.1.1 Создание и удаление коллекций 139
4.1.2 Ограниченные коллекции (capped collection) 142
4.1.3 Дублирование коллекций 149
4.1.4 Переименование коллекций (renameCollection) 151
4.2 Управление базами данных 152
4.2.1 Клонирование и копирование баз данных 152
4.2.2 Удаление баз данных 156
5 Расширенная обработка документов 157
5.1 Надстройка агрегации данных (Aggregation framework) 157
5.1.1 Модификатор $project 158
5.1.2 Модификаторы $limit, $sort, $skip 159
5.1.3 Модификатор $match 162
5.1.4 Модификатор $group 163
5.1.5 Модификатор развертки $unwind 166
5.2 Двухступенчатая обработка Map-Reduce 178
5.3 Экспорт и импорт данных 186
5.3.1 Экспорт и импорт в формате JSON 186
5.3.2 Экспорт и импорт бинарных данных 187
5.4 Введение в GridFS 190
5.5 Статистика коллекций 192
6 Индексация документов 195
6.1 Метод explain 195
6.2 Создание и использование индексов 198
6.2.1 Определение индексов индексов 198
6.2.2 Составные индексы (compound index) 202
6.2.3 Фоновое создание индексов 202
6.2.4 Удаление индексов 202
6.2.5 Опция sparse 203
6.2.6 Уникальные индексы (unique index) 204
6.2.7 Указание используемого индекса (hint) 208
6.2.8 Пересоздание индексов (reIndex) 210
6.3 Геоиндексы (geospatial index) 210
6.3.1 Описание геоиндексов 210
6.3.2 Запросы геоинформации входящих в фигуру 213
6.3.3 Геоинформационные запросы с использованием сферической геометрии 215
7 Использование MongoDB в языках программирования 222
7.1 MongoDB и Python 222
7.1.1 Установка драйвера PyMongo 222
7.1.2 Выборка и обновление документов 223
7.1.3 Использование GridFS 225
7.2 MongoDB и Java 226
7.2.1 Подключение к базе данных 226
7.2.2 Воставка документов 227
7.2.3 Выборка документов 228
7.2.4 Использование GridFS 229
7.3 MongoDB и PHP 232
7.3.1 Установка драйвера 232
7.3.2 Поиск и вставка документов 233
Заключение 235
Библиографический список 237
Приложение А. Основы регулярных выражений 238

 

2 комментария

  • Денис, огромное спасибо за книгу. Не знаю хорошо ли, плохо ли я искал, но на русском подобного не видел. Чрезвычайно качественный материал, побольше бы подобного, а то задохнуться от иного фуфла можно. Жаль только, что о Ваших работах знают меньше чем нужно. Для меня информация по MongoDB оказалась очень нужна.
    Всего Вам наилучшего.

    • Благодарю за высокую оценку моей работы. Рад, что моя книга оказалась для Вас полезной.

Speak up! Let us know what you think.