Как стать автором
Обновить

Комментарии 15

Отличную тему выбрали! Сравнение объектно-реляционных расширений классических СУБД и NoSQL MongoDB
Очень не хватает для полноты картины конфигурационных файлов (от них очень много зависит).

Такой разлет в обновлении, скорее всего, вызван разными гарантиями транзакций (записаны ли данные физически на диск после COMMIT?).
Специфических конфигураций ни для одной базы не было, все использовалось «из коробки».
Насчет записи данных на диск в тестах для update — я пробовал выполнить этот тест с использованием опции write concern j:true, чтобы убедиться, что операция попала в журнал (насколько я понимаю, это рекомендуемый способ управления гарантиями транзакций в mongodb). Это, конечно, замедлило выполнение теста, но все равно обновление происходило гораздо быстрее, чем в PostgreSQL или Mysql (этих данных на графиках сейчас нет).
Получается странное сравнение:

  • MySQL и PostgreSQL выполняют fsync (данные выживут после внезапного перезапуска сервера)
  • MongoDB не выполняет fsync (данные выживут после перезапуска Mongo)

По-хорошему надо либо отключить fsync у MySQL и PostgreSQL, либо включить у MongoDB.
Да, думаю, это будет полезно — постараюсь прогнать такие тесты и включить данные в графики.
Добавил графики для тестов с разным уровнем durability.
У вас в Mongo операции с fsync проходили?
Нет, единственное, что я пробовал изменить относительно дефолтного использования — это добавлял write concern j:true (данных с этой опцией на графиках сейчас нет)
тогда тесты не имеют смысла
Замечу, что помимо обновления и вставки здесь фигурируют тесты на выборку + итоговые размеры, они, надеюсь, даже при отсутствии fsync имеют смысл.
Да, это все в итоге включается во время исполнения запроса. В том числе поэтому данные тесты лишь грубая оценка производительности (хотя надо бы еще убедиться, что в других способах изменения нет подобных накладок).
Это не грубая оценка, а полный треш.
это все в итоге включается во время исполнения запроса
Для интереса сейчас замерил на коллекции 100к, выполнение команды через монгошел (с запуском без авторизации) ~50мс, выполнение этой же команды из python ~0.4мс, победит тот у кого шел быстрее.

Когда программисты будут запускать внешний бинарник для запросов к БД вместо использования встроенного драйвера, тогда данный бенчмарк можно будет и рассмотреть.
Обновил пост и код бенчмарков, теперь эти задержки исключаются (но они получилось достаточно незначительными, на 2-3 порядка меньше, чем основые величины).
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории