Прежде чем заняться MongoDB, я искал разницу между MongoDB и MySQL/SQLite3. Они очень разные, MongoDB — это нереляционная база данных без схемы. Еще одним важным фактором является то, что данные хранятся в формате, подобном JSON.

Node.js и MongoDB очень хорошо работают вместе, потому что вы, по сути, работаете с объектом JSON. JSON также становится стандартным форматом для веб-API, поэтому эти две технологии набирают популярность.

При работе с MongoDB я использовал Mongoose, который является ODM (инструментом моделирования объектов). MongoDB имеет гибкую схему, которая допускает вариативность между различными документами в одной коллекции. Эта гибкость может быть очень полезной, например, по мере развития использования базы данных с течением времени. Но эта гибкость не означает, что нельзя отказаться от некоторых проверок безопасности, таких как проверка типа и диапазона.

Смоделируйте пользователя, указав его свойства в схеме мангуста.

var userSchema = new mongoose.Schema({
      name: {
        first: String,
        last: { type: String, trim: true }
      },
      age: { type: Number, min: 0 }
    });

Это простая схема Mongoose для объекта User. У него есть имя, состоящее из последней и первой строк, и возраст, который не может быть меньше нуля. Последнее имя обрезается из-за лишних начальных и конечных пробелов. Эти проверки выполняются при создании новых объектов, и, если они терпят неудачу, возникает ошибка, которая может быть перехвачена вашим кодом.

Я использовал уникальный валидатор, который не позволит дублировать значения в API. Что приведет к ошибке при попытке создать запись с тем же значением, когда POSTing приведет к ошибке, которая отправляется в обещании.

Плюсы

  • Простота масштабирования MongoDB поддерживает масштабирование операций чтения и записи. Ваше приложение легко масштабировать по горизонтали, добавляя тысячи узлов, и иметь возможность реагировать на миллионы операций в секунду с очень большим набором данных.
  • Гибкая модель данных документа. Модель данных документа MongoDB позволяет создавать более гибкие конструкции, поскольку нет необходимости преобразовывать или сопоставлять объекты вашего приложения с объектом базы данных, как это делается в реляционных базах данных (без несоответствия импеданса). Поскольку в MongoDB меньше схемы, легче изменять структуру данных на лету, просто добавляя любые поля в любое время.
  • Поддержка облака.AWS позволяет настроить инфраструктуру для поддержки развертывания MongoDB гибким, масштабируемым и экономичным способом в облаке AWS. Это поможет вам создать кластер MongoDB, автоматизировав задачи настройки и развертывания.
  • Время безотказной работы базы данных.Добавление или изменение вашего документа (строк) не приведет к остановке сервера, поскольку они не являются миграциями или схемой.
  • Производительность.MongoDB поощряет денормализацию данных в единый документ, что обеспечивает высокую производительность. Если ваши данные не соответствуют модели данных документа, производительность может снизиться. Но тогда вы выбрали не ту базу данных.

Минусы

  • Отношения. MongoDB не подходит для реляционных данных, так как соединения не поддерживаются. Если данные так сильно связаны, это снизит производительность или усложнит код. Всегда не рекомендуется использовать MongoDB для случаев использования, когда вы хотите смоделировать связанные данные, а затем выполнить сложные запросы с интенсивным соединением. Моделирование связанных данных также может привести к большому дублированию данных.
  • Размер данных. Размер данных обычно выше из-за, например, каждый документ имеет имена полей, хранящиеся в нем
  • Транзакции — поддержка транзакций не поддерживается. Связать банковские переводы и т. д. Некоторые атомарные операции поддерживаются на уровне одного документа.

Заключение

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