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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

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

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

  • Отказов нет. Ваш код должен работать без откатов. Перед выполнением первой базы данных проверьте все программные условия запись. Закажите свои операции записи так, чтобы важная операция происходит последней.
  • Явная блокировка. При выполнении операций ваш код может явным образом блокировать объекты. Таким образом, прикладной программист имеет возможность обеспечить "сериализуемость", когда это необходимо. Блокировка функциональность будет доступна в позднем альфа/раннем бета-релизе MongoDB.
  • Проверка базы данных при запуске. Если ненормальная база данных заканчивается (редко), процедура проверки базы данных будет автоматически запускаться при запуске (аналогично fschk).

Ответ 5

В то время как другие ответы интересны, я бы добавил, что одна из причин, по которой MongoDB "настолько быстр", по крайней мере в тестах, - это write concern.

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

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

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

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

Ответ 6

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

  • Для ACID и доступности предпочтение отдается непротиворечивости.
  • Асинхронная вставка и обновление: что это значит, MongoDB не вставляет данные в БД, как только обрабатывается запрос вставки. То же самое касается обновлений.
  • Нет. Накладные расходы: когда они говорят, что MongoDB - это база данных документов, то, что они означают, это база данных, которая содержит данные, которые самодостаточны, и вся информация встроена, как реальный документ.

Ответ 7

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

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

Ответ 8

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

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

Извинения для любых вентиляторов с твердым корпусом SQL.

Ответ 9

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

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