Когда использовать MongoDB - PullRequest
       11

Когда использовать MongoDB

45 голосов
/ 13 февраля 2011

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

Я буду работать с моим веб-сервером и базой данных в одном окне (пока).

При этом я ищу производительность и эффективность.

Основная часть моего приложения будет загружать статьи блога. Используя СУБД (MySQL), я сделаю 6 запросов (2 из которых являются присоединениями), просто чтобы загрузить одну страницу статьи блога.

select blog
select blog_album
select blog_tags
select blog_notes
select blog_comments (join with users)
select blog_author_participants (join with users)

Тем не менее, с помощью MongoDB я могу отменить нормализацию и свести 6 таблиц в 2 таблицы / коллекции и свести к минимуму мои запросы к потенциально только одному 1 запросу

users
blogs
    ->blog_album
    ->blog_tags        
    ->blog_notes
    ->blog_comments
    ->blog_author_participants

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

1.) Будет ли хорошим сценарием использовать MongoDB?

2.) Вы выигрываете в производительности от использования MongoDB только при масштабировании вне одного сервера?

3.) Существуют ли риски долговечности при использовании MongoDB? Я слышал, что существует вероятность потери данных при выполнении вставок - поскольку вставка записывается сначала в память, а затем в базу данных.

4.) Должно ли это помешать мне использовать MongoDB в производстве?

Ответы [ 5 ]

31 голосов
/ 13 февраля 2011

Вы бы использовали MongoDB, когда у вас есть вариант использования, который соответствует его сильным сторонам.

Вам нужно хранилище документов без схемы?Нет, у вас есть стабильная схема.

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

Вам нужна карта / сокращение обработки данных?Не для чего-то вроде блога.

Так почему же вы об этом даже думаете?

22 голосов
/ 13 февраля 2011

Тем не менее, с MongoDB я могу отменить нормализацию и свести 6 таблиц в 2 таблицы / коллекции и свести к минимуму мои запросы к одному запросу

Но вы можете легко запросить MySQLдля 6 таблиц информации, относящейся к одному сообщению в блоге с одним правильно созданным оператором SQL.

однако место на жестком диске дешевле, чем ЦП / серверы.

Еслипроизводительность и масштабирование являются приоритетом, тогда вам нужно будет иметь достаточно ОЗУ, чтобы вместить все в основную память, и достаточное количество ядер ЦП для выполнения запросов.Требуется массив RAID 10 корпоративного уровня, не поймите меня неправильно, но как только программное обеспечение вашей базы данных (MongoDB или MySQL) будет сканировать индекс, который не может вписаться в основную память, в которой вы будете находиться в миреболи, принимая большую активную базу данных.:)

Мне нравится MongoDB, но я думаю, что его сильной стороной является карта / уменьшение и ориентация на документы.Вам не требуется ни одна из этих функций.MySQL проверен временем в крупномасштабных развертываниях и поддерживает разделение (но я бы сказал, что ваша база данных должна быть порядка 50-100 ГБ, прежде чем вы сможете получить существенный выигрыш от разделения по сравнению с одним (плюс пассивное резервное копирование) сервером стонн (64 ГБ +) ОЗУ. Я бы также сказал, что если производительность действительно важна, то MySQL будет предпочтительнее, поскольку вы будете иметь полный контроль над вашими индексами.

Это не означает, что MongoDB невеликпроизводительность, но его место, вероятно, не обслуживает блоги. Ваша забота о вставках также действительна. MongoDB не является системой ACID . Google транзакции в обеих системах и сравнение.

12 голосов
/ 06 января 2013

Вот хорошее объяснение: http://mod.erni.st/nosql-if-only-it-was-that-easy/

Последний абзац суммирует его:

На чем я буду строить свое следующее приложение?Вероятно, Postgres.Буду ли я использовать NoSQL?Может быть.Я мог бы также использовать Hadoop и Hive.Я мог бы хранить все в простых файлах.Может быть, я начну взламывать Маглева.Я буду использовать все, что лучше для работы.Если мне понадобятся отчеты, я не буду использовать NoSQL.Если мне понадобится кэширование, я, вероятно, буду использовать Tokyo Tyrant.Если мне понадобится ACIDity, я не буду использовать NoSQL.Если мне понадобится куча фишек, я буду использовать Redis.Если мне нужны транзакции, я буду использовать Postgres.Если у меня будет тонна одного типа документов, я, вероятно, буду использовать Mongo.Если бы мне нужно было писать 1 миллиард объектов в день, я бы, вероятно, использовал Волдеморта.Если мне нужен полнотекстовый поиск, я бы, вероятно, использовал Solr.Если мне нужен полнотекстовый поиск изменчивых данных, я бы, вероятно, использовал Sphinx.

7 голосов
/ 13 февраля 2011

NoSQL против RDBMS: яблоки и апельсины?

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

NoSQL определенно имеет свое применение. Но это определенно не ответ на все вопросы. Основным преимуществом NoSQL является легко изменяемая модель данных.

5 голосов
/ 14 марта 2016

Преимущества использования mongodb (согласно Moshe Kaplan, опубликованному в dzone статье )

  1. Схема без схемы
  2. Масштабируемость в управлении байтами данных Tera
  3. Быстрая репликацияНабор с функцией высокой доступности
  4. Sharding обеспечивает линейный и масштабируемый рост без превышения бюджета
  5. Поддержка высокой нагрузки записи
  6. Использование локальности данных для обработки запросов

MongoDB соответствует Consistency & Partitioning требованиям в теории CAP (согласованность, доступность и разбиение)

Related SEвопросы:

Каковы преимущества использования бессхемовой базы данных, такой как MongoDB, по сравнению с реляционной базой данных?

Когда выполнять Redis?Когда в MongoDB?

...