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

Любые подробные и конкретные причины для Почему MongoDB намного быстрее, чем SQL DB?

Хорошо, есть вопросы о Почему MongoDB так быстро

Я ценю эти ответы, однако они довольно общие. Да, я знаю:

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

Хорошо, я пишу этот вопрос только для того, чтобы узнать

  • Каковы подробные и конкретные причины для высокой производительности MongoDB?
  • Что делает точно SQL, но MongoDB не делает, поэтому он получает очень высокую производительность?
  • Если интервьюер (эксперт MongoDB и SQL) спрашивает вас "Why MongoDB is so fast", как бы вы ответили? Очевидно, что просто отвечать: "because MongoDB is noSQL" недостаточно.

Спасибо

4b9b3361

Ответ 1

Во-первых, сравните яблоки с яблоками: Чтение и запись с помощью MongoDB похожи на однократные чтения и записи по первичному ключу в таблице без некластеризованных индексов в РСУБД.

Итак, давайте сравним это: http://mysqlha.blogspot.de/2010/09/mysql-versus-mongodb-yet-another-silly.html

И получается, что разница в скорости в справедливом сравнении точно такой же примитивной операции невелика. На самом деле MySQL немного быстрее. Я бы сказал, что они эквивалентны.

Почему? Потому что на самом деле обе системы делают подобные вещи в этом конкретном тесте. Возвращение одной строки, поиск по первичному ключу, на самом деле не так много работает. Это очень быстрая операция. Я подозреваю, что накладные расходы на межпроцессные коммуникации являются значительной его частью.

Я предполагаю, что более настраиваемый код в MySQL перевешивает несколько менее систематические накладные расходы MongoDB (без логических блокировок и, возможно, некоторых других мелких вещей).

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


Если интервьюер сказал: "Нам не нужны документы или стили, нам просто нужна гораздо более быстрая база данных, как вы думаете, мы должны использовать MySQL или MongoDB?", что бы я ответил?

Я бы рекомендовал ненадолго игнорировать производительность и посмотреть на относительную силу двух систем. Такие вещи, как масштабирование (путь вверх) и репликация, напоминают MongoDB. Для MySQL существует намного больше функций, таких как богатые запросы, модели concurrency, улучшенная оснастка и зрелость и многое другое.

В принципе, вы можете торговать функциями для производительности. Готовы ли вы это сделать? Это выбор, который нельзя сделать вообще. Если вы выберете производительность любой ценой, подумайте над настройкой MySQL прежде, чем добавить другую технологию.


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

  • Клиент создает двоичную команду (тот же)
  • Клиент отправляет его через TCP (тот же)
  • Сервер анализирует команду (тот же)
  • Сервер обращается к плану запроса из кеша (только SQL, а не MongoDB, а не HandlerSocket)
  • Сервер запрашивает компонент B-Tree для доступа к строке (такой же)
  • Сервер принимает физическую блокировку readonly на пути B-Tree, ведущем к строке (той же)
  • Сервер принимает логическую блокировку в строке (только SQL, а не MongoDB, а не HandlerSocket)
  • Сервер сериализует строку и отправляет ее через TCP (тот же)
  • Клиент десериализует его (тот же)

Есть только два дополнительных шага для типичных SQL-баз RDBMS. Вот почему на самом деле нет разницы.

Ответ 2

В общем, MySQL и MongoDB очень похожи на "прочную" производительность записи на одной машине. Простые поиски ключей/значений почти одинаковы... если вы хотите использовать MySQL таким образом. Очевидно, что поддержка документов - это большая производительность и большая победа в производительности.

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

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

Я уже масштабировал приложения до и записывал код разделения на чтение и запись, распределял хэши для sharding, постоянно выполнял рестайлинг заданий и добавлял gzip в хранилища "документов" mysql. тьфу.

Это быстрее, потому что это просто и сфокусировано. Он разработан с учетом всего этого. Масштаб по товарному оборудованию является приоритетом. Приоритеты СУРБД совершенно разные.

Ответ 3

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

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