Подтвердить что ты не робот

Почему бы не mongodb?

Недавно я впервые использовал MongoDB и нашел его исключительно простым в использовании и высокопроизводительным. Что приводит к моему вопросу - почему не MongoDB?

Предположим, что я внедряю приложение Q и A. Моим подходом было бы реализовать пользовательские данные в базе данных MySQL, а затем использовать MongoDB для хранения вопросов и ответов - одна коллекция хранит вопрос и все ответы.

Что-то не так с этим подходом?

4b9b3361

Ответ 1

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

MongoDB не подходит для приложений, которые нуждаются:

  • Многопользовательские транзакции: MongoDB поддерживает только транзакции ACID для одного документа.
  • SQL: SQL хорошо известен, и многие люди знают, как писать очень сложные запросы, чтобы делать много вещей. Эти знания передаются во множестве реализаций, где специфические для него запросы MongoDB.
  • Сильные ACID гарантируют: MongoDB допускает такие вещи, как несогласованные чтения, что хорошо в некоторых приложениях, но не во всех.
  • Традиционный BI: существует множество очень мощных инструментов, которые позволяют OLAP и другим сильным приложениям BI, и те, которые работают против традиционной базы данных SQL.

Ответ 2

MongoDB - блестящая база данных, и мне нравится ее использовать. Тем не менее, у него есть несколько ошибок, если вы пришли из мира SQL.

Помимо ACID и других вещей, которые хорошо документированы (и в других ответах тоже), эти вещи застали нас врасплох:

  • MongoDB ожидает, что у вас будет память. Много памяти. Если вы не можете поместить свой рабочий набор в память, вы можете забыть об этом. Это отличается от большинства реляционных БД, которые используют память только как кеш! Чтобы быть более конкретным: MongoDB использует оперативную память в качестве основного хранилища и "свопирует" ненужные части на диск (Mongo оставляет решение о том, какие части "заменяются" на ядро). Традиционные РСУБД работают наоборот: они используют диск в качестве основного хранилища и используют ОЗУ в качестве механизма кэширования. Так что в целом MongoDB использует больше оперативной памяти. Это само по себе не плохо, но, как следствие, "реальное" потребление ОЗУ трудно предсказать, что может привести к серьезному и неожиданному ухудшению производительности после того, как рабочий набор будет расти над пределом (трудно предсказать).

  • хранилище не сжимается автоматически при удалении записей. Пространство, которое выделяется на каждую коллекцию, будет выделено до тех пор, пока вы не будете repair DB или не сбросите коллекцию. И он выделяется в огромных кусках на уровне БД (файлы данных), которые затем выделяются в коллекции при необходимости (экстенты). Тем не менее внутри выделенного пространства коллекции документы, которые удаляются, освобождают место для других документов в одной коллекции. Это хорошее объяснение понятий: http://www.10gen.com/presentations/storage-engine-internals

  • в отличие от SQL, который анализируется на стороне сервера, в Mongo вы передаете структуры данных для запросов и функций CRUD. Следствием этого является то, что каждый драйвер предоставляет различный синтаксис, что немного раздражает. Например, PyMongo использует список кортежей вместо словаря (возможно, потому что dict в Python не сохраняет порядок ключей), чтобы указать, какие поля будут возвращены find(): (справедливости ради, это был, пожалуй, единственный нормальный способ для этого - но это следствие не использования строкового языка, такого как SQL)
    • оболочка MongoDB: db.test.find({}, {a:1})
    • PyMongo: db.find({}, fields=[(a,1,)]

Это не следует рассматривать как критику MongoDB - мне нравится использовать его, и он оказался надежным и эффективным инструментом. Но чтобы правильно использовать его, вам нужно узнать о его управлении пространством.

Ответ 3

Возможные минусы:

  • Вы работаете в организации, которая использовала только SQL-реляционные базы данных. У вас нет одобрения или поддержки для использования базы данных NoSQL.
  • Вы никогда не управляли кластером MongoDB; есть кривая обучения, как и со всеми технологиями.
  • Ваши данные действительно реляционные (например, у одного пользователя много Вопросов, у Вопроса много ответов), и вы упустили возможность.

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

Ответ 4

@johndodo при использовании памяти. На официальной странице часто задаваемых вопросов говорят, что:

Требуется ли MongoDB много оперативной памяти?

Не обязательно. Конечно, возможно запустить MongoDB на машине с небольшим количеством свободной ОЗУ. MongoDB автоматически использует все бесплатные память на компьютере в качестве кеша. Мониторы системных ресурсов показывают, что MongoDB использует много памяти, но его использование динамично. Если другой процесс внезапно нуждается в половине ОЗУ сервера, MongoDB даст кэш-память к другому процессу.

Технически подсистема виртуальной памяти операционных систем управляет Память MongoDBs. Это означает, что MongoDB будет использовать столько свободной памяти как это возможно, при необходимости заменяя диск. Развертывания с достаточной памятью для соответствия прикладным рабочим данным, установленным в ОЗУ, будет достигнуто наилучшее производительность.

Итак, я думаю, кривая обучения - это ответ. Чем лучше вы знаете технологию - тем лучше будет ваша система.

Ответ 5

Я работаю над несколькими системами на базе SQL DB, и после 3 лет работы mongodb (с Rong Mongoid Driver) у меня есть три основные причины.

  • Мне не нужно присоединяться к таблицам, поэтому оно быстрее. В большинстве случаев документ содержит все, что мне нужно, если нет, я извлекаю связанный документ - снова довольно быстро.
  • Я извлекаю документ один раз, затем сопоставляю массив /json для сбора данных и выполнения операций. Таким образом, я имею доступ к DB меньше и потому, что отображение/сбор происходит в памяти намного быстрее. Это становится еще более эффективным, когда я использую встроенные документы.
  • Я могу сделать клиенты легко и эффективно определять свои поля. Это не стоит пытаться использовать SQL DB.

Ответ 6

Я не могу найти причину, чтобы не помещать все данные из информации о пользователях. к q и a в MongoDB, за исключением одной практической причины:

В среде общего хостинга нелегко найти поставщика услуг, предлагающего хостинг MongoDB. В отличие от mySql, он становится стандартом плана хостинга.

Ответ 7

Добавление к другим комментариям; принятие решения о хранилище данных (SQL или NoSQL) может сильно зависеть от требований к репликации, которые у вас есть.

MongoDB следует за конфигурацией master-slave-slave-* (1 master, multiple slaves) MySQL-esque. Вы можете ТОЛЬКО писать мастеру.

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

В таких случаях серверы, такие как Cassandra, Riak, CouchDB, будут лучше в этих ситуациях.

Все, что сказано, если MySQL подходит для вашего приложения, и вы хотите работать с NoSQL, Монго - идеальное решение.

Ответ 8

При решении базы данных для моего проекта я слышал, что mongoDB свободен, тогда я думал, что почему не mongoDB?

Ну, просто чтобы быть уверенным, что я позвонил в службу поддержки клиентов MongoDB. Существуют три версии MongoDB в настоящее время.

  • Сервер сообщества
  • Профессиональный
  • Предприятие

Фактически Сервер сообщества бесплатный, а другие 2 - платные.

Я спросил парня -

Где я могу использовать сервер сообщества mongodb?

Ниже ответа, который я получил по электронной почте -

Сервер сообщества. Рекомендуемое использование - для среды разработки. Для производственных целей Требуется корпоративное предложение.

Перед использованием версии убедитесь в этом.

Надеюсь, это поможет вам:)