Почему все скептически относятся к MongoDB?

Добрый день.
Много вопросов встречаю типа "Что лучше выбрать для моего сайта/веб сервиса NoSQL или RDBMS?". Постоянно советует либо MySql, либо PostgreSQL. Все боятся использовать MongoDB как основную базу данных. Я не говорю, что Mongo это таблетка от всех недуг, но есть много задач, которые можно ей отдать, но вместо этого все бегут от нее к вышеуказанным бд.
Вопрос заключается в следующем. Почему все скептически относятся к MongoDB ?

UPD. Отредактировал вопрос.
  • Вопрос задан
  • 1512 просмотров
Решения вопроса 4
zoonman
@zoonman
⋆⋆⋆⋆⋆
Скептически мылят ретрограды, люди боящиеся всего нового и незнакомого.
У NoSQL есть свои проблемы и преимущества, нужно понимать, когда и как это использовать. Многие пытаются их использовать по-старинке, городят свои костыли для организации реляционной модели и потом удивляются, что их решение не работает. Монги придуманы для другого. Они хороши там, где нужно сохранять много относительно небольших структур данных и быстро их доставать. Причем это все должно хорошо масштабироваться. Например телефонный справочник на триллион номеров, который ну никак не помещается на одну машину, при этом в него постоянно кто-то записывает новые номера и к нему должны быть реплики в нескольких датацентрах. Плюс у вас должен быть полнотекстовый поиск по нескольким полям на нескольких языках.
Это реально сделать и на MySQL, но решение выглядит сложнее, но и у него есть свои плюсы. Например переименовать всех Василиев можно одним простым движением в виде редактирования одной записи. В Монге потребуется изменить все записи с Василиями.
У обоих решений есть и репликация, и шардинг и т.д. Монгу чуть проще настроить, только и всего.
Монга не подойдет тем, кому нужна четкая фиксация транзакций, потому что там целостность данных основана на потоке событий.
Вам нужно просто внимательно почитать по то, какие базы для чего использовать.
Ответ написан
@nirvimel
Во-первых, я не отношусь к NoSQL скептически. Я считаю, что у таких продуктов большое будущее на рынке. Потому, что для них существует огромная ниша, которую они только начинают занимать. В свое время PHP занял такую нишу в качестве массового языка для веб-разработки, хотя многие относились и относятся к нему скептически, и это даже мягко сказано.

Во-вторых, что касается проблем NoSQL. Его главная проблема - та задача, которую он пытается решить.
Итак, у нас был старый добрый RDBMS, которому приходилось исполнять сложные запросы, комбинировать данные из разных таблиц. Это и была причина его торможения. Поэтому перед ним ставили всякие redis, memcached и просто внутренние кеши приложения. И это решало проблему быстродействия.
Потом появились парни в розовых кедах и сказали: "Зачем такая сложная архитектура? Поменяем все это на ОДИН сервер, который будет хранить объемы как oracle и отдавать со скоростью memcached". Это решение выглядело как полностью аналогичное предыдущей схеме, но с меньшим количеством деталей. Аналитики и бизнес ухватились за это и возвели NoSQL на трон, а предыдущий стек технологий отправили в корзину. Все казалось замечательно. Но при этом упустили всего одну мелочь - данные в NoSQL хранятся не в Нормальной форме, и это неотъемлемое свойство технологии не возможно исправить.
Чем опасно хранение данных не в нормальной форме? Это начали понимать по мере разработки. Когда структура базы подогнана под запросы, эти данные выбирающие, и когда в процессе разработки возникает необходимость выбирать данные как-то по-другому, приходится создавать новые структуры, под новые запросы, то есть ДУБЛИРОВАТЬ ДАННЫЕ. Вот с этого момента эротический сон превращается в кошмар. Когда данные пишутся в одно место, то они тут же мгновенно (или не мгновенно?) должны быть отражены в другом месте. Если производить такую синхронизацию синхронно с записью, то возникают забытые проблемы с производительностью, если асинхронно - то возникают (совсем недавно забытые) проблемы с инвалидацией кешей. Но это - только начало. Следующий кошмар - контроль (ссылочной, например) целостности. Вся грязная работа, которой раньше занимался движок RDBMS, опять ложится на плечи прикладных кодеров. В итоге наступает момент, когда усложнять логику, контролирующую работу с базой (раньше о такой необходимости даже не слушали) становится дороже чем выбросить весь проект в корзину и переписать все обратно на нормальную RDBMS. И тогда приходит философское понимание того, почему эту классическую форму данных в науке называют НОРМАЛЬНОЙ.
Ответ написан
opium
@opium
Просто люблю качественно работать
все отлично относятся к монгодб, просто на реляционных данных глупо использовать не реляционную бд, ну если у вас данные четко реляционные и вы выбрали монгодб, то скорее всего вы идиот.
Ответ написан
@lega
Опять вам тут "скептические" отзывы наоставляли.

