Микро-бенчмарк RocksDB server
В полноценном смысле то, что я тут хочу написать, конечно, бенчмарком не является. Но вполне способно дать понимание области применения RocksDB.
RocksDB — это довольно крутое хранилище, являющееся (на данный момент) встраиваемым решением. Главной фишкой RocksDB является то, что она рассчитана на использование на flash-накопителях, то есть на SSD-дисках.
Лично я давно ждал появления таких решений. Поскольку память всё ещё дорогая, а жёсткие диски медленные, использование SSD для хранения данных — очень логичный шаг.
Как я уже говорил, RocksDB — встраиваемое решение и не является сервером. Я честно ждал почти год, когда кто-нибудь напишет или хотя бы начнёт писать серверную обёртку над ней. Но то, что появилось за это время, по разным причинам категорически меня не устраивает.
Поэтому я написал собственную серверную обёртку: https://github.com/valmat/RocksServer. В настоящее время она вполне функциональна, протестирована и готова к работе. Но есть ещё моменты, требующие улучшения. Эти моменты никак не связаны с её пригодностью к использованию, поэтому ничто не мешает уже сейчас произвести замеры производительности.
Замеры я осуществлял с помощью идущего в комплекте с сервером драйвера для PHP. Во-первых, мне так было удобнее, а во-вторых, использовать я его в ближайшее время буду именно из PHP.
Итак, табличка.
MultiGet со случайными ключами.
Условия проведения эксперимента:
- В базе данных 1 000 000 ключей.
- Выбирается набор случайных ключей в случайном порядке.
- Кэш не используется. Прямо перед экспериментом я перезагрузил компьютер, чтобы полностью исключить возможность использования файлового кэша.
- Хранимые значения имеют длину 50 ±5 байт.
Количество ключей в выборке | SSD | HDD |
---|---|---|
50 | 4.7 ms | 131.3 ms |
300 | 12.6 ms | 2371.4 ms (~2s) |
1000 | 29.5 ms | 7918.4 ms (~8s) |
10 000 | 124.6 ms | 45229.5 ms (~45s) |
100 000 | 2346.6 ms | 51855.8 ms (~56s) |
Следует отметить, что после попадания ключей в кэш скорость выборки на HDD возрастает и приближается к скорости выборки на SSD.
Какие выводы можно сделать из таблички? RocksDB действительно очень быстрое хранилище и подходит для использования на SSD-дисках.
P.S. Сама RocksDB обладает очень богатыми возможностями. В настоящий момент я реализовал лишь базовый необходимый мне функционал. В дальнейшем, постепенно, я планирую наращивать функциональные возможности RocksServer.