Команда разработчиков баз данных Facebook имеет открытый исходный код RocksDB, встраиваемое постоянное хранилище ключей и значений для быстрого хранения, основанное на LevelDB от Google.
RocksDB нацелен на встроенные рабочие нагрузки, хотя, по словам команды, он также может быть основой для базы данных клиент-сервер. RocksDB основан на LevelDB, чтобы его можно было масштабировать для работы на серверах с большим количеством ядер ЦП. Он разработан для эффективного использования быстрого хранилища и поддержки рабочих нагрузок с привязкой к вводу-выводу, в памяти и с однократной записью.
Проект Rocksdb стартовал в Facebook как эксперимент по разработке эффективной базы данных для использования флеш-хранилища для серверных рабочих нагрузок. Это библиотека C ++, которая может использоваться для хранения ключей и значений, где ключи и значения представляют собой потоки байтов произвольного размера с поддержкой атомарного чтения и атомарной записи. RocksDB можно настроить для работы с данными в чистой памяти, флэш-памяти, жестких дисках или в HDFS. Он поддерживает различные алгоритмы сжатия и хорошие инструменты для производственной поддержки и отладки.
Команда Facebook начала с тестирования LevelDB, но он не подходил для рабочих нагрузок сервера Facebook.
По словам команды RocksDB:
«Результаты тестов на первый взгляд выглядят потрясающе, но мы быстро поняли, что эти результаты были для базы данных, размер которой был меньше размера ОЗУ на тестовой машине — где вся база данных могла уместиться в кэше страниц ОС. Когда мы выполнили те же тесты для базы данных, которая была как минимум в 5 раз больше, чем основная память, результаты производительности были мрачными ».
Разработав RocksDB и тестовые программы для тестирования серверной нагрузки на Flash, команда Facebook смогла показать, что RocksDB «значительно превосходит» LevelDB. Комментарий команды:
«Мы обнаружили, что однопоточного процесса сжатия LevelDB было недостаточно для управления рабочими нагрузками сервера. Мы видели частые остановки записи с LevelDB, из-за которых 99-процентная задержка была чрезвычайно большой. Мы обнаружили, что вставка файла в кэш ОС приводит к снижению производительности при чтении. Мы не могли заставить LevelDB использовать все операции ввода-вывода, предлагаемые базовым флэш-хранилищем ».
Тесты и их результаты публикуются на GitHub. Код RockDB также доступен на Github. Инженер Facebook Дхруба Бортакур выступил с вводным докладом о RocksDB на конференции Data @ Scale 2013, и его слайды доступны для просмотра.
Предлагаемые варианты использования RocksDB — это приложения, которым требуется доступ к базе данных с малой задержкой, например, пользовательское приложение, которое хранит историю просмотров и состояние пользователей веб-сайта, или приложение для обнаружения спама, которому требуется быстрый доступ к большим наборам данных. RocksDB также можно использовать для кэширования данных из Hadoop, что позволяет приложениям запрашивать данные Hadoop в режиме реального времени.