Можно много филосовских доводов привести, например, если бы у вас был-бы идеальный сервер с неограниченной RAM памятью, скоростью и стабильностью, то ваше приложение могло бы хранить все ваши данные в памяти/переменных (зачем скидывать в БД?), дак вот вы в своем приложении оперируете объектами, а не таблицами! Потому что так удобней (и быстрее - прямая ссылка на связанный объект вместо идентификатора например). И NoSQL - это какое-то отражение этого. А раскладывание по табличкам - это подход из 80х годов, для того что-бы выиграть памяти и скорости, потому что тогда были сервера дохлые.

Реляционные данные/не реляционные данный - разбрасывание терминами, попытка блеснуть умом?, - монга решает большинство задач, просто она решает их по другому, там нет проблем с ссылками, если нужны джойны (что не факт, возможно достаточно ссылок) или транзакции - можете попробовать ArangoDB, OrientDB...

Так же в Радио-Т'е (профессиональные) ведущие, в одном из выпусков, сделали "заключение": Монги хватает на 99% задач.
Поэтому если в вашем проекте где-то попадается тот 1%, то ненужно переводить весь проект на sql, просто сделайте эту задачу в sql, не трогая оставшуюся часть проекта.

В наше время это вообще проблема - попытка написать все на одном языке. Вместо того что-б ускорить какой-то кусок PHP на С++, они берут и конвертируют весь проект на С++, вместо того что-б только чат сделать на асинхронном фреймворке, они переводят весь проект/блог на асинхронный фреймворк и т.п.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
dimonchik2013
@dimonchik2013
non progredi est regredi
у Вас заголовок отличается от вопроса

1) NoSQL vs RDBMS - один
2) MongoDB для * мы Memcached, Redis, Aerospike, другие БД - другой

ответ примерно тут: habrahabr.ru/company/jelastic/blog/166845

есть статья, года 2012го, то ли от Percona то ли от MariaDB, где показано как их адаптировать под NoSQL и добиться тех же скоростей, расклад простой: отклбчаешь фичи SQL - получаешь скорость ))

по удобству SQL тоже не стоят на месте, в Мускуле добавили Json недавно, ускорили (заявляется на 30% рост производительности в 5.7 версии) и т.д.

ну а дальше просто: если по удобству одинаковы, то как они поведут при десятках миллионов записей и сопоставимом числе транзакий? Репликация, опять же? у Мускуля и Постгреса есть в этих вопросах длинный бэкграунд, а у Mongo?

Поэтому Mongo воспринимают как быстрое хранилище для некритичных данных, и используют на подхвате у классических RDBMS
Ответ написан
Goodilla
@Goodilla
Разработчик/архитектор веб приложений
На мой взгляд, каждой БД можно найти своё применение. Всё зависит от необходимости, возможностей систем баз данных, а также основных требований проекта. Первые две, из Вашего "списка" - привычные БД, верно... их многие и часто используют, они просты в логике и легки в "употреблении". Также есть Н-ое количество вещей, которые в MariaDB (Mongo DB) сделать нельзя, по-моему, трудности возникали с сортировкой и более сложными запросами по выборкам. Если меня не подводит память, то Mongo DB быстрее.

Почему не используют? Да, скорее всего Вы правы - это дело привычки для большинства "самоделкиных". Насчёт страха - не уверен, многие просто могут не знать что это за зверёк такой "Mongo"...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы