СУБД MongoDB Базы данных NoSQL


NoSQL - MongoDB

База данных NoSQL - MongoDB

Автор: Владимир Ткаченко

Источник: Обучение в интернет

Обзор СУБД

В чем суть DBMS NoSQL и их отличие от relational DBMS? Одна из лучших DBMS NoSQL - это система управления базами данных MongoDB. Какие бывают - СУБД MongoDB? Локальные и облачные решения СУБД MongoDB. Где применяется СУБД MongoDB? Современные технологии Web приложений и базы данных MongoDB. С чего начать изучение СУБД MongoDB? Все вопросы, связанные с базами данных MongoDB, будут рассмотрены подробно и доступно как в данной статье, так и в ее продолжении.

Известно, что базы данных (БД) являются современной формой организации, хранения и доступа к информации, поэтому в настоящее время уделяется огромное внимание обучению системам управления баз данных СУБД (DBMS) и средствам разработки БД. К основным моделям баз данных относятся: списки (плоские таблицы), реляционные базы данных, иерархические, сетевые структуры, объектно-ориентированные базы данных и документоориентированные модели баз данных.

Наибольшее распространение получили реляционные модели баз данных. Реляционная модель баз данных является совокупностью простейших двумерных таблиц – отношений (англ. relation), т.е. простейшая двумерная таблица определяется как отношение (множество однотипных записей, объединенных одной темой в двумерной таблице).

В соответствии с рейтингами последних лет к лидирующим моделям баз данных относятся реляционные СУБД (relational DBMS): Oracle Database, MySQL, Microsoft SQL Server, PostgreSQL и документоориентированная СУБД (document-oriented database) MongoDB. Следует отметить, что DBMS MongoDB относится к нереляционным СУБД NoSQL с новыми методами хранения данных и средствами доступа к ним.

В зависимости от модели базы данных к основным СУБД NoSQL (nosql-database.org/) относятся:

  • БД на основе пар «ключ - значение» (DynamoDB, Redis, Aerospike и др.)
  • Колоночно-ориентированные СУБД или column-oriented DBMS (Cassandra, Hypertable, ConcourseDB и др)
  • Документоориентированные СУБД (MongoDB, Azure DocumentDB, CouchDB и др.)
  • Графовые БД (Neo4j, InfoGrid, Bigdata и др.)
  • Базы данных XML (EMC Documentum xDB, eXist, Sedna и др.)

Если реляционную модель баз данных традиционно используют для оперативной обработки транзакций или в системах поддержки принятия решений, то модель NoSQL применяют для оперативной обработки данных. Технология NoSQL обеспечивает эффективное хранение и обработку огромных объемов неструктурированных данных, которые требуют высоких скоростей для выполнения операций чтения и записи.

Следует отметить, что базы данных NoSQL являются одной из технологий обработки Big data. Особенностью технологий NoSQL является неограниченное горизонтальное масштабирование и высокая производительность. Необходимо также отметить, что в некоторых реляционных СУБД, например, таких как PostgreSQL реализованы средства обработки неструктурированных данных в формате JSON.

Цель этой статьи - рассмотреть технологии и средства разработки Document Oriented БД MongoDB, которые относятся к NoSQL и в настоящее время являются широко востребованными при разработке Web-приложений на основе Node.js. Если традиционный стек технологий для построения веб-приложений - это LAMP (Linux, Apache, MySQL, PHP), то современный подход к построению веб-приложений основан на стеке технологий MEAN (Mongo, Express, Angular, Node).

СУБД MongoDB предлагает документоориентированную модель данных. Если в традиционных реляционных БД основными компонентами являются двумерные таблицы (каждой сущности или базовому типу информации назначается таблица) с записями (строками) и полями (столбцами), то в MongoDB - тематические коллекции (сущности), которые состоят из документов, включающих в себя набор текстовых полей в формате JSON, т.е. пар: ключ-значение ({"key":"value"}).

В процессе проектирования реляционной БД определяется ее структура (состав таблиц, их структура и логические связи). В реляционных БД таблицы хранят жестко структурированные и только определенного типы данные. Способ организации данных в реляционных БД (модель "сущность – связь") позволяет данные (записи) в одной таблице связывать с данными (записями) в других таблицах через уникальные идентификаторы (ключи) или ключевые поля. Схема базы данных определяет таблицы, поля в каждой таблице и отношения между ключевыми полями таблиц.

