Я показывал свои тесты производительности для коллег MongoDB и SQL 2008, и, по его мнению, MongoDB работает быстрее, он не понимает, как это возможно. Его логика заключалась в том, что SQL существует уже много десятилетий, и на нем работают самые умные люди, и как может MongoDB; относительно новый ребенок на блоке будет настолько высок в производительности? Я не мог действительно дать солидный и технический ответ, и я надеялся, что вы, ребята, сможете помочь.
Почему MongoDB так быстро
Ответ 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-сервере не могут сделать эти базы почти равными.