@matios
Technical Team Lead

Какова реальная сфера применения MongoDb?

Всем привет. Я немного отстал от "модных и молодежных" технологий и решил наверстать упущенное. Сейчас вот разбираюсь с MongoDb и пытаюсь понять для себя где я могу это применить.
В интернете приводятся в основном примеры с блогом. Но, если я правильно понял суть монги, то это вообще не ее ниша. Поскольку, по моему скромному мнению, блог должен писаться с использованием реляционной БД.
Ведь в блоге есть автор, у которого есть статьи, которые в свою очередь связаны с категориями, тегами и т.д. А еще у статей есть комментарии. Получается, что связей становится очень много.
Как правило при выводе статьи на странице мы указываем практически все ее связи (никнейм автора, теги, категории, комментарии с никнеймами авторов и т.д.).
Если хранить это в монге в отдельных коллекциях, и при каждом запросе все это собирать кучей запросов, то зачем вообще тогда использовать монгу с таким количеством реляций ведь для этих целей больше подойдет реляционная БД. Разве я не прав?

По скольку весь мой многолетний опыт связан именно с реляциями, мне достаточно трудно придумать реальную сферу применения монги. Единственное, что приходит на ум это:
1. Логирование действий пользователя на сайте (тут как правило всего одна реляция, к тому же мы всегда ищем по userId)
2. Микросервисы. Когда основное приложение генерирует какой-то набор данных, кладет его в монгу, а дальше микросервис их оттуда забирает и делает то, что нужно, например конвертирует файл с указанными настройками. Делал нечто подомное с использованием DynamoDb (по сути та же монга, только от амазона).
3. Так же, тут, на тостере встретил пример про мед. карты пациентов, когда в них записываются разного рода анализы и показания с различных аппаратов.

Вот и встает вопрос, где еще можно применить монгу? Меня не интересуют ответы в стиле "Там, где мало реляционных данных и документы не сильно связаны" и "Там, где у каждого документа может быть только 5-6 общих колонок, а остальные могут быть разными" или "Там, где нужна масштабируемость". Меня интересуют именно реальные и живые примеры, которые встречаются на практике.
  • Вопрос задан
  • 3179 просмотров
Пригласить эксперта
Ответы на вопрос 6
@lega
Монга перекрывает 80-90% функционала sql-баз если рассмартивать средний проект, но дополнительно дает бо'льшую скорость работы, скорость и гибкость разработки, ну и масштабирование из коробки.
А от хейтеров вы осбо хорошего и не услышите ;-)

Ведь в блоге есть автор, у которого есть статьи, которые в свою очередь связаны с категориями, тегами и т.д. А еще у статей есть комментарии.
Категории, теги, да и сам автор может быть уже на клиенте, особенно если это веб-приложение, в этом случае реляции не обязательно подгружать, таким образом идет экономия поиска/чтения из базы и меньше трафика для передачи клиенту - т.е. выше производительность.
Так же автор может быть продублирован в документе (завсисит от задачи) и на крайний случай есть lookup и подобные способы.
Комментарии так же могут быть сохранены в самом документе, таким образом вы читаете из базы всего 1 документ, а не тысячу, что увеличивает скорость "на порядки".

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

Вообщем если нужна гибкость и скорость - то попробуйте монгу.
Ответ написан
@Gvald
Кодю
Про пример с кучей запросов - lookup, много запросов делать не придется.
Из личного, на монге легко прототипировать, по ходу песни менять коллекции, связи и прочее.
В штатах часто делают сервисы про магазины и услуги, в монге есть специальные типы данных для хранения координат и поиску ближайшего, в радиусе и т.д.
Для блогов я бы взял лучше ES.
Из плюсов ещё можно отметить удобнейший драйвер из коробки на js, орм не нужна.
Логирование так же отлично подойдёт.
Ну и не забываем, что monga отлично масштабируется горизонтально, разные политики реплик позволяют весьма и весьма существенно увеличить предельную нагрузку малыми силами.

В свою очередь, хочу заметить, что с sql базами работал почти совсем мало, пробелов много, очень, но работать с ними проще, делать запросы на sql сильно легче, в монге той же можно заукуриться оптимизируя запросы.

Если идти дальше в NoSQL, есть разные подходы для реализации хранения данных, в монге это документ, в apache casandra - это ключ-значение, к примеру, у всего свои плюсы и минусы, писать их тут не буду, легко гуглится. Но и sql и nosql dbs выбирать нужно из соображений, что нужно бизнесу и очень часто в крупных проектах сейчас используются комбинации разных баз.
Ответ написан
xPomaHx
@xPomaHx
1vs9
Выбор бд зависит не от того что вы будете хранить, а от того какие запросы будут туда.
Ответ написан
Комментировать
@grinat
Она на рест ложиться хорошо, но главная фича это схема лесс и горизонтальное масштабирование из коробки. Там не нужны миграции, и можно как угодно изголятся с данными, вкупе с нетипизированным языком навроде js, это убойное сочетание, которое буквально за дни позволяет запустить полноценный прототип продукта. Nodejs+express+mongo это ядерная бомба, которыми стартап может взорвать рынок и легко пережить большую нагрузку в случае успеха. А в кровавом интерпрайзе я однажды абстракциями которые накидал за пару часов, с помощью тройки указанной выше, временно закрыл большую дырень в продукте(там по сути нужны были тупые crud'ы но для овердохриллион сущностей с кучей атрибутов), пока бакэнд не нагнал запоздание в сроках.
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
гы-гы
вы сами ответили в п.2

сейчас же "эпоха биг-дата" - RDBMS хорошо безусловно, но - Вы alter table моментальный научились делать или как?
Монга преимущественно для складирования, да хоть бы и кеширования (хотя там варианты с аэроспайком на первых местах, но на любителя)
для транзакций, конечно, реляционные никто не отменял
Ответ написан
@funny_falcon
Как минимум пара маркетплейсов использует mongodb.

Современная mongodb отличается надежной репликацией и фейловером, а также работающим шардингом. Когда база не влезает не то что на один сервер, а живет на сотне серверов (правда, с трехкратной репликацией), это начинает играть значение.

Какая еще распространенная опенсорс база из коробки, без сторонних костылей, позволяет такое развернуть?
Ответ написан
Ваш ответ на вопрос

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

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