Микро-бенчмарк 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.