УДК 004.65
ББК 32.972.134
Б87
Б87 Шеннон Брэдшоу, Йон Брэзил, Кристина Ходоров
MongoDB: полное руководство. Мощная и масштабируемая система
управления базами данных / пер. с англ. Д. А. Беликова – М.: ДМК
Пресс, 2020. – 540 с.: ил.
ISBN 978-5-97060-792-3
Эта книга представляет собой исчерпывающее руководство по работе с
MongoDB 4.2 – мощной документоориентированной системой управления базами
данных. Авторы, внесшие личный вклад в создание и развитие MongoDB,
начинают описание системы с самых азов (история создания, базовая терминология)
и постепенно переходят к более сложным темам (выполнение запросов,
индексация, агрегирование, транзакции, наборы реплик, управление операциями,
шардинг и администрирование данных, долговечность, мониторинг и
безопасность).
Читатель получит конкретные советы по написанию приложения, которое
хорошо работает с MongoDB, выяснит, какие системные настройки следует
учитывать при ее развертывании и как устанавливать MongoDB в Windows,
OS X и Linux.
Издание предназначено для разработчиков объемных баз данных, масштабирование
которых является одной из приоритетных задач.
УДК 004.65
ББК 32.972.134
Original English language edition published by O’Reilly Media, Inc. Copyright © 2020
Shannon Bradshaw and Eoin Brazil. All rights reserved. Russian-language edition copyright
© 2020 by DMK Press. All rights reserved.
Все права защищены. Любая часть этой книги не может быть воспроизведена в
какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения
владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но, поскольку вероятность
технических ошибок все равно существует, издательство не может гарантировать
абсолютную точность и правильность приводимых сведений. В связи с этим издательство
не несет ответственности за возможные ошибки, связанные с использованием книги.
ISBN 978-1-49195-446-1 (англ.) © 2020 Shannon Bradshaw and Eoin Brazil. All rights reserved.
ISBN 978-5-97060-792-3 (рус.) © Оформление, перевод на русский язык, издание,
ДМК Пресс, 2020
Стр.5
Оглавление
Предисловие ..................................................................................................... 16
Как устроена эта книга ...................................................................................16
Начало работы с MongoDB .............................................................................16
Разработка с MongoDB ...................................................................................16
Репликация .....................................................................................................16
Шардинг ..........................................................................................................17
Администрирование приложений ................................................................17
Администрирование сервера ........................................................................17
Приложения ....................................................................................................17
Обозначения, принятые в этой книге ...........................................................17
Использование примеров кода .....................................................................18
Обучение в режиме онлайн ..........................................................................19
Предисловие от издательства ....................................................................... 20
Отзывы и пожелания ......................................................................................20
Список опечаток .............................................................................................20
Нарушение авторских прав ...........................................................................20
Часть I
Введение в MongoDB ...................................................................................21
Глава 1. Введение ............................................................................................. 22
Простота использования .......................................................................... 22
Разработана для масштабирования......................................................... 22
Богатство функций… ................................................................................ 24
…Без ущерба для скорости ....................................................................... 25
Философия ................................................................................................. 25
Глава 2. Начало работы ................................................................................... 26
Документы ................................................................................................. 26
Коллекции .................................................................................................. 27
Динамические схемы .....................................................................................28
Именование ....................................................................................................29
Базы данных .............................................................................................. 30
Начало работы с MongoDB ....................................................................... 31
Знакомство с оболочкой MongoDB .......................................................... 32
Запуск оболочки .............................................................................................33
Клиент MongoDB.............................................................................................34
Основные операции с оболочкой ..................................................................35
Стр.7
Оглавление 7
Типы данных ............................................................................................. 37
Основные типы данных .................................................................................37
Даты .................................................................................................................39
Массивы ..........................................................................................................40
Вложенные документы ..................................................................................40
_id и ObjectId ...................................................................................................41
Использование оболочки MongoDB ......................................................... 43
Советы по использованию оболочки ............................................................44
Запуск скриптов с помощью оболочки .........................................................45
Создание файла .mongorc.js ..........................................................................47
Настройка приглашения ................................................................................48
Редактирование сложных переменных ........................................................49
Неудобные имена коллекций ........................................................................50
Глава 3. Создание, обновление и удаление документов ........................... 52
Вставка документов .................................................................................. 52
insertMany .......................................................................................................52
Проверка вставки ...........................................................................................56
insert ................................................................................................................56
Удаление документов ............................................................................... 56
drop .................................................................................................................58
Обновление документов .......................................................................... 58
Замена документа ..........................................................................................59
Использование операторов обновления ......................................................61
Upsert ...............................................................................................................72
Обновление нескольких документов ............................................................75
Возврат обновленных документов ................................................................76
Глава 4. Выполнение запросов ...................................................................... 79
Знакомство с методом find ....................................................................... 79
Указываем, какие ключи нужно вернуть ......................................................80
Ограничения ...................................................................................................81
Критерии запроса ..................................................................................... 81
Условные операторы ......................................................................................81
Запросы с оператором OR ..............................................................................82
$not .................................................................................................................83
Запросы для определенных типов ........................................................... 84
null .................................................................................................................84
Регулярные выражения ..................................................................................84
Запросы элементов массива ..........................................................................85
Запросы по вложенным документам ............................................................91
Операторы $where .................................................................................... 93
Курсоры ...................................................................................................... 94
Ограничения, пропуск и сортировка ............................................................95
Стр.8
8 Оглавление
Избегайте больших пропусков ......................................................................97
Бесконечные курсоры ...................................................................................99
Часть II
Разработка приложения ............................................................................101
Глава 5. Индексы ............................................................................................ 102
Знакомство с индексами .........................................................................102
Создание индекса .........................................................................................105
Знакомство с составными индексами ........................................................108
Как MongoDB выбирает индекс ...................................................................112
Использование составных индексов ...........................................................114
Как операторы с символом $ используют индексы ...................................135
Индексирование объектов и массивов .......................................................147
Кардинальность индекса .............................................................................150
Вывод explain............................................................................................150
Когда не стоит прибегать к индексированию ........................................160
Типы индексов .........................................................................................161
Уникальные индексы ...................................................................................161
Частичные индексы ......................................................................................164
Управление индексами............................................................................165
Идентификация индексов ...........................................................................166
Замена индексов ...........................................................................................167
Глава 6. Специальные типы индексов и коллекций ................................. 168
Геопространственные индексы ..............................................................168
Типы геопространственных запросов ........................................................169
Использование геопространственных индексов .......................................171
Составные геопространственные индексы ................................................179
Индексы 2d ....................................................................................................179
Индексы для полнотекстового поиска ...................................................182
Создание текстового индекса ......................................................................183
Поиск по тексту.............................................................................................184
Оптимизация полнотекстового поиска ......................................................187
Поиск на других языках ...............................................................................188
Ограниченные коллекции .......................................................................188
Создание ограниченных коллекций ...........................................................190
Настраиваемые курсоры ..............................................................................191
Индексы TTL .............................................................................................192
Хранение файлов с помощью GridFS ......................................................193
Начало работы с GridFS: mongofiles ............................................................193
Работа с GridFS из драйверов MongoDB ......................................................194
Что под капотом ...........................................................................................195
Стр.9
Оглавление 9
Глава 7. Знакомство с фреймворком агрегации ....................................... 198
Конвейеры, этапы и настраиваемые параметры ...................................198
Начало работы с этапами: знакомые операции ....................................200
Выражения ...............................................................................................206
$project ......................................................................................................207
$unwind .....................................................................................................213
Выражения массивов ...............................................................................221
Аккумуляторы ..........................................................................................227
Использование аккумуляторов в этапах с $project ....................................228
Знакомство с группировкой ....................................................................229
Поле _id в этапах $group ...............................................................................235
Сравнение $group и $project ........................................................................238
Запись результатов конвейера агрегации в коллекцию .......................241
Глава 8. Транзакции ....................................................................................... 243
Знакомство с транзакциями ...................................................................243
Определение ACID ........................................................................................244
Как использовать транзакции .................................................................244
Настройка ограничений транзакций для вашего приложения ............249
Ограничения на размер журнала операций и ограничения по времени ...249
Глава 9. Разработка приложений ................................................................ 251
Аспекты проектирования схем ...............................................................251
Шаблоны проектирования схем ..................................................................253
Нормализация и денормализация..........................................................256
Примеры представления данных ................................................................257
Кардинальность ............................................................................................262
Друзья, подписчики и другие неудобства ...................................................262
Оптимизация манипулирования данными ...........................................265
Удаление старых данных .............................................................................265
Планирование баз данных и коллекций ................................................266
Управление согласованностью................................................................267
Перенос схем ............................................................................................269
Управление схемами ...............................................................................270
Когда не стоит использовать MongoDB ..................................................270
Часть III
Репликация....................................................................................................271
Глава 10. Настройка набора реплик ........................................................... 272
Знакомство с репликацией .....................................................................272
Стр.10
10 Оглавление
Настройка набора реплик, часть 1 ..........................................................273
Пара слов касательно работы в сети .......................................................274
Вопросы безопасности ............................................................................275
Настройка набора реплик, часть 2 ..........................................................275
Наблюдение за репликацией ..................................................................279
Изменение настройки набора реплик ....................................................285
Проектирование набора ..........................................................................287
Как работают выборы ...................................................................................289
Параметры конфигурации членов..........................................................291
Приоритет .....................................................................................................291
Скрытые члены .............................................................................................291
Арбитры ........................................................................................................292
Построение индексов ...................................................................................295
Глава 11. Компоненты набора реплик ....................................................... 296
Синхронизация ........................................................................................296
Начальная синхронизация ..........................................................................298
Репликация ...................................................................................................300
Работа с устареванием данных ....................................................................300
Тактовые сигналы ....................................................................................301
Состояния членов .........................................................................................301
Выборы .....................................................................................................303
Откаты ......................................................................................................304
Когда откаты не работают ............................................................................307
Глава 12. Подключение к набору реплик из своего приложения.......... 308
Как ведет себя соединение типа «клиент к набору реплик» .................308
Ожидание репликации при операциях записи .....................................311
Другие параметры для "w" ...........................................................................313
Гарантии специализированной репликации .........................................313
По одному серверу на каждый центр обработки данных ..........................313
Гарантия большинства нескрытых членов .................................................315
Создание других гарантий ...........................................................................316
Отправка операций чтения на вторичные узлы ...................................316
Соображения по поводу согласованности ..................................................317
Вопросы нагрузки .........................................................................................317
Причины чтения с вторичных узлов ...........................................................318
Глава 13. Администрирование ..................................................................... 320
Запуск членов в автономном режиме ....................................................320
Конфигурация набора реплик .................................................................321
Создание набора реплик ..............................................................................321
Стр.11
Оглавление 11
Изменение членов набора ...........................................................................322
Создание более крупных наборов ...............................................................323
Принудительное переконфигурирование ..................................................323
Управление состоянием членов ..............................................................324
Превращение первичных узлов во вторичные ..........................................324
Предотвращение выборов ...........................................................................324
Мониторинг репликации ........................................................................325
Получение статуса ........................................................................................325
Визуализация графика репликации ............................................................329
Циклы репликации .......................................................................................330
Отключение цепочки ...................................................................................331
Расчет величины отставания .......................................................................331
Изменение размера журнала операций .....................................................333
Построение индексов ...................................................................................334
Бюджетная репликация ...............................................................................335
Часть IV
Шардинг .........................................................................................................337
Глава 14. Знакомство с шардингом ............................................................. 338
Что такое шардинг? .................................................................................338
Разбираемся с компонентами кластера .....................................................339
Настройка кластера на одной машине ...................................................340
Глава 15. Конфигурирование шардинга .................................................... 352
Когда использовать шардинг ..................................................................352
Запуск серверов ........................................................................................353
Конфигурационные серверы .......................................................................353
Процессы mongos .........................................................................................355
Добавление шарда из набора реплик ..........................................................355
Добавляем емкости ......................................................................................360
Шардинг данных ...........................................................................................360
Диапазоны чанков ........................................................................................362
Расщепление чанков ....................................................................................364
Балансировщик ........................................................................................366
Сличения ..................................................................................................367
Потоки изменений ...................................................................................368
Глава 16. Выбор ключа шардинга ............................................................... 369
Подводя итоги использования ................................................................369
Иллюстрация распределений .................................................................370
Монотонно возрастающие ключи ...............................................................370
Случайно распределенные ключи ...............................................................373
Ключи с привязкой к местоположению пользователя ..............................375
Стр.12
12 Оглавление
Стратегии..................................................................................................377
Хешированные ключи шардинга ................................................................377
Хешированные ключи шардинга для GridFS ..............................................379
Стратегия «пожарного шланга» ...................................................................380
Несколько хот-спотов ...................................................................................381
Правила и рекомендации ........................................................................382
Ограничения .................................................................................................383
Кардинальность ............................................................................................384
Управление распределением данных .....................................................385
Использование кластера для нескольких баз данных и коллекций .........385
Ручной шардинг............................................................................................387
Глава 17. Администрирование шардинга ................................................... 389
Просмотр текущего состояния ................................................................389
Получение сводки с помощью функции sh.status() ...................................389
Просмотр информации о конфигурации ...................................................392
Отслеживание сетевых подключений ....................................................399
Получение статистики о соединениях ........................................................399
Ограничение числа соединений..................................................................407
Администрирование сервера ..................................................................408
Добавление серверов ...................................................................................408
Смена серверов в шарде ..............................................................................409
Удаление шарда ............................................................................................409
Балансировка данных ..............................................................................413
Балансировщик.............................................................................................413
Изменение размера чанков .........................................................................415
Перемещение чанков ...................................................................................416
Неразделимые чанки ...................................................................................418
Обновление конфигураций .........................................................................421
Часть V
Администрирование приложений..................................................... 423
Глава 18. Смотрим, что делает ваше приложение .................................... 424
Просмотр текущих операций ..................................................................424
Поиск проблемных операций ......................................................................428
Ложные срабатывания .................................................................................429
Предотвращение фантомных операций .....................................................429
Использование системного профилировщика ......................................430
Вычисление размеров .............................................................................434
Документы ....................................................................................................434
Коллекции .....................................................................................................434
Базы данных .................................................................................................440
Использование утилит mongotop и mongostat ......................................441
Стр.13
Оглавление 13
Глава 19. Обеспечение безопасности в MongoDB .................................... 444
Аутентификация и авторизация в MongoDB .........................................444
Механизмы аутентификации ......................................................................444
Авторизация .................................................................................................445
Использование сертификатов x.509 для аутентификации членов
и клиентов ............................................................................................447
Руководство по аутентификации в MongoDB и шифрованию
на транспортном уровне ....................................................................450
Создание центра сертификации .................................................................450
Создание и подпись сертификатов членов ................................................456
Генерация и подписание клиентских сертификатов .................................457
Создание набора реплик без включенной аутентификации
и авторизации ......................................................................................457
Создание пользователя с правами администратора .................................458
Перезапуск набора реплик с включенной аутентификацией
и авторизацией .....................................................................................459
Глава 20. Долговечность ............................................................................... 462
Долговечность на уровне членов с помощью журналирования ...........462
Долговечность на уровне кластера при использовании
гарантии записи .................................................................................464
Опции w и wtimeout для параметра writeConcern .....................................464
Опция j (ведение журнала) для параметра writeConcern ..........................465
Долговечность на уровне кластера при использовании
гарантии чтения .................................................................................466
Долговечность транзакций с использованием гарантии записи .........467
Чего MongoDB не гарантирует ................................................................468
Проверка на предмет наличия повреждений ........................................468
Часть VI
Администрирование сервера ..................................................................471
Глава 21. Настройка MongoDB в рабочем окружении ............................. 472
Запуск из командной строки...................................................................472
Конфигурирование на базе файлов ............................................................477
Остановка MongoDB ................................................................................478
Шифрование данных ....................................................................................480
SSL-соединения ............................................................................................481
Протоколирование ...................................................................................481
Глава 22. Мониторинг MongoDB .................................................................. 483
Мониторинг использования памяти ......................................................483
Знакомство с памятью компьютера ............................................................483
Стр.14
14 Оглавление
Отслеживание использования памяти .......................................................484
Отслеживание отказов страницы ................................................................485
Время ожидания ввода/вывода ...................................................................487
Вычисление рабочего множества ...........................................................487
Примеры рабочего множества ....................................................................488
Отслеживание производительности ......................................................489
Отслеживание свободного пространства ...............................................491
Мониторинг репликации ........................................................................491
Глава 23. Создание резервных копий ......................................................... 495
Методы резервного копирования ...........................................................495
Резервное копирование сервера .............................................................496
Снимок файловой системы .........................................................................496
Копирование файлов данных ......................................................................500
Использование mongodump.........................................................................502
Особые факторы при копировании наборов реплик ............................505
Особые факторы при копировании разделенного кластера ................506
Резервное копирование и восстановление всего кластера .......................507
Резервное копирование и восстановление одного шарда ........................507
Глава 24. Развертывание MongoDB ............................................................ 508
Проектирование системы .......................................................................508
Выбор носителя для хранения .....................................................................508
Рекомендуемые уровни спецификации RAID ............................................509
Центральный процессор ..............................................................................510
Операционная система ................................................................................510
Объем подкачки ...........................................................................................511
Файловая система .........................................................................................512
Виртуализация .........................................................................................512
Избыточное выделение памяти ..................................................................512
Таинственная память ...................................................................................513
Обработка проблем ввода/вывода сетевого диска .....................................513
Использование несетевых дисков ...............................................................514
Конфигурирование настроек системы ...................................................515
Отключение архитектуры неравномерного доступа к памяти .................515
Упреждающее чтение ...................................................................................517
Отключение THP ..........................................................................................518
Выбор алгоритма планирования .................................................................519
Отключаем отслеживание времени доступа ..............................................520
Изменение ограничений .............................................................................520
Конфигурирование сети ..........................................................................522
Наводим порядок в системе ....................................................................524
Синхронизация часов ..................................................................................524
Стр.15
Оглавление 15
OOM Killer .....................................................................................................524
Отключите периодические задачи .............................................................525
Приложение А. Установка MongoDB ........................................................... 526
Выбор версии ...........................................................................................526
Установка в Windows ................................................................................527
Установка в качестве службы .......................................................................528
Установка в POSIX (Linux и Mac OS X) ....................................................528
Установка из диспетчера пакетов ...............................................................529
Приложение B. Внутреннее устройство MongoDB ................................... 531
BSON .........................................................................................................531
Проводной протокол ................................................................................532
Файлы данных ..........................................................................................532
Пространства имен ..................................................................................535
Подсистема хранения WiredTiger ...........................................................535
Об авторах ...................................................................................................... 536
Об изображении на обложке ....................................................................... 537
Предметный указатель ................................................................................. 538
Стр.16