Справочник от Автор24
Поделись лекцией за скидку на Автор24

Что такое база данных MongoDB и в чем ее особенности

  • 👀 548 просмотров
  • 📌 511 загрузок
Выбери формат для чтения
Загружаем конспект в формате docx
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Что такое база данных MongoDB и в чем ее особенности» docx
Лекция 2. Что такое база данных MongoDB и в чем ее особенности MongoDB — документоориентированная система управления базами данных с открытым исходным кодом. Для хранения данных используется JSON-подобный формат. Эта СУБД отличается высокой доступностью, масштабируемостью и безопасностью. Главные особенности MongoDB: 1. Это кроссплатформенная документоориентированная база данных NoSQL с открытым исходным кодом. 2. Она не требует описания схемы таблиц, как в реляционных БД. Данные хранятся в виде коллекций и документов. 3. Между коллекциями нет сложных соединений типа JOIN, как между таблицами реляционных БД. Обычно соединение производится при сохранении данных путем объединения документов. 4. Данные хранятся в формате BSON (бинарные JSON-подобные документы). 5. У коллекций не обязательно должна быть схожая структура. У одного документа может быть один набор полей, в то время как у другого документа — совершенно другой (как тип, так и количество полей). В одном документе могут быть поля разных типов данных, данные не нужно приводить к одному типу. Основное преимущество MongoDB заключается в том, что она может хранить любые данные, но эти данные должны быть в формате JSON. Пример документа в MongoDB На схеме показано, как выглядит документ в MongoDB: MongoDB добавляет поле _id с уникальным значением для идентификации документа в коллекции. Это поле обязательно для заполнения в каждом документе. Оно похоже на первичный ключ документа. Если вы создаете новый документ без поля _id, то MongoDB автоматически создаст его и добавит 24-значный уникальный идентификатор к каждому документу в коллекции. Обратите внимание: сами данные заказа (OrderID, Product и Quantity) в MongoDB фактически хранятся как встроенный документ в самой коллекции, а в реляционных СУБД они обычно хранятся в отдельной таблице. Это одно из ключевых особенностей модели данных MongoDB. Структура хранилища MongoDB СУБД MongoDB полагается на концепции базы данных, коллекций и документов. Рассмотрим основные термины, а для лучшего понимания сравним их с терминами из языка структурированных запросов (SQL): 1. База данных — это физический контейнер для коллекций. 2. Коллекция — группа документов MongoDB. В терминологии SQL это соответствует таблице. 3. Документ — запись в коллекции MongoDB, набор пар ключ-значение. В терминологии SQL это похоже на строку в таблице базы данных. 4. Поле — ключ в документе. В терминологии SQL похоже на столбец в таблице. 5. Встроенный документ — в терминологии SQL похоже на создание связей между несколькими таблицами, по которым разбросаны данные, что делается операциями JOIN. Зачем использовать MongoDB: преимущества этой СУБД Ниже приведены несколько причин, по которым стоит использовать MongoDB: 1. Документоориентированная база — сохранение данных в формате документов вместо формата реляционного типа, это делает MongoDB очень гибкой и адаптируемой к бизнес-требованиям. Возможность хранения разных типов данных особенно важна при работе с большими данными, которые собираются из разных источников и не ложатся в одну структуру. 2. Специальные запросы — MongoDB поддерживает поиск по полям, диапазонные запросы и поиск по регулярным выражениям. Могут быть сделаны запросы для возврата определенных полей в документах. 3. Индексация — можно создать индексы для улучшения производительности поиска в MongoDB. Любое поле в документе может быть проиндексировано. Это обеспечивает высокую скорость работы СУБД. 4. Репликация — эта СУБД может обеспечить высокую доступность с помощью наборов реплик. Набор реплик состоит из двух или более экземпляров MongoDB. Каждая реплика набора может выступать в роли первичной или вторичной. Первичная реплика — главный сервер, который взаимодействует с клиентом и выполняет все операции чтения/записи. Вторичные реплики сохраняют копию данных первичной реплики с помощью встроенной репликации. Если с первичной репликой что-то случилось, происходит автоматическое переключение на вторичную реплику, затем она становится основным сервером. 5. Балансировка нагрузки — MongoDB использует концепцию шардинга для горизонтального масштабирования с помощью разделения данных между несколькими экземплярами БД. Она может работать на нескольких серверах, балансируя нагрузку и/или дублируя данные, чтобы поддерживать работоспособность системы в случае аппаратного сбоя. 6. Возможность развернуть в облаке — вы получаете готовую к работе, оптимально сконфигурированную, масштабируемую и управляемую базу данных по запросу за две минуты. 7. Доступность — MongoDB поддерживает все популярные языки программирования, ее можно использовать бесплатно как open source решение. В облаке Mail.ru Cloud Solutions реализована техническая поддержка, хостинг и обновление СУБД MongoDB до актуальных версий. Доступна помощь экспертов Mail.ru в миграции данных и настройке баз данных. Недостатки MongoDB Вот основные минусы MongoDB: 1. Эта база данных не настолько соответствует требованиям ACID (атомарность, согласованность, изолированность и устойчивость), как реляционные базы данных. 2. Транзакции с использованием MongoDB являются сложными 3. В MongoDB нет положений о хранимых процедурах или функциях, поэтому не получится реализовать какую-либо бизнес-логику на уровне базы данных, что можно сделать в реляционных БД. Когда стоит и не стоит использовать MongoDB MongoDB часто выбирают, когда нужна масштабируемая база данных, в настоящее время ее используют в качестве хранилища внутренних данных многие организации, такие как IBM, Twitter, Zendesk, Forbes, Facebook, Google и другие. Примеры, когда MongoDB подходит для проекта: 1. Каталог товаров в электронной коммерции. 2. Блоги и системы управления контентом, особенно те, где много контента, в том числе видео и изображений. 3. Аналитика в реальном времени и высокоскоростное журналирование, кэширование данных и кейсов, когда важна высокая масштабируемость системы. 4. Хранение данных датчиков и устройств. 5. Работа с большими данными для машинного обучения и исследований в ритейле и других отраслях. 6. Ведение данных на основе местоположения, то есть геопространственных данных. 7. Социальные сети, новостные форумы и другие похожие сценарии. 8. Слабосвязанные данные без четкой схемы хранения. 9. Стартапы и развертывание новых проектов, где структура данных пока неизвестна. С переходом парадигмы в сторону динамического контента, спрос на базу данных 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 Files\MongoDB\" ^ ADDLOCAL="MonitoringTools,ImportExportTools,MiscellaneousTools" Приведенные выше команды приведут вас в соответствующий каталог и выполнят установку в указанном месте. После установки вам необходимо настроить путь к хранилищу базы данных по умолчанию для MongoDB. Команда ниже поможет вам настроить > md \db\data Приведенная выше команда создает папку db/data в каталоге, на который в данный момент указывает командная строка. В случае, если вам нужно заново настроить базу данных, вы можете использовать mongod.exe с аргументом dbpath, как показано ниже: >"C:\Program Files\MongoDB\bin\mongod.exe" --dbpath d:\tutorial\mongodb\data Установка на Linux Как и в случае установки на MacOS, MongoDB для Linux-версий также доступна в виде архивированной группы двоичных файлов. Процесс установки MongoDB довольно похож. • Переместить двоичные файлы в нужное место • Откройте терминал в папке • Выполните приведенную ниже команду с желаемым расположением БД $ ./mongod --dbpath /path-to-desired-directory/ Создание первой коллекции MongoDB хранит данные в форме документов JSON. Группа такой документации все вместе известна как коллекция в MongoDB. Таким образом, коллекция аналогична таблице в реляционной базе данных, а документ аналогичен записи. Для хранения документов нам сначала нужно создать коллекцию. Интересной особенностью базы данных NoSQL является то, что в отличие от базы данных SQL вам не нужно указывать имена столбцов или типы данных в ней. Первым шагом к созданию коллекции является создание базы данных. Чтобы создать базу данных и подключиться к ней с помощью командной строки, выполните приведенную ниже команду из домашнего каталога установки MongoDB. $ ./bin/mongo tutorial Эта команда используется для запуска подключения к базе данных и одновременного подключения к учебной базе данных. В журнале будет показано несколько строк, указывающих, что командная строка подключена к базе данных MongoDB. Пример ответа в командной строке показан ниже, чтобы дать вам лучшее представление об этом. • Чтобы создать коллекцию, выполните следующую команду: $ > db.createCollection('firstCollection'); Вот как создается пустая коллекция. Следующим шагом является вставка данных и некоторая обработка записей с использованием командной строки MongoDB. Вставка документа в коллекцию Как обсуждалось выше, можно вставить практически любой JSON в каждую коллекцию MongoDB. Давайте начнем со вставки первого документа JSON в коллекцию firstCollection, созданную выше. > db.firstCollection.insertOne({name:'John',skill:'MongoDB'}); Приведенная выше команда вставляет один документ JSON в firstCollection . То же самое можно проверить с помощью команды, показанной ниже: > db.firstCollection.find(); Приведенная выше команда имеет многократное использование в зависимости от варианта find() функции. Если аргументы не указаны, как в случае с приведенной выше командой, она выбирает все доступные документы из коллекции. Вы можете вставить еще одну запись и попробовать то же самое. При этом выходные данные вышеуказанной команды будут аналогичны показанным ниже: > db.firstCollection.find(); { "_id" : ObjectId("5b043a32c29a7184535e783a"), "name" : "John", "skill" : "MongoDB" } { "_id" : ObjectId("5b05b4f0c29a7184535e783b"), "name" : "Itgap", "skill" : "Java,MongoDB,NodeJS" } Как видно, показаны две доступные записи. Функция find()может быть легко использована для фильтрации документов на основе определенных параметров. Давайте отфильтруем документ, используя атрибут name. Процесс фильтрации прост, и это можно понять из команды ниже: db.firstCollection.find({name:'Itgap'}); { "_id" : ObjectId("5b043a32c29a7184535e783a"), "name" : "Itgap", "skill" : "Java,MongoDB,NodeJS" } Фильтр также можно использовать с несколькими атрибутами в JSON. Хотя к запросу можно добавить любое количество параметров, ограничением этого подхода является то, что он соответствует только точному значению атрибутов. Фильтрация записей с использованием регулярных выражений (Regex) Чтобы выполнить MongoDB эквивалент MySQL- сочетанием like, MongoDB использует регулярное выражение. Регулярное выражение- это серия символов, образующих шаблон для соответствия. Литералы регулярного выражения похожи на те, которые используются в Javascript. Для текущей коллекции мы попытаемся извлечь данные, сопоставив шаблон для атрибута skill. Команда ниже извлечет две записи, поскольку обе содержат строку MongoDB. > db.firstCollection.find({skill:/.*MongoDB.*/}); { "_id" : ObjectId("5b043a32c29a7184535e783a"), "name" : "John", "skill" : "MongoDB" } { "_id" : ObjectId("5b05b4f0c29a7184535e783b"), "name" : "Itgap", "skill" : "Java,MongoDB,NodeJS" } > db.firstCollection.find({skill:/.*Java.*/}); { "_id" : ObjectId("5b05b4f0c29a7184535e783b"), "name" : "Itgap", "skill" : "Java,MongoDB,NodeJS" } Приведенный выше код отображает результат двух разных строк в форме регулярного выражения. Первый запрос извлекает список документа, в котором атрибут skill содержит ключевое слово MongoDB, а другой - только людей, имеющих опыт работы с Java. Следующая проблема в запросах, основанных на критериях, - это запрос с условием OR или AND. Сложные запросы в MongoDB Как видно из приведенных выше команд, MongoDB, работает с форматом JSON. Процесс объединения условий также зависит от самого JSON. MongoDB предоставляет такие операторы, как $or, $and, а также $not. Давайте попробуем получить список документов, в которых атрибут name содержит John  или атрибут skill содержит Java. > db.firstCollection.find({$or: [{name:'John'},{skill:/.*Java.*/}]}); { "_id" : ObjectId("5b043a32c29a7184535e783a"), "name" : "John", "skill" : "MongoDB" } { "_id" : ObjectId("5b05b4f0c29a7184535e783b"), "name" : "Itgap", "skill" : "Java,MongoDB,NodeJS" } Точно так же можно использовать оператор $and с массивом условий JSON, как показано выше. Для следующего набора операторов нам нужно будет создать еще одну коллекцию и добавить в нее несколько записей, используя команды ниже. > db.createCollection('studentmarks'); { "ok" : 1 } > db.studentmarks.insertMany([{name:'A',marks:20},{name:'B',marks:25},{name:'C',marks:22},{name:'D',marks:30}]); { "acknowledged" : true, "insertedIds" : [ ObjectId("5b06e7b5c29a7184535e783c"), ObjectId("5b06e7b5c29a7184535e783d"), ObjectId("5b06e7b5c29a7184535e783e"), ObjectId("5b06e7b5c29a7184535e783f") ] } Следующий набор операторов, которые мы будем использовать, это операторы сравнения в запросе. Для сравнения значений с использованием таких критериев, как меньше или больше или не равно, мы используем соответствующие операторы в передаваемом нами значении. Пример получения списка студентов с оценками выше 22 показан ниже. db.studentmarks.find({marks:{$gt:22}}); { "_id" : ObjectId("5b06e7b5c29a7184535e783d"), "name" : "B", "marks" : 25 } { "_id" : ObjectId("5b06e7b5c29a7184535e783f"), "name" : "D", "marks" : 30 } Оператор $gt указывает больше, чем в критериях. Таким образом, документы с отметками более 22 отображаются. Точно так же есть другие операторы, которые можно использовать. Они перечислены ниже. Оператор Назначение Пример $eq Если значение равно {marks:{$eq:20}} $gt Если значение больше {marks: {$gt:20}} $lt Если значение меньше {marks: {$lt:20}} $gte Если значение больше или равно {marks:{$gte:22}} $lte Если значение меньше или равно {marks:{$lte:22}} $ne Если значение не равно {marks:{$ne:22}} $in Если значение равно одному из значений массива {marks:{$in:[20,22]}} $nin Если значение не равно одному из значений массива {marks:{$nin:[22,25]}} Графический интерфейс (GUI) в MongoDB В обсуждении выше мы использовали командную строку для выполнения наших запросов в MongoDB. Использование командной строки может быть сложной задачей, когда речь идет о сложных запросах и большем наборе данных. Чтобы упростить просмотр данных и выполнение запросов, MongoDB предоставляет вам отличный инструмент с графическим интерфейсом, который называется MongoDB Compass. MongoDB Compass можно легко загрузить с сайта загрузки MongoDB. После того, как вы загрузили и установили MongoDB Compass, запустите приложение, и вас будет приветствовать экран, похожий на экран, показанный ниже. Учитывая, что у вас запущен и работает сервер MongoDB, нажмите кнопку CONNECT со сведениями по умолчанию. Вы должны войти в систему и увидеть список доступных баз данных. Щелкните по базе данных учебника, чтобы проверить список коллекций в учебной базе данных. Как показано ниже, он отображает список доступных коллекций в учебной базе данных. При щелчке по коллекции отображается список документов с необходимыми элементами управления для фильтрации записей с использованием JSON, а также средство для просмотра документов в формате JSON или табличном формате согласно вашему удобству. Графический интерфейс также упрощает добавление документа. Все, что вам нужно сделать, это нажать кнопку INSERT DOCUMENT на экране, показанном ниже. Он открывает небольшое диалоговое окно с запросом деталей документа с автоматически сгенерированным идентификатором документа. Графический интерфейс упрощает множество операций, которые могут быть затруднены при использовании интерфейса командной строки MongoDB. Мы описали суть NoSQL с помощью множества примеров и поняли, как документы отличаются от обычной записи реляционной базы данных. Практические задания Упражнение 1. Как следует отредактировать запрос db.teachers.update({name:'Василий'}, {$inc: {salary:5000}}), чтобы разрешить вставку документа, если его не существует в коллекции? Ответ:  (1) db.teachers.update({name:'Василий'}, {$inc: {salary:5000}},false,false,true)   (2) db.teachers.update({name:'Василий'}, {$inc: {salary:5000}},false)   (3) db.teachers.update({name:'Василий'}, {$inc: {salary:5000}},false,true)   (4) db.teachers.update({name:'Василий'}, {$inc: {salary:5000}},true)  Упражнение 2. Сколько найденных документов обновляет метод update по умолчанию? Ответ:  (1) все    (2) 1   (3) 50   (4) 100  Упражнение 3. Как следует отредактировать запрос db.teachers.update({name:'Василий'}, {$inc: {salary:5000}}), чтобы обновить все найденные документы? Ответ:  (1) db.teachers.update({name:'Василий'}, {$inc: {salary:5000}},false,false,true)   (2) db.teachers.update({name:'Василий'}, {$inc: {salary:5000}},false)   (3) db.teachers.update({name:'Василий'}, {$inc: {salary:5000}},false,true)   (4) db.teachers.update({name:'Василий'}, {$inc: {salary:5000}},true)  Упражнение 4. По какому полю рекомендуется делать выборку документов? Ответ:  (1) _id    (2) name   (3) age   (4) salary  Упражнение 5. Выберите неверные утверждения Ответ:  (1) без использования оператора $set при обновлении документ будет заменен    (2) метод update имеет 2 обязательных аргумента   (3) по умолчанию все найденные документы обновляются методом update   (4) выборка документов производится только по одному полю  Упражнение 6. Модификатор $set используется для: Ответ:  (1) удаления всех документов   (2) для изменения нескольких полей   (3) для изменения всего документа  Упражнение 7. Метод update выполняет: Ответ:  (1) поиск документа или документов в коллекции   (2) удаление документа или документов в коллекции   (3) изменение или замену полей в документе   (4) создание нового документа  Упражнение 8. Установите правильное соответствие между модификаторами и их значением. Ответ:  (1) увеличивает поле на заданное значение $inc   (2) умножает значние поля на указанное число $mul   (3) удаляет определенное поле $unset   (4) изменяет имя поля $rename  Упражнение 9. В коллекцию unicorns(единороги) добавлены следующие документы: db.unicorns.insert({name: 'Horny', dob: new Date(1992,2,13,7,47), loves: ['carrot','papaya'], weight: 600, gender: 'm', vampires: 63}); db.unicorns.insert({name: 'Aurora', dob: new Date(1991, 0, 24, 13, 0), loves: ['carrot', 'grape'], weight: 450, gender: 'f', vampires: 43}); db.unicorns.insert({name: 'Unicrom', dob: new Date(1973, 1, 9, 22, 10), loves: ['energon', 'redbull'], weight: 984, gender: 'm', vampires: 182}); db.unicorns.insert({name: 'Roooooodles', dob: new Date(1979, 7, 18, 18, 44), loves: ['apple'], weight: 575, gender: 'm', vampires: 99}); db.unicorns.insert({name: 'Solnara', dob: new Date(1985, 6, 4, 2, 1), loves:['apple', 'carrot', 'chocolate'], weight:550, gender:'f', vampires:80}); db.unicorns.insert({name:'Kenny', dob: new Date(1997, 6, 1, 10, 42), loves: ['grape', 'lemon'], weight: 690, gender: 'm', vampires: 39}); db.unicorns.insert({name: 'Raleigh', dob: new Date(2005, 4, 3, 0, 57), loves: ['apple', 'sugar'], weight: 421, gender: 'm', vampires: 2}); db.unicorns.insert({name: 'Leia', dob: new Date(2001, 9, 8, 14, 53), loves: ['apple', 'watermelon'], weight: 601, gender: 'f', vampires: 33}); db.unicorns.insert({name: 'Pilot', dob: new Date(1997, 2, 1, 5, 3), loves: ['apple', 'watermelon'], weight: 650, gender: 'm', vampires: 54}); db.unicorns.insert({name: 'Nimue', dob: new Date(1999, 11, 20, 16, 15), loves: ['grape', 'carrot'], weight: 540, gender: 'f'}); db.unicorns.insert({name: 'Dunx', dob: new Date(1976, 6, 18, 18, 18), loves: ['grape', 'watermelon'], weight: 704, gender: 'm', vampires: 165}); Требуется для всех единорогов мужского пола, на чьем счету не менее 54 убитых вампиров, добавить информацию о том, что им нравится еще и овес, и поэтому они потолстели на 10 фунтов. Правильная команда консоли MongoDB: Ответ:  (1) db.unicorns.update ({gender: 'm', vampires: {$gt: 54}}, {$push: {loves: 'oat'}, $inc: {weight: +10}}, false, true)   (2) db.unicorns.update ({gender: 'm', vampires: {$gte: 54}}, {$set: {loves: 'oat'}, $inc: {weight: +10}}, false, true)   (3) db.unicorns.update ({gender: 'm', vampires: {$gte: 54}}, {$push: {loves: 'oat'}, $inc: {weight: +10}}, false, true)   (4) db.unicorns.update ({gender: 'm', vampires: {$gte: 54}}, {$push: {loves: 'oat'}, $inc: {weight: +10}}, true, false)  Упражнение 10. Результатом выполнения операции db.orders.count() будет Ответ:  (1) возращение количества всех документов в коллекции orders   (2) запуск счетчика вызовов коллекции orders   (3) возращение количества всех полей в документе 
«Что такое база данных MongoDB и в чем ее особенности» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ

Тебе могут подойти лекции

Смотреть все 70 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot