Почему MongoDB так быстро - PullRequest
       0

Почему MongoDB так быстро

44 голосов
/ 04 марта 2011

Я показывал свои показатели производительности коллег по MongoDB по сравнению с SQL 2008, и хотя он считает, что MongoDB работает быстрее, он не понимает, насколько это возможно.Его логика заключалась в том, что SQL существует уже несколько десятилетий, и над ним работают одни из самых умных людей, и как может MongoDB;Относительно новый ребенок на блоке будет так лучше по производительности?Я не смог дать точный и технический ответ, и я надеялся, что вы, ребята, сможете помочь.

Ответы [ 9 ]

36 голосов
/ 04 марта 2011

MongoDB быстр, потому что его веб-масштаб!

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

31 голосов
/ 04 марта 2011

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

14 голосов
/ 04 марта 2011

SQL должен сделать довольно много, Mongo просто должен сбросить биты на диск (почти)

8 голосов
/ 04 марта 2011

Как уже упоминалось, MongoDB не создается и не должен использоваться так же, как база данных SQL.SQL (и другие реляционные базы данных) хранят реляционные данные, то есть данные в таблице X могут быть настроены так, чтобы иметь прямые отношения с информацией в таблице Y. MongoDB не имеет этой возможности и поэтому может отбрасыватьмного накладных расходов.Следовательно, почему MongoDB обычно используется для хранения списков, а не отношений.

Добавьте тот факт, что он пока не совсем совместим с ACID (хотя с момента своего первого появления он сделал большие шаги), и это большая частьразличий в скорости.

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

На практике нетранзакционная модель MongoDB имеет следующие последствия:

  • Нет откатов .Ваш код должен функционировать без откатов.Проверьте все программные условия перед выполнением первой операции записи в базу данных.Порядок операций записи так, чтобы самая важная операция выполнялась последней.
  • Явная блокировка .Ваш код может явно блокировать объекты при выполнении операций.Таким образом, прикладной программист имеет возможность обеспечить «сериализуемость», когда это необходимо.Функциональность блокировки будет доступна в поздней альфа / ранней бета-версии MongoDB.
  • Проверка базы данных при запуске .В случае аварийного завершения базы данных (редко), при запуске автоматически запускается процедура проверки базы данных (аналогично fschk).
5 голосов
/ 14 ноября 2013

Хотя другие ответы интересны, я бы добавил, что одной из причин, по которой MongoDB является «такой быстрой», по крайней мере в тестах, является write concern.

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

Раньше уровень по умолчанию был unacknowledged, что означает, что операция записи только что запущена, но драйвер не проверяет, успешно ли она выполнена.Это быстрее, но гораздо менее надежно.

Они изменили его примерно год назад на acknowledged.Но я полагаю, что большинство тестов по-прежнему используют режим «без подтверждения» для улучшения результатов.

Если вы хотите увидеть разницу в производительности, вы можете проверить в этой статье (немного староват, но все еще дает представление).

3 голосов
/ 22 июня 2015

MongoDB быстр, потому что:

  1. Не КИСЛОТА, а доступность имеет преимущество перед последовательностью.
  2. Асинхронная вставка и обновление: это означает, что MongoDB не вставляет данные в БД, как только обрабатывается запрос на вставку. То же самое относится и к обновлениям.
  3. Никаких накладных расходов на присоединения: когда говорят, что MongoDB - это база данных документов, они имеют в виду базу данных, которая содержит самодостаточные данные, и вся информация внедряется как настоящий документ.
2 голосов
/ 25 апреля 2015

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

На основе документов может быть не совсем ACID, но я полагаю, что MongoDB легче получить то, что вы хотите, просто получив весь документ, а не возиться со всеми объединениями в БД SQL, рискуя также некоторыми неудачными объединениями.

Извинения любым фанатам SQL.

1 голос
/ 28 октября 2015

MongoDb быстрее, потому что: 1. Нет транзакций; 2. Нет связи между таблицами;

Если вы попытаетесь сделать точно такую ​​же логику на сервере SQL, например: 1. Не используйте Select с замками; 2. Нет связи между таблицами; Это не будет таким большим разрывом в скорости между SQL Server и MongoDB. Только одно место определенно будет быстрее, писать и обновлять записи, потому что SQL выполняет вставку и обновление таблицы в очереди и в транзакции, в MondoDB это происходит асинхронно. В своих прогнозах я не смог получить больших различий в скорости между SQL SERVER и MongoDB, потому что бизнес-логика была очень похожа между двумя проектами. Реальный прирост скорости на MongoDb вы можете получить в аналитических проектах с данными о ставках или с большими механизмами управления контентом, такими как газеты, интернет-магазины и т. Д. Опять же, никакая оптимизация на MongoDB и хорошая оптимизация на SQL-сервере не могут сделать эти базы данных практически равными.

1 голос
/ 04 марта 2011

Mongo не совместим с ACID, поэтому ему не приходится иметь дело с почти таким же «бесполезным делом», чтобы убедиться, что то, что вы пытаетесь поместить в БД, может вернуться снова позже.

Если вы не против потерять некоторые функциональные возможности и, возможно, потерять данные в обмен на скорость, тогда Монго хорош. Если вам абсолютно необходимо гарантировать целостность данных и / или предъявлять сложные требования к объединению, избегайте систем типа Mongo, таких как чума.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...