The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Выпуск компактной встраиваемой СУБД libmdbx 0.9.1"
Отправлено erthink, 30-Сен-20 23:51 
Как-то кто-то просил сравнить производительность libmdbx, LMDB и sqlite.

Для этого в GNUMakefile в ветке devel теперь доступна цель "bench-triplet". Чтобы это работало нужно рядом с libmdbx клонировать репозиторий ioarena, сконфигурировать с поддержкой требуемых драйверов СУБД и собрать (предварительно установив sqlite и т.д.).
Остальные подробности бенчмарка см внутри [[https://github.com/erthink/libmdbx/blob/devel/GNUmakefile#L424 GNUMakefile]] и описании [[https://github.com/pmwkaa/ioarena ioarena]]. На всякий - сам по себе бенчмарк не чистит данные от предыдущих прогонов.

Так вот, ради интереса сделал пару прогонов для сравнения. В результатах ниже для каждого кейса смотреть стоит только на первую строку (ибо в драйвере sqlite остальное не реализовано).

Получается:

1) sqlite медленнее примерно в 20 раз в CRUD операциях в no-sync режиме (данные пишутся на диск лениво, при системном сбое вы теряете БД). Такой бенчмарк оценивает "собственную" скорость СУБД почти без привязки к I/O (диск нас почти не сдерживает). Я прогонял на 25.000.000 итерациях.

$ NN=25000000 BENCH_CRUD_MODE=nosync make bench-triplet
LD_LIBRARY_PATH="./:${LD_LIBRARY_PATH}" ../ioarena/@BUILD/src/ioarena -D mdbx -B crud -m nosync -n 25000000 | tee bench-mdbx_25000000.txt | grep throughput && LD_LIBRARY_PATH="./:${LD_LIBRARY_PATH}" ../ioarena/@BUILD/src/ioarena -D mdbx -B get,iterate -m nosync -r 4 -n 25000000 | tee -a bench-mdbx_25000000.txt | grep throughput || mv -f bench-mdbx_25000000.txt bench-mdbx_25000000.txt.error
throughput: 203.882Kops/s
throughput:  44.168Mops/s
throughput:   3.765Mops/s
LD_LIBRARY_PATH="./:${LD_LIBRARY_PATH}" ../ioarena/@BUILD/src/ioarena -D lmdb -B crud -m nosync -n 25000000 | tee bench-lmdb_25000000.txt | grep throughput && LD_LIBRARY_PATH="./:${LD_LIBRARY_PATH}" ../ioarena/@BUILD/src/ioarena -D lmdb -B get,iterate -m sync -r 4 -n 25000000 | tee -a bench-lmdb_25000000.txt | grep throughput || mv -f bench-lmdb_25000000.txt bench-lmdb_25000000.txt.error
throughput: 187.228Kops/s
throughput:  45.762Mops/s
throughput:   3.853Mops/s
LD_LIBRARY_PATH="./:${LD_LIBRARY_PATH}" ../ioarena/@BUILD/src/ioarena -D sqlite3 -B crud -m nosync -n 25000000 | tee bench-sqlite3_25000000.txt | grep throughput && LD_LIBRARY_PATH="./:${LD_LIBRARY_PATH}" ../ioarena/@BUILD/src/ioarena -D sqlite3 -B get,iterate -m sync -r 4 -n 25000000 | tee -a bench-sqlite3_25000000.txt | grep throughput || mv -f bench-sqlite3_25000000.txt bench-sqlite3_25000000.txt.error
throughput:   9.599Kops/s


2) sqlite медленнее примерно в 2-3 раза в CRUD операциях в sync режиме (данные записываются на диск при коммите каждой транзакции, допускается использование WAL, при системном сбое вы ничего не теряете). Такой бенчмарк оценивает "наблюдаемую" скорость СУБД с привязкой к I/O-производительности конкретного диска (тут мы в неё упираемся). Я прогонял на 10.000 итерациях.

$ NN=10000 BENCH_CRUD_MODE=sync make bench-triplet
LD_LIBRARY_PATH="./:${LD_LIBRARY_PATH}" ../ioarena/@BUILD/src/ioarena -D mdbx -B crud -m sync -n 10000 | tee bench-mdbx_10000.txt | grep throughput && LD_LIBRARY_PATH="./:${LD_LIBRARY_PATH}" ../ioarena/@BUILD/src/ioarena -D mdbx -B get,iterate -m sync -r 4 -n 10000 | tee -a bench-mdbx_10000.txt | grep throughput || mv -f bench-mdbx_10000.txt bench-mdbx_10000.txt.error
throughput:  80.578 ops/s
throughput:   5.902Mops/s
throughput:   3.053Mops/s
LD_LIBRARY_PATH="./:${LD_LIBRARY_PATH}" ../ioarena/@BUILD/src/ioarena -D lmdb -B crud -m sync -n 10000 | tee bench-lmdb_10000.txt | grep throughput && LD_LIBRARY_PATH="./:${LD_LIBRARY_PATH}" ../ioarena/@BUILD/src/ioarena -D lmdb -B get,iterate -m sync -r 4 -n 10000 | tee -a bench-lmdb_10000.txt | grep throughput || mv -f bench-lmdb_10000.txt bench-lmdb_10000.txt.error
throughput:  80.146 ops/s
throughput:   4.247Mops/s
throughput:   2.644Mops/s
LD_LIBRARY_PATH="./:${LD_LIBRARY_PATH}" ../ioarena/@BUILD/src/ioarena -D sqlite3 -B crud -m sync -n 10000 | tee bench-sqlite3_10000.txt | grep throughput && LD_LIBRARY_PATH="./:${LD_LIBRARY_PATH}" ../ioarena/@BUILD/src/ioarena -D sqlite3 -B get,iterate -m sync -r 4 -n 10000 | tee -a bench-sqlite3_10000.txt | grep throughput || mv -f bench-sqlite3_10000.txt bench-sqlite3_10000.txt.error
throughput:  33.919 ops/s

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

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру