Повышает ли использование nosql (скажем, mongodb) продуктивность разработки?

В настоящее время я разрабатываю от 3 до 4 приложений Spring Roo в год с помощью Hibernate и MySQL. Здесь, в Stackoverflow, было указано, что реляционные базы данных не совсем подходят для типичного объектно-ориентированного веб-приложения.

Если ваша БД 3NF и вы не выполняете никаких объединений (вы просто выбираете кучу таблиц и собираете все объекты вместе, то же самое, что делает большинство людей в веб-приложении), MongoDB, вероятно, надерет вам задницу.

Этому есть разные причины. Одним из них является производительность, поскольку объекты отображаются в реляционную схему («объединения» и т. д.). Повысит ли использование MongoDB или CouchDB производительность разработки при том же уровне знаний, что и при использовании MySQL?


person Roland Kofler    schedule 23.09.2011    source источник
comment
Почему реляционные базы данных не подходят для веб-приложений? Если вы сделаете это приложение настольным приложением, оно вдруг станет нормальным?   -  person duffymo    schedule 23.09.2011
comment
Я согласен с комментариями Дейва выше. Я не уверен, что именно вы подразумеваете под производительностью выше. Означает ли это возможность быстрее разрабатывать приложение или вы говорите о производительности?   -  person Ashkan Aryan    schedule 23.09.2011
comment
производительность никогда не производительность, но я отредактирую и уточню. Под веб-приложением я подразумеваю типичный стек Java для веб-приложений, также поясню   -  person Roland Kofler    schedule 23.09.2011
comment
Я хотел бы увидеть сообщение SO, в котором говорится, что базы данных NoSQL лучше всего подходят для стеков веб-приложений Java.   -  person bhagyas    schedule 23.09.2011
comment
бхагьи вам подают с цитатой   -  person Roland Kofler    schedule 23.09.2011


Ответы (1)


Я думаю, что это действительно зависит от веб-приложения. Нереляционные базы данных (NoSQL) преуспевают там, где вы либо

  • Не нужна схема (хотите иметь возможность хранить разные типы данных в одной таблице) и/или
  • Не создавайте слишком сложных отношений между объектами.

NoSQL, безусловно, может помочь быстрее начать работу, потому что вы можете просто добавлять вещи, как хотите, но с другой стороны, когда все становится сложнее, иногда вам хотеть немного более принудительной организации. Внешние ключи — это то, чего мне очень не хватает при работе с Mongo, просто возможность (используя ORM) переходить от одного объекта к связанному или их набору — это здорово. (Да, во многих базах данных NoSQL вы можете хранить документы, но в в какой-то момент вам нужно использовать для чего-то отдельную таблицу.)

Я настоятельно рекомендую NoSQL для веб-сайта в стиле брошюры, где клиент просто вводит текстовые поля, или сайта в стиле твиттера, где в основном вы храните много данных одного типа с несколькими атрибутами. Но если вы собираетесь создавать CMS с изменениями, рабочим процессом и т. д., вам понадобится возможность иметь явные отношения в SQL.

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

Но попробуйте MongoDB или CouchDB и почувствуйте это, таким образом у вас будет лучшее понимание того, когда что использовать. (Мы используем оба на моей работе (не одновременно!) в зависимости от проекта)

person Dave    schedule 23.09.2011
comment
Поскольку Spring Roo автоматически создает мою схему во время ранней разработки, как вы думаете, есть ли у MongoDB преимущество в производительности? - person Roland Kofler; 23.09.2011
comment
+1, хотя отношения документов не следует сравнивать с отношениями СУБД. - person jgauffin; 23.09.2011
comment
Я не думаю, что есть преимущество в производительности вообще. SQL и NoSQL — это совершенно разные подходы, которые приводят вас к совершенно другой архитектуре программного обеспечения. Сравнение двух архитектур с точки зрения производительности возможно только в том случае, если один и тот же человек/команда пишет одно и то же приложение дважды, используя оба подхода, И забывая все, что было изучено в первый раз. Другими словами, если вы скажете любому менеджеру: давайте сделаем это NoSQL, потому что тогда мы будем быстрее, это полная ерунда. - person Angel O'Sphere; 23.09.2011
comment
Кроме того: ему абсолютно нечего делать, если ваше Приложение является веб-приложением, распределенным приложением или монолитным настольным приложением. Единственное, что имеет значение, — это требования ACID/непротиворечивости, репликация, скорость записи и чтения и объем данных для хранения, отказоустойчивость и т. д. - person Angel O'Sphere; 23.09.2011