MongoDB для начинающих: знакомство и установка (часть 1/3)
MongoDB — это система управления базами данных, которая значительно отличается от MySQL. Основная разница заключается в том, что в MySQL запросы пишутся на языке SQL, а в MongoDB на BSON (бинарный JSON). Это значит, что работа с этой системой может осуществляться в основном через JavaScript выражения.
Также MongoDB включает в себя собственную утилиту для выполнения команд, направленных на работу с БД. В данном цикле статей, мы затронем следующие темы:
- Установка и запуск MongoDB на Windows
- Работа с MongoDB через консоль
- Интеграция MongoDB и PHP
Разработчикам не составляет труда быстро освоить работу с Mongo, если они знакомы с JSON. Этот формат использует выражения, которые состоят из пар “ключ”: “значение”.
Почему MongoDB
Между не табличными СУБД многие пользователи делают выбор в пользу MongoDB. Во-первых, данную систему можно установить практически на всех операционных системах (Windows, OSX, Linux). Во-вторых, проект до сих пор активно развивается и с завидной частотой команда разработчиков публикует обновления. Также мне кажется, что MongoDB предоставляет хорошую документацию для начинающих.
Mongo DB ПОЛНЫЙ КУРС
MongoDB лучше подходит в тех случаях, когда таблицы можно представить в виде объектов. По-моему, подобные системы лучше использовать при разработке приложений для мобильный устройств. В этом плане, Mongo предоставляет отдельные библиотеки, как для iOS, так и для Adndroid-а.
Ещё один весомый аргумент в пользу MongoDB: работать с данной системой можно на многих языках программирования, таких как C/C++, Python, PHP, Rubym Perl, .NET и даже Node.js.
MongoDB — это реальное решение, если вы хотите отступить от SQL и попробовать что-то новенькое.
Ключевая терминология
Перед тем как приступить к установке MongoDB, давайте разберёмся с основными понятиями.
Как и MySQL, MongoDB может содержать множество баз данных, только вместо таблиц они содержат “коллекции”.
Коллекция — это что-то типа таблицы, только без колонок. Вместо этого каждая строка содержит наборы записей в виде ключ:значение.
Пример:
Внутри коллекции Users (пользователи) может располагаться запись с ключами firstname (имя) и lastname (фамилия). В то же время, та же коллекция может содержать запись с другими ключами: firstname, lastname, e-mail, birth (день рождения). В этом-то и заключается гибкость MongoDB.
Каждая из этих записей, или строк, называется “документ”, но это не тот документ типа .txt или .html. Данная запись хранится в памяти в JSON формате.
Пример:
Предположим, в нашей коллекции содержится 500 документов. Как уже говорилось раньше, каждый из них может содержать разные поля. Единственное поле, которое должно быть у каждой записи, — это уникальный идентификатор (id), который добавляется автоматически.
MongoDB #1 Основные понятия (Basic Concepts)
Поначалу данная терминология может быть непривычной. Всё будет намного понятнее, когда вы увидите работу с СУБД на практике.
Установка MongoDB на Windows
Сперва качаем архив с MongoDB для win32 или win64.
Распаковываем скачанный архив и помещаем его, к примеру, на диск C, в каталог mongodb. Причём, проследите за тем, чтобы каталог bin был доступен по адресу C:mongodbbin .
Далее прописываем путь к папке bin в настройках нашей ОС, для того чтобы к .exe файлам данной папки мы могли достучаться из любого места. Итак, делаем правый клик на Компьютер — Свойства. В списке слева, выбираем “Дополнительные параметры системы”:
Далее, нажимаем на кнопку “Переменные среды”:
В открывшемся окне ищем системную переменную Path. Кликаем по ней дважды. В поле “значение переменной” переходим в самый конец, ставим знак “;” и вписываем путь к каталогу bin:
Отлично! Жмём “ок”. и переходим к следующему шагу.
Для начала, нам необходимо создать каталог, где будут храниться наши БД. К примеру, C:databases . Создаём эту папку.
Далее нам необходимо зарегистрировать MongoDB как сервис, чтобы он запускался автоматически при включении компьютера. Для этого вызываем командную строку и пишем:
echo logpath=C:mongodblogmongo.log > C:mongodbmongod.cfg
Данная команда создаст специальный лог файл и настройки конфигурации для сервиса.
Далее создаём сервис:
mongod —config C:mongodbmongod.cfg —install
logpath=C:mongodblogmongo.log dbpath=C:databases
Возвращаемся к командной строке и запускаем сервис MongoDB:
net start MongoDB
Для того чтобы проверить, будет ли сервис запускаться автоматически, нажимаем сочетание клавиш “windows+r”, пишем “services.msc”, нажимаем ОК.
В списке сервисов ищем MongoDB и, если его тип запуска не автоматический, то выставляем данный пункт, предварительно сделав правый клик, и выбрав, “свойства”.
Теперь, когда мы создали сервис, который будет запускать MongoDB при включении компьютера, нам не нужно будет делать это вручную.
Для проверки работы MongoDB открываем командную строку и пишем:
mongo
Нажимаем Enter. Далее можем работать с данной СУБД. К примеру, посмотрим, какие сейчас у нас есть базы:
show dbs
В ответе вы должны увидеть вот такую вот строку:
local (empty)
Итог
Итак, MongoDB установлена и сконфигурирована. В следующей части мы рассмотрим основные команды для работы с данной СУБД.
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: http://www.hongkiat.com/blog/webdev-with-mongodb-part1/
Перевел: Станислав Протасевич
Урок создан: 3 Апреля 2013
Просмотров: 114453
Правила перепечатки
5 последних уроков рубрики «PHP»
Фильтрация данных с помощью zend-filter
Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.
Контекстное экранирование с помощью zend-escaper
Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.
Подключение Zend модулей к Expressive
Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.
Совет: отправка информации в Google Analytics через API
Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.
Подборка PHP песочниц
Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.
Источник: ruseller.com
MongoDB: введение, преимущества и настройка среды
MongoDB — кроссплатформенная документоориентированная база данных с открытым ПО и ведущая база данных NoSQL, написанная на C++. Она опирается на концепции коллекций и документов .В данном руководстве объясняются ключевые концепции MongoDB, необходимые для создания и развертывания высоко масштабируемой базы данных с акцентом на производительность.
Целевая аудитория
Руководство предназначено для специалистов в области ПО, которые ищут легкий способ освоения MongoDB. Обучающий материал раскрывает суть ее концепций. Изучив руководство, вы выходите на средний уровень знаний, что позволяет наметить траекторию своего дальнейшего обучения.
Необходимые требования
Для работы с руководством требуется начальное представление о базе данных, текстовом редакторе и выполнении программ. Поскольку речь идет о разработке высокопроизводительной базы данных, необходимо знать ключевые концепции реляционной системы управления базами данных (РСУБД).
Основные термины
База данных
База данных — это физический контейнер для коллекций. Каждая БД располагает собственным набором файлов в файловой системе. Как правило, на одном сервере MongoDB находятся несколько баз данных.
Коллекция
Коллекция — набор документов MongoDB. Она представляет собой эквивалент таблицы в РСУБД. Коллекция размещается внутри одной базы данных и не требует описания схемы. Документы в коллекции могут иметь разные поля, и, как правило, их объединяет схожее или общее назначение.
Документ
Документ — это набор пар ключ-значение. Он обладает динамической схемой — документы одной коллекции необязательно должны иметь одинаковый набор полей или структуру, а их общие поля могут содержать разные типы данных.
Ниже представлена сравнительная таблица терминов, принятых в РСУБД и MongoBD:
Пример документа
Данный пример отображает структуру документа сайта блога, которая представляет собой пару ключ-значение, просто разделенную запятой:
_id: ObjectId(7df78ad8902c)
title: ‘MongoDB Overview’,
description: ‘MongoDB is no sql database’,
by: ‘Nuances of programming’,
url: ‘https://nuancesprog.ru/’,
tags: [‘mongodb’, ‘database’, ‘NoSQL’],
likes: 100,
comments: [
user:’user1′,
message: ‘My first comment’,
dateCreated: new Date(2011,1,20,2,15),
like: 0
>,
user:’user2′,
message: ‘My second comments’,
dateCreated: new Date(2011,1,25,7,45),
like: 5
>
]
>
_id — это 12-ти байтовое шестнадцатеричное число, гарантирующее уникальность каждого документа. Он указывается при вставке документа. Если этого не сделать, MongoDB сама создает такой идентификатор для каждого документа. Первые 4 байта из 12 означают метку времени; следующие 3 байта — id компьютера; следующие 2 байта — id процесса на сервере MongoBD; и оставшиеся 3 байта являются простым инкрементным значением.
Преимущества MongoDB
Любая реляционная база данных имеет стандартную схему, которая показывает количество таблиц и связи между ними. В MongoDB такие связи не предусмотрены.
Преимущества MongoDB перед РСУБД
- Отсутствие схемы. MongoDB — это документоориентированная база данных, в которой одна коллекция содержит различные документы. Количество полей, содержимое и размер документов могут отличаться.
- Понятная структура объекта.
- Отсутствие сложных соединений Join .
- Расширенные возможности запросов. MongoDB поддерживает динамические запросы документов, используя язык запросов на их основе, практически не уступающий в эффективности SQL.
- Настройка.
- Легкость масштабирования.
- Не требуется преобразование объектов приложения в объекты базы данных.
- Использует внутреннюю память для хранения (оконного) рабочего набора, обеспечивая ускоренный доступ к данным.
Аргументы в пользу MongoDB
- Документоориентированное хранение данных. Данные хранятся в виде документов в формате JSON.
- Индекс для любого атрибута.
- Репликация и высокая доступность.
- Автоматический шардинг.
- Полнофункциональные запросы.
- Быстрые обновления.
- Профессиональная поддержка, предоставляемая MongoDB.
Области использования MongoDB
- Большие данные.
- Управление и доставка контента.
- Мобильная и социальная инфраструктуры.
- Управление пользовательскими данными.
- Центр управления и обработки данных (Data Hub).
Настройка среды
Установка MongoDB на Windows
Загружаем последнюю версию MongoDB с сайта https://www.mongodb.com/download-center.
Вводим необходимые данные и переходим на вкладку Server . В ней выбираем версию MongoDB, операционную систему и установочный пакет:
Устанавливаем скаченный файл. По умолчанию он будет установлен в каталог C:Program Files .
MongoDB предусматривает наличие каталога данных для хранения файлов. По умолчанию он находится в c:datadb . Для создания данного каталога выполняем команды в командной строке:
C:>md data
C:md datadb
Указываем путь dbpath к созданному каталогу в mongod.exe, для чего применяем далее указанные команды.
В командной строке переходим к текущей директории bin в установочном каталоге MongoDB. Допустим, что установочный каталог — C:Program FilesMongoDB:
C:UsersXYZ>d:cd C:Program FilesMongoDBServer4.2bin
C:Program FilesMongoDBServer4.2bin>mongod.exe —dbpath «C:data»
В консоли появится сообщение об ожидании соединения, что говорит об успешном выполнении процесса mongod.exe.
Для запуска MongoDB открываем другую командную строку и вводим:
C:Program FilesMongoDBServer4.2bin>mongo.exe
MongoDB shell version v4.2.1
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled «id» : UUID(«4260beda-f662-4cbe-9bc7-5c1f2242663c») >
MongoDB server version: 4.2.1
>
Как видно, MongoDB успешно установлена и запущена. При следующем ее запуске потребуются только команды:
C:Program FilesMongoDBServer4.2bin>mongod.exe —dbpath «C:data»
C:Program FilesMongoDBServer4.2bin>mongo.exe
Установка MongoDB на Ubuntu
Выполняем данную команду для импорта публичного ключа GPG MongoDB:
sudo apt-key adv —keyserver hkp://keyserver.ubuntu.com:80 —recv 7F0CEB10
Создаем файл /etc/apt/sources.list.d/mongodb.list с помощью команды:
echo ‘deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen’
| sudo tee /etc/apt/sources.list.d/mongodb.list
sudo apt-get update
apt-get install mongodb-10gen = 4.2
В рассмотренном выше процессе установки 2.2.3 является текущей версией MongoDB. Обратите внимание, что всегда необходимо устанавливать последнюю версию.
sudo service mongodb start
sudo service mongodb stop
sudo service mongodb restart
Для работы с MongoDB вводим команду:
mongo
И подключаемся к запущенному экземпляру MongoDB.
Помощь MongoDB
Для получения списка команд вводим db.help() в клиенте MongoDB. В результате открывается перечень команд, как показано на скриншоте:
Статистика MongoDB
Для получения данных о сервере MongoDB вводим в клиенте команду db.stats() . Вам будет предоставлена информация об имени базы данных, количестве коллекций и документов. Результат выполнения команды отображен на следующем скриншоте:
- Как построить идеальное хранилище данных
- Выбираем базу данных
- Выбор между SQL и NoSQL: ACID и CAP, схема и транзакции
Источник: medium.com
За и против: Когда стоит и не стоит использовать MongoDB
Разработчик и сотрудник проекта CouldBoost.io Наваз Дандала (Nawaz Dhandala) написал материал о том, почему в некоторых случаях не стоит использовать MongoDB. Мы в «Латере» развиваем биллинг для операторов связи «Гидра» и уже много лет работаем с этой СУБД, поэтому решили представить и свое мнение по данному вопросу.
Дандала сразу оговаривается, что работал со многими СУБД (как SQL, так и NoSQL) и считает MongoDB отличным инструментом, однако существуют сценарии, в которых его применение нецелесообразно.
Документоориентированные СУБД такие, как MongoDB, прекрасно справляются с хранением JSON-данных, сгруппированных в «коллекции». В таком формате можно хранить любые JSON-документы и удобно категоризировать и по коллекциям. Содержащийся в MongoDB JSON-документ называется двоичным JSON или BSON и, как любой другой документ этого формата, является неструктурированным. Поэтому, в отличии от традиционных СУБД, в коллекциях можно сохранять любые виды данных, и эта гибкость сочетается с горизонтальной масштабируемостью базы данных. Эта возможность нравится многим разработчикам, однако «не все так однозначно».
Если MongoDB такая классная, почему ее не используют все и всегда?
Выбор СУБД зависит в том числе и от того, что за приложение планируется создать. То есть базу данных выбирают не разработчики, а сам продукт, убежден Дандала. Он приводит пример, подтверждающий этот тезис.
При создании приложения, концепция которого подразумевает работу с документами, MongoDB будет хорошим выбором. К такому типу приложений можно отнести, к примеру, движок блог-платформы, где каждый автор сможет иметь по несколько блогов, и каждый из них будет содержать множество комментариев. База данных для обслуживания такого приложения должна быть легко расширяемой, и здесь MongoDB подойдет как нельзя лучше.
Однако, необходимо отметить, что у MongoDB нет связей между документами и “коллекциями” (частично это компенсируется Database Reference — ссылками в СУБД, но это не полностью решает проблему). В итоге, возникает ситуация, при которой имеется некий набор данных, который никак не связан с другой информацией в базе, и не существует никакого способа объединить данные из различных документов. В SQL-системах это было бы элементарной задачей.
Здесь возникает другой вопрос — если в MongoDB нет связей и возможностей по объединению двух таблиц, то зачем ее тогда вообще использовать? Ответ — потому что эта СУБД отлично масштабируется, и по сравнению с традиционными SQL-системами, гораздо быстрее осуществляет чтение и запись.MongoDB прекрасно подходит для приложений, в которых практически не используются данные с зависимостями и необходима масштабируемость базы данных.
Многие разработчики применяют MongoDB и для хранения связанных данных, реализуя объединения вручную в коде — этого достаточно в сценариях «одноуровневого» объединения или малого количества связей. То есть данный метод далеко не универсален.
Так какую СУБД выбрать?
Существует огромное количество различных СУБД, и каждая из них соответствует определённому набору требований, которые разработчики предъявляют к своему приложению:
- Документоориентированные СУБД (к примеру, MongoDB): Как уже сказано выше, документоориентированные СУБД используются для хранения JSON-документов в “коллекциях” и осуществления запросов по нужным полям. Можно использовать эту базу данных для создания приложений, в которых не будет содержаться слишком большого количества связей. Хорошим примером такого приложения является движок для блог-платформы или хранения каталога продуктов.
- Графовые СУБД (например Neo4j): Графовая СУБД используется для хранения между субъектами, где узлы являются субъектами, а грани — связями. Например, если разработчики создают социальную сеть, и один пользователь подписывается на другого, то пользователи являются узлами, а их “подписка” — связью. Такие СУБД прекрасно справляются с образованием связей, даже если глубина таких связей более ста уровней. Этот инструмент столь эффективен, что может даже позволяет выявлять мошенничество в сфере электронной коммерции.
- Кэш (например Redis): Такие СУБД используются, когда требуется крайне быстрый доступ к данным. Если создается приложение для интернет-торговли, в котором есть подгружаемые на каждой страницы категории, то вместо обращения к базе данных при каждом чтении, что крайне затратно, можно хранить данные в кэше. Он позволяет быстро осуществлять операции чтения/записи. Дандала советует применять СУБД, использующие кэш, в качестве оболочки для обработки часто запрашиваемых данных, избавляющей от необходимости совершения частых запросов к самой базе.
- Поисковые СУБД (например ElasticSearch): В случае необходимости осуществления полнотекстового поиска по базе данных (например поиск продукции в ecommerce-приложении), то хорошей идее будет использование поисковой СУБД вроде ElasticSearch. Эта система способна искать по огромному массиву данных и обладает обширной функциональностью — например, СУБД умеет осуществлять поиск по именованным категориям.
- Строковые СУБД (например Cassandra): СУБД Cassandra используется для хранения последовательных данных, логов, или огромного объема информации, который может генерироваться автоматически — к примеру, каким-нибудь датчиками. Если разработчики собираются использовать СУБД для записи больших массивов данных и при этом планируется, что будет намного меньше обращений для чтения и данные не будут иметь связи и объединения, тогда Cassandra будет хорошим выбором, уверен Дандала.
Использование комбинации баз данных
Существуют и ситуации, в которых может понадобиться использование сразу нескольких различных СУБД.
Например, если в приложении есть функция поиска, то его можно реализовать с помощью ElasticSearch, а уже для хранения данных без связей лучше подойдет MongoDB. Если речь иет о проекте в сфере «интернета вещей», где огромное количество всевозможных устройств и датчиков генерируют гигантские объёмы данных, вполне разумно будет использовать Cassandra.
Принцип, при котором используются несколько СУБД для работы в одном приложении, называется “Polyglot Persistence”. В этой статье можно почитать о плюсах и минусах такого подхода.
Наш опыт
Наша биллинговая система «Гидра» использует для учета первичных данных и хранения финансовой информации реляционную СУБД. Она идеально подходит для этих целей. Но некоторые модули Гидры, например, RADIUS-сервер, работают под высокой нагрузкой и могут получать тысячи запросов в секунду с жесткими ограничениями на время обработки запроса. Кроме того, в БД нашего автономного RADIUS-сервера данные хранятся в виде набора AVP (attribute/value pair). В таком сценарии реляционная СУБД уже не выглядит лучшим решением, и тут на помощь приходит MongoDB с ее хранилищем документов произвольной структуры, быстрой выдачей ответа и горизонтальной масштабируемостью.
При эксплуатации более чем на 100 инсталляциях Гидры на протяжении последних 5 лет серьезных проблем с Mongo мы не обнаружили. Но пара нюансов все же есть. Во-первых, после внезапного отключения сервера БД хоть и восстанавливается благодаря журналу, но происходит это медленно. К счастью, необходимость в этом возникает нечасто.
Во-вторых, даже при небольшом размере БД редко используемые данные сбрасываются на диск и когда запрос к ним все же приходит, их извлечение занимает много времени. В результате нарушаются ограничения на время выполнения запроса.
Все это относится к движку MMAPv1, который применяется в Mongo по умолчанию. С другими (WiredTiger и InMemory) мы пока не экспериментировали — проблемы не настолько серьезны.
Источник: habr.com
Введение в MongoDB. Руководство для начинающих
MongoDB — система управления базами данных с открытым исходным кодом, не требующая описания схемы таблиц. Классифицирована как NoSQL, использует JSON-подобные документы и схему базы данных.
Вступление
С переходом парадигмы в сторону динамического контента, спрос на базу данных No-SQL вырос. Это привело к появлению многочисленных No-SQL баз данных, таких как MongoDB.
MongoDB, классифицированная как база данных No-SQL, представляет собой базу данных на основе документов, в которой хранятся данные в виде документов JSON, автоматически сгенерированные для каждого документа.
База данных без SQL — это база данных, в которой структура таблиц не является фиксированной, в отличие от структурированных баз данных SQL. MongoDB хранит данные в виде строки JSON независимо от количества атрибутов или имени атрибутов в определенном столбце.
Это позволяет разработчикам быстро вносить изменения в объекты без необходимости каких-либо изменений на уровне базы данных.
Установка MongoDB
MongoDB, как и любая другая база данных, доступна в нескольких вариантах в зависимости от потребностей разработки.
- MongoDB Atlas — База данных как услуга
- Сервер совместной работы — бесплатный для сообщества разработчиков
- MongoDB Enterprise Edition — коммерческая версия с дополнительными функциями
Каждый из них полностью совместим с любой операционной системой. Для начала, загрузите соответствующий установочный файл в соответствии с вашей операционной системой.
Процесс установки немного отличается для каждой операционной системы, и, следовательно, мы будем проходить установку каждой операционной системы отдельно.
Установка на MacOS
Загрузите архив .tgz, содержащий необходимые двоичные файлы. Разархивировав его, вы сможете просмотреть набор двоичных файлов, расположенных в папке bin.
- Переместите папку bin в нужное место
- Откройте терминал и измените каталог на каталог bin.
- Выполните приведенную ниже команду, чтобы создать базу данных в нужном месте.
$ ./mongod —dbpath /path-to-desired-directory/
- В приведенной выше команде замените путь к каталогу желаемым путем, и сервер будет запущен, как только команда будет выполнена.
Установка на Windows
Центр загрузки MongoDB предоставляет исполняемый MSI — пакет для установки MongoDB в Windows. Установка в Windows довольно проста и может быть выполнена с помощью нескольких команд после загрузки установки.
- Выполните приведенные ниже команды для установки MongoDB на ПК с Windows
> cd /setup-folder/ > msiexec.exe /q /i .msi ^ INSTALLLOCATION=»C:Program FilesMongoDB» ^ ADDLOCAL=»MonitoringTools,ImportExportTools,MiscellaneousTools»
Приведенные выше команды приведут вас в соответствующий каталог и выполнят установку в указанном месте. После установки вам необходимо настроить путь к хранилищу базы данных по умолчанию для MongoDB. Команда ниже поможет вам настроить
> md dbdata
Приведенная выше команда создает папку db/data в каталоге, на который в данный момент указывает командная строка. В случае, если вам нужно заново настроить базу данных, вы можете использовать mongod.exe с аргументом dbpath, как показано ниже:
>»C:Program FilesMongoDBbinmongod.exe» —dbpath d:tutorialmongodbdata
Установка на Linux
Как и в случае установки на MacOS, MongoDB для Linux-версий также доступна в виде архивированной группы двоичных файлов. Процесс установки MongoDB довольно похож.
- Переместить двоичные файлы в нужное место
- Откройте терминал в папке
- Выполните приведенную ниже команду с желаемым расположением БД
$ ./mongod —dbpath /path-to-desired-directory/
Создание первой коллекции
MongoDB хранит данные в форме документов JSON. Группа такой документации все вместе известна как коллекция в MongoDB. Таким образом, коллекция аналогична таблице в реляционной базе данных, а документ аналогичен записи.
Для хранения документов нам сначала нужно создать коллекцию. Интересной особенностью базы данных NoSQL является то, что в отличие от базы данных SQL вам не нужно указывать имена столбцов или типы данных в ней.
Источник: itgap.ru
Введение в MongoDB
MongoDB представляет наиболее популярную на данный момент документо-ориентированную систему управления базами данных. По разным оценкам входит в десяток самых используемых баз данных в мире.
На момент написания данного материала последней версией платформы была версия 6.0 , которая увидела свет в июле 2022 года и которая будет использоваться далее в данном руководстве. Использование конкретной версии может несколько отличаться от применения иных версий платформы MongoDB. Но в целом отличия в построении запросов в mondogb между версиями минимальны, имеет место довольно большая совместимость предудщеих версий с последующими
Документы вместо строк
Если реляционные базы данных хранят строки, то MongoDB хранит документы. В отличие от строк документы могут хранить сложную по структуре информацию. Документ можно представить как хранилище ключей и значений.
Ключ представляет простую метку, с которым ассоциировано определенный кусок данных.
Однако при всех различиях есть одна особенность, которая сближает MongoDB и реляционные базы данных. В реляционных СУБД встречается такое понятие как первичный ключ . Это понятие описывает некий столбец, который имеет уникальные значения. В MongoDB для каждого документа имеется уникальный идентификатор, который называется _id . И если явным образом не указать его значение, то MongoDB автоматически сгенерирует для него значение.
Каждому ключу сопоставляется определенное значение. Но здесь также надо учитывать одну особенность: если в реляционных базах есть четко очерченная структура, где есть поля, и если какое-то поле не имеет значение, ему (в зависимости от настроек конкретной бд) можно присвоить значение NULL . В MongoDB все иначе. Если какому-то ключу не сопоставлено значение, то этот ключ просто опускается в документе и не употребляется.
Коллекции
Если в традиционном мире SQL есть таблицы, то в мире MongoDB есть коллекции. И если в реляционных БД таблицы хранят однотипные жестко структурированные объекты, то в коллекции могут содержать самые разные объекты, имеющие различную структуру и различный набор свойств.
Репликация
Вся система MongoDB может представлять не только одну базу данных, которая располагается на одном физическом сервере. Функциональность MongoDB позволяет расположить несколько баз данных на нескольких физических серверах, и эти базы данных смогут легко обмениваться данными и сохранять целостность.
Система хранения данных в MongoDB представляет набор реплик. В этом наборе есть основной узел, а также может быть набор вторичных узлов. Все вторичные узлы сохраняют целостность и автоматически обновляются вместе с обновлением главного узла. И если основной узел по каким-то причинам выходит из строя, то один из вторичных узлов становится главным.
Формат данных в MongoDB
Одним из популярных стандартов обмена данными и их хранения является JSON (JavaScript Object Notation). JSON эффективно описывает сложные по структуре данные. Способ хранения данных в MongoDB в этом плане похож на JSON, хотя формально JSON не используется. Для хранения в MongoDB применяется формат, который называется BSON (БиСон) или сокращение от binary JSON.
BSON позволяет работать с данными быстрее: быстрее выполняется поиск и обработка. Хотя надо отметить, что BSON в отличие от хранения данных в формате JSON имеет небольшой недостаток: в целом данные в JSON-формате занимают меньше места, чем в формате BSON, с другой стороны, данный недостаток с лихвой окупается скоростью.
Кроссплатформенность
MongoDB написана на C++, поэтому ее легко портировать на самые разные платформы. MongoDB может быть развернута на платформах Windows, Linux, MacOS, Solaris. Можно также загрузить исходный код и самому скомпилировать MongoDB, но рекомендуется использовать библиотеки с офсайта.
Простота в использовании
Отсутствие жесткой схемы базы данных и в связи с этим потребности при малейшем изменении концепции хранения данных пересоздавать эту схему значительно облегчают работу с базами данных MongoDB и дальнейшим их масштабированием. Кроме того, экономится время разработчиков. Им больше не надо думать о пересоздании базы данных и тратить время на построение сложных запросов.
Но, даже учитывая все недостатки традиционных баз данных и достоинства MongoDB, важно понимать, что задачи бывают разные и методы их решения бывают разные. В какой-то ситуации MongoDB действительно улучшит производительность вашего приложения, например, если надо хранить сложные по структуре данные. В другой же ситуации лучше будет использовать традиционные реляционные базы данных. Кроме того, можно использовать смешенный подход: хранить один тип данных в MongoDB, а другой тип данных — в традиционных БД.
GridFS
Одной из проблем при работе с любыми системами баз данных является сохранение данных большого размера. Можно сохранять данные в файлах, используя различные языки программирования. Некоторые СУБД предлагают специальные типы данных для хранения бинарных данных в БД (например, BLOB в MySQL).
В отличие от реляционных СУБД MongoDB позволяет сохранять различные документы с различным набором данных, однако при этом размер документа ограничивается 16 мб. Но MongoDB предлагает решение — специальную технологию GridFS , которая позволяет хранить данные по размеру больше, чем 16 мб.
Система GridFS состоит из двух коллекций. В первой коллекции, которая называется files , хранятся имена файлов, а также их метаданные, например, размер. А в другой коллекции, которая называется chunks , в виде небольших сегментов хранятся данные файлов, обычно сегментами по 256 кб.
Для тестирования GridFS можно использовать специальную утилиту mongofiles , которая идет в пакете mongodb.
Источник: metanit.com