mongodb - aleksei-khitev/knowledge_base Wiki
MongoDB
О MongoDB и версиях
MongoDB - это система управления базами данных, "заточенная" под веб-приложения и инфраструктуру Интернета.
Модель данных и стратегия их постоянного хранения спроектированы для достижения высокой пропускной способности чтения и записи и обеспечивает простую масштабируемость с автоматическим переходом на резервный ресурс в случае отказа
Написини на С++ и распространяется под лицензией GNU-AGPL
Четные номера версий - стабильные, а нечетные - разрабатываемые
Кайл Бенкер. MongoDB в действии. Стр. 23, 36, 37
Преимущество NoSQL перед SQL
Отсутствие предопределенной схемы несет с собой некоторые преимущества:
- Структуру данных определяет приложение, а не база. В том числе, то позволяет ускорить разработку на ранних этапах
- безсхеная модель позволяет представить данные с переменным набором свойств
Кайл Бенкер. MongoDB в действии. Стр. 28
Произвольные запросы к БД
Что касается реляционной базы данных, она обладает таким свойством и выполнит любой SQL-запрос, сколько бы условийон ни содержал
При проектировании MongoDB в частности ставилась задача по возможности сохранить выразительную мощь запросов, которая считается принципиально важной особенностью СУБД
Пример запрос в MongoDB выглядит так
db.posts.find({'tags': 'politics', 'vote_count': {'$gt': 10}});
К примеру, в key-value базах данных, можно делать запрос только по первичному ключу Кайл Бенкер. MongoDB в действии. Стр. 28-30
Индексы в MongoDB
В MongoDB, вторичные индексы реализованы в виде B-деревьев
Думая об индексах, можно представить указатели в конце книги, содержащие ключевые слова и номера страниц
Кайл Бенкер. MongoDB в действии. Стр. 31
Репликация
В MongoDB репликация базы данных обеспеивается с помощью так называемой топологии набора реплик.
Распределение идет по набору реплик для обеспечения избыточности и отработки отказа
Набор будет состоять из единственного первичного ключа и одного или более вторичных.
В случае отказа, происходит автоматический переход на резервный ресурс (кластер выбирает один из вторичных ресурсов и делает его новым первичным)
Кайл Бенкер. MongoDB в действии. Стр. 32
Скорость записи vs Долговечность
Под скоростью записи понимается совокупный объем операций вставки, обноления и даления, которые база данных способна обработать в единицу времени
Под долговечность понимается мера уверенности в том, что результат операций записи сохранится (к примеру, при неожиданном выключении питания)
ПО умолчнаию, в MongoDB используется принцип "выстрелил и забыл", где ответ от базы данных не требуется.
Если запрос принципиально важный, операцию можно выполнить в безопасном режиме (который поддерживается всеми драйверами). В этом случае, клиент будет ждать ответ от сервера. Можно настроить еще ожидание репликации на n-серверов
Кайл Бенкер. MongoDB в действии. Стр. 33
Журналирование
В версии 2.0 по умолчанию включено журналирование.
В этом режиме, каждая операция фиксируется в журнале, допускающем только дозапись в конец (для скорости)
При неожиданной остановке, журнал позволит серверу MongoDB восстановить согласованное состояние файлов данных
Журналирование можно отлючить, чтобы повысить производительность, но в случае чего, файлы могут быть повреждены
Кайл Бенкер. MongoDB в действии. Стр. 33-34
Масштабирование
Вертикальное масштабирование - улучшение оборудования
Горизонтальное масштабирование - распределение по нескольким узлам
MongoDB изначально спроектирована в расчете на горизонтальное масштабирование. Для этого используется механизм сегментирования (sharding) по диапазонам, _автосегментирование (auto-sharding), который автоматически управляет распределение данных между узлами.
Каждый сегмент состоит из набора реплик.
Кайл Бенкер. MongoDB в действии. Стр. 35-36
Сервер MongoDB
Исполняемый файл сервера БД - mongod
(или mongodb.exe
для Windows)
С клиентом сервер взаимодействует по специальному протоколу через сетевой сокет.
Используемые файлы хранятся в /data/db
(или в C:\data\db
в Windows)
Режимы работы сервера
Самый употребительный режим работы сервера MongoDB - член набора реплик (конфигурируется набор, состоящий из 2 реплик и процесса-арбитра на третьем сервере)
В режиме автосегментирования процессы mongod
в каждом сегменте конфигурируются как наборы реплик, а "сбоку" находятся специальные серверы метаданных (конфигурационные серверы). mongos
использется маршрутный сервер.
Кайл Бенкер. MongoDB в действии. Стр. 37
JavaScript-оболочка
Командная оболочка MongoDB - инструмент для администрирования базы данных с помощью языка JavaScript
Исполняемый файл mongo
устанавливает соединение с указанным процессом mongod
и запускает оболочку
Пример выбора базы данных, вставки объекта и поиска всех объектов
> use mongodb-in-action
> db.users.insert({name: "Kyle"})
> db.users.find()
Кайл Бенкер. MongoDB в действии. Стр. 38
Первичный ключ
В любом документе должен быть первичный ключ, хранящийся в поле _id
.
Разрешается задвать _id
самостоятельно при условии, что гарантирется его уникальность.
Если поле _id
опустить, MongoDB присвоит объекту идентификатор самостоятельно
Кайл Бенкер. MongoDB в действии. Стр. 38
Представление документа в различных драйверах
У Python - словарь
У Java - специальный класс, реализующий LinkedHashMap
Кайл Бенкер. MongoDB в действии. Стр. 39
Команды-утилиты
-
mongodump
/mongorestore
- резервное копирвоание и восстановление, используя внутренний формат BSON8 -
mongoexport
/mongoimport
- экспорт и импорт в JSON, CSV, TSV -
mongosniff
- анализатор протокол для просмотра команд. По сути транслирует передаваемые команды в BSON в понятные человеку команды оболочки -
mongostat
- аналог iostat для сборка статистики, включая число операций вставки, выборки, обновления, удаления, объем памяти и прочее
Кайл Бенкер. MongoDB в действии. Стр. 40