Facebook открыл код NoSQL БД RocksDB, оптимизированной для Flash-накопителей
22 ноября 2013 года
Компания Facebook объявила об открытии исходных текстов проекта RocksDB, в рамках которого развивается система для хранения данных в формате ключ/значение, рассчитанная на использование на Flash-накопителях. Код RocksDB написан на языке С++ и распространяется под лицензией BSD. В качестве основы для RocksDB использован прошлогодний выпуск проекта LevelDB 1.5, развиваемого компанией Google.
Так же как LevelDB, SQLite и BerkeleyDB, проект RocksDB оформлен в виде разделяемой библиотеки, подключаемой к приложениям в процессе компиляции (для работы с базой из командной строки поставляется утилита ldb). Библиотека может быть использована в качестве низкоуровневого звена для создания более сложных серверов хранения. Ключевым отличием от LevelDB является переработанная структура хранилища, оптимизированная для Flash-накопителей. Хранение в базе организовано в форме лога (Log-Structured-Merge-Database), при этом разработчики Facebook попытались найти оптимальный компромисс между различными сценариями использования БД (интенсивное добавление/чтение/удаление, большой размер базы). При необходимости оптимизации для конкретных применений или типов аппаратных устройств архитектура RocksDB предусматривает возможность замены различных подсистем на свои обработчики и изменение формата хранилища. Например, можно выбирать разные методы кэширования в памяти, алгоритмы сборки мусора и методы сжатия данных.
Ключами и привязанными к ним значениями могут выступать произвольные байтовые массивы данных. Связки ключ/значение хранятся в отсортированном по ключу упорядоченном виде, метод сортировки задаётся через задаваемую пользователем функцию сравнения (comparator). Управление данными производится (Архивная копия от 3 февраля 2014 на Wayback Machine) через базовые операторы Put, Write (запись в пакетном режиме) , Get, MultiGet, Delete и Scan, RangeScan (переход на удовлетворяющие определённым критериям соседние элементы отсортированного списка).
В рамках одной атомарной операции в базу может быть внесено сразу несколько изменений. Поддерживается создание снапшотов со срезом состояния БД в текущий момент времени. Для контроля за возможным повреждением данных для каждого блока сохраняется контрольная сумма. Возможно открытие базы в режиме только для чтения. Данные могут автоматически сжиматься перед сохранением с использованием библиотек snappy, zlib и bzip2. Для отладочных целей предусмотрена возможность ведения детализированного отладочного лога. Доступны инструменты для полного и инкрементального хранения данных, а также механизм для реплицирования лога изменений на другую систему (например, для создания горячего бэкапа на удалённой системе).
В библиотеке реализован встроенный многопоточный упаковщик, занимающийся чисткой устаревших записей (блоки данных в RocksDB не изменяются, а только добавляются новые с последующим освобождением устаревших) и пригодный для использования в ситуациях размещения в одном хранилище терабайт данных. В процессе работы RocksDB операции записи вначале сохраняются в размещённой в памяти структуре memtable, после чего сбрасываются в последовательно заполняемый лог, а после заполнения пула, данные из лога сохраняются в основное упорядоченное SST-хранилище.
C позиции производительности RocksDB позволяет выжать максимум из возможностей кластеров Flash-накопителей. Тестирование производительности показало, что RocksDB в 10 раз быстрее обрабатывает запросы на запись и в 30 раз быстрее операции случайного чтения по сравнению с использованием LevelDB на том же накопителе, дополнительно предоставляя гибкие возможности по масштабированию хранилища на несколько накопителей. Если один SSD-накопитель демонстрирует производительность до 100 тысяч случайных операций записи и чтения в секунду, то при распределении хранилища на десять таких накопителей, производительность может быть увеличена до миллиона операций в секунду.
Система уже достаточно хорошо отлажена и используется в Facebook для хранения почти петабайта данных. Наиболее востребованным применением RocksDB являются приложения, требующие минимальной задержки при сохранении или чтении данных. Например, RocksDB может использоваться для сохранения состояния пользователя и истории его действий на сайте; в программах определения спама; в системах, занимающихся перебором набора данных в режиме реального времени; для организации очередей сообщений с большим числом операций добавления и удаления записей.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.