Схема данных SQL БД
Рис. 1. Схема реляционной базы данных

В MongoDB применяется бессхемная организация неструктурированных или слабоструктурированных данных, т.е. организация, не требующая описания схемы базы данных. Этот способ организации данных не предназначен для того, чтобы связывать документы с данными одной коллекции с документами, содержащими данные, другой коллекции через ключевые поля. В MongoDB нет собственных средств создания отношений между коллекциями и документами.

Документоориентированная СУБД MongoDB предназначена для хранения данных в документах коллекций в формате JSON (как обычный текст), которые не имеют четкой структуры и предназначены для хранения любого типа данных. Такой формат и организация хранения данных в СУБД MongoDB обеспечивает оперативную обработку данных, их запись и вывод результатов. Таким образом, MongoDB отлично подходит для работы с нереляционными данными.

Отсюда следует, что MongoDB хорошо работает с наборами данных (коллекциями и документами), которые не связаны между собой, и ее можно использовать для создания Web приложений, обеспечивающих высокую производительность и неограниченное горизонтальное масштабирование коллекций данных.

Схема БД MongoDB
Рис. 2. Структура базы данных MongoDB: Databases-Сollections-Documents-Fields {"key":"value"}

В процессе создания каждому документу (ObjectID) назначается "_id" уникальный идентификатор документа, который предназначен для автоматической сортировки документов. СУБД MongoDB предназначена для работы с нереляционными данными, например, для работы с базой данных Website, которая может включать в себя следующие коллекции (сущности): статьи, новости, фото, архив и т.д.

Если создание relational DBMS начинается с создания структуры таблиц и установки связей между таблицами, а затем заполнение таблиц и формирование SQL запросов или инструкций SQL, то в MongoDB сначала создают новую базу данных и задают ее имя, затем при добавлении в нее данных она автоматически создает коллекцию и объект (документ) с описанием добавляемого объекта в формате JSON. Для хранения данных в MongoDB применяется формат, который называется BSON, сокращение от binary JSON.

В СУБД MongoDB для создания, чтения, обновления, удаления объектов применяются операции CRUD (create, read, update, delete).

Технология работы СУБД MongoDB

DBMS MongoDB является бесплатной с открытым исходным кодом, который опубликован под лицензией GNU Affero General Public License, центр загрузки: https://www.mongodb.com/download-center?initial=true&from=dcv2#community.

Центр загрузки базы данных MongoDB
Рис. 3. Скриншот, в котором отображается центр загрузки базы данных официального сайта

Для ознакомления с технологией работы DBMS MongoDB необходимо с центра загрузки официального сайта скачать одну из ее версий, которую можно установить на ПК. Как следует из центра загрузки в настоящее время под Windows 64-bit x64 предлагается текущая версия 4.0.3. У меня установлена версия 3.2.12 под 32 разрядную ОС Win 10.

Для установки СУБД необходимо создать директорию mongodb на диске C (C:\mongodb) и директорию data с вложенной в нее директории db (C:\data\db). В процессе инсталляции в окне выбора типа настроек выберите «Custom», в окне «Custom Setup» в качестве места установки укажите директорию mongodb.

Для организации работы между MongoDB и приложением, написанным на одном из языков программирования, необходимо установить соответствующие драйверы. Но на первом этапе мы ознакомимся с возможностями этой СУБД, выполняя операции для управления БД через оболочку mongo.exe (mongo shell). Оболочка mongo shell - это интерактивный интерфейс JavaScript для MongoDB (клиент Mongo с интерфейсом командной строки), оболочку mongo можно использовать для выполнения различных операций, например, выборка (select), обновления данных (update) и т.д.

Сначала надо в командной строке запустить сервер баз данных, который находится в папке bin и называется mongod:
C:\mongodb>bin\mongod

Сервер баз данных MongoDB
Рис. 4. Скриншот, в котором отображается процесс запуска сервера баз данных

