Оглавление
Предисловие..................................................................................................... 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
Типы данных ............................................................................................. 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  Оглавление
Избегайте больших пропусков ......................................................................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
Глава 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  Оглавление
Настройка набора реплик, часть 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
Изменение членов набора ...........................................................................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  Оглавление
Стратегии..................................................................................................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
Глава 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  Оглавление
Отслеживание использования памяти .......................................................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
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