mongodb - aleksei-khitev/knowledge_base Wiki

MongoDB

О MongoDB и версиях

MongoDB - это система управления базами данных, "заточенная" под веб-приложения и инфраструктуру Интернета.
Модель данных и стратегия их постоянного хранения спроектированы для достижения высокой пропускной способности чтения и записи и обеспечивает простую масштабируемость с автоматическим переходом на резервный ресурс в случае отказа
Написини на С++ и распространяется под лицензией GNU-AGPL
Четные номера версий - стабильные, а нечетные - разрабатываемые
Кайл Бенкер. MongoDB в действии. Стр. 23, 36, 37

Преимущество NoSQL перед SQL

Отсутствие предопределенной схемы несет с собой некоторые преимущества:

  1. Структуру данных определяет приложение, а не база. В том числе, то позволяет ускорить разработку на ранних этапах
  2. безсхеная модель позволяет представить данные с переменным набором свойств

Кайл Бенкер. 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

Назад к TechSkills

⚠️ **GitHub.com Fallback** ⚠️