По умолчанию серверу баз данных назначается стандартнный порт 27017 и, как следует из скриншота (Рис. 4), после успешного запуска сервера баз данных на localhost он находится в режиме ожидания соединения к TCP-порту 27017 (TCP 127.0.0.1:27017 - это видно из списка текущих сетевых соединений при выполнении C:\>netstat -a). Далее надо запустить оболочку mongo.exe (mongo shell), для этого надо запустить новый экземпляр командной строки и в ней ввести команду:
C:\mongodb>bin\mongo

Оболочка БД MongoDB
Рис. 5. Скриншот, в котором отображается процесс запуска оболочки базы данных

Выражение "connecting to:test", которое отображается в скриншоте (Рис. 5), является следствием того, что для целей тестирования в MongoDB автоматически устанавливается база данных "test" и по умолчанию выполняется подключение к ней. Для проверки работоспособности БД в "test" можно ввести какие-нибудь данные в формате JSON и осуществить проверку достоверности ввода этих данных командой db.users.find().

Далее можно создать новую базу данных, для этого применяется команда use, кроме того, эта команда используется для выбора текущей базы данных из уже имеющихся БД. Для создания новой БД, например "lessons-tva", введем в консоль следующую команду:
> use lessons-tva
Теперь в качестве текущей БД будет установлена "lessons-tva". Названия всех имеющихся БД в СУБД MongoDB можно проверить с помощью команды show dbs.

Проверку статистики по текущей базе данных, можно осуществить командой:
db.stats()

Database MongoDB statistics
Рис. 6. Скриншот, в котором отображается статистика базы данных

В текущей БД "lessons-tva" создадим коллекции: archive, eBooks и articles, в которых создадим документы и проверим выполнение следующих операций: создание (create), вставка данных (insert), обновление (update) и удаление (delete). Следует отметить, что в MongoDB в качестве языка запросов используется JavaScript и JSON-структуры. Итак, сначала создадим коллекцию archive с помощью команды create:
> db.createCollection(‘archive’)
{ “ok” :1}

Затем вставляем документы в коллекцию archive с помощью операции insert и проверяем выполнение этой команды с помощью функции find():

Коллекция archive с документами
Рис. 7. Скриншот, в котором отображается коллекция archive с документами

Теперь создаем одновременно коллекцию ebooks и в ней документ "СУБД MS Access 2003 - это просто!", затем добавляем еще один документ "Microsoft Word 2007 - это просто!" и проверяем их выполнение:

Коллекция ebooks с документами
Рис. 8. Скриншот, в котором отображается коллекция ebooks с документами

В коллекцию ebooks можно добавить еще один документ, например, db.ebooks.save({title : ‘Word 2016’})

Далее можно создать коллекцию articles и в ней два документа, сначала "Web applications", затем "Internet software":

Коллекция articles с документами
Рис. 9. Скриншот, в котором отображается коллекция articles с документами

Чтобы убедиться, что коллекции и документы введены в БД, можно сформировать запрос на выборку с помощью функции find(), например:
> db.ebooks.find()

Запрос на проверку введения коллекции ebooks и документов
Рис. 10. Скриншот, в котором отображается коллекция ebooks и документы

Проверим выполнение операции обновление (update), например, db.collection.updateOne(), которая заменит один из существующих документов в коллекции "СУБД MS Access 2003 - это просто!" на "СУБД MS Access 2003":

Запрос на обновление документа в коллекции ebooks
Рис. 11. Скриншот, в котором отображается обновление документа в коллекции ebooks

С операцией update() могут использоваться многие операторы, например $set - обновление поля (значение одного из его ключей), $unset - удаление поля и т.д.

Проверим выполнение операции удаление (delete). Операция удаления позволяют удалять документы из коллекции. MongoDB предоставляет следующие методы для удаления документов из коллекции db.collection.deleteOne() - для одного документа и db.collection.deleteMany() – для многих документов:

Запрос на удаление delete коллекции ebooks и документов
Рис. 12. Скриншот, в котором отображается удаление документа из коллекции ebooks

Следует отметить, что для удаления коллекции и всех входящих в нее документов, можно использовать команду remove db.ebooks.remove({}):

Запрос на удаление remove коллекции ebooks и документов
Рис. 13. Скриншот, в котором отображается удаление коллекции ebooks и документов

В дальнейшем будет рассмотрена технология подключения приложений Node.js к базам данных MongoDB и методы управления базами данными.