2015-10-10 2 views
2

Я смотрел много видеороликов и руководств по MongoDB и Mongoose, и, хотя я думаю, что Mongoose делает это очень хорошо, разве это не противоречит гибкости, которую предлагает хранилище данных NoSql? Это среда без схемы.Не является ли мангуст противоречащим nosql?

Что делать, если я хочу добавить новое свойство или массив в документ? Я должен правильно обновить схему Mongoose? Это кажется контр-интуитивным для всей точки гибкого хранилища документов.

Если я хочу, чтобы мое приложение было более гибким, не является ли Mongoose неправильным выбором для моего приложения?

ответ

4

Отказ от ответственности: Я использую Mongoose около 2 лет в очень крупном заявке на предприятие и использую монго в течение еще одного года в дополнение к этому pre-mongoose.

Документов упомянуть лицо

Давай это, написание MongoDB проверки, литьи и бизнес-логику шаблонной является сопротивлением. Вот почему мы написали Мангуста.

Это заявление трудно оценить, если вы не прошли через боль.

Вот мечта: ваше приложение идеально подходит, и вы точно храните то, что вам нужно, в одной коллекции. Вы можете легко загрузить данные или получить их. Он очень хорошо вписывается в конвейер linux и в основном работает!

Я считаю, что реальность такова, что мы часто недооцениваем, что наши данные не менее слегка реляционные и последствия, которые имеют. Большинство приложений будут обрабатывать Mongo/NoSQL в качестве де-нормированного хранилища данных: более быструю и простую (использовать) базу данных, в которую вы можете быстро вставлять полные графики объектов и читать их. Это невероятно проста в использовании по сравнению с SQL + ORM. Некоторое время я был в ужасе.

Однако, как развивается ваше приложение, маленькие вещи начинают усложняться ...

Для того, чтобы сохранить свои внедренные данные из других коллекций в синхронизации, вам нужно будет справиться с этим на уровне приложений. Это означает, что всякий раз, когда вы сохраняете вещь A, вам может понадобиться обновить вещи B и C где-то еще. Пример: комментарии пользователей: вы хотите встроить основные пользовательские объекты с каждым комментарием.

С течением времени определение вещей A, B и C медленно меняется и развивается по мере роста вашего приложения.

Объедините это со свободно типизированным языком, и очень легко случайно сохранить пустую строку вместо нулевого или null вместо undefined. Это лучший случай. Обычно эти небольшие небольшие ошибки, которые вы делаете, пойманы и вызывают ошибку. Теперь они будут сохранены в вашей базе данных навсегда, без вашего ведома, что вы даже поскользнулись. Пока ваше приложение не сработает, потому что ваши данные ошибочны. После того, как вы исправите несколько из них, вы начнете программировать очень защитно. Небольшие изменения теперь тяжелые и имеют более высокий риск.

В то время как вы можете, безусловно, свернуть свой собственный (ничего), добавив небольшую защитную сетку между кодом приложения и вашей базой данных, всегда хорошая идея. Приятно знать, что столбец идентификатора всегда означает определенную вещь. Или что когда что-то будет сохранено, вы гарантированно проведете проверки X, Y и Z.

Или, когда вы меняете свое имя пользователя, оно фактически обновляет ваши комментарии.

Валидация, построитель запросов, перехватывание до и после сохранения, популяции и другие положительные эффекты, которые предоставляет Mongoose, избавят вас от большой боли.

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

+0

Ваши комментарии очень действительны, и я согласен и ценю их, но позволяет ли это ваше приложение быть гибким? Можете ли вы вставить документ Customer с именем и адресом для клиента A, а затем включить Age для клиента B? Я предполагаю, что единственный способ сделать это - включить определение возраста в исходную схему. Но если вы хотите добавить необязательное свойство в документ после того, как документы уже существуют, нарушит ли он существующие документы? Я просто пытаюсь понять этот сценарий. –

+0

Mongoose очень гибкий, да. Все поля по умолчанию необязательны и требуются только при их маркировке. В вашем примере возраст клиента A будет просто неопределен (он не будет присутствовать в документе) после его загрузки. –

Смежные вопросы