Facebook открыл код NoSQL БД RocksDB, оптимизированной для Flash-накопителей

Компания Facebook объявила об открытии исходных текстов проекта RocksDB, в рамках которого развивается система для хранения данных в формате ключ/значение, рассчитанная на использование на Flash-накопителях. Код RocksDB написан на языке С++ и распространяется под лицензией BSD. В качестве основы для RocksDB использованы прошлогодний выпуск проекта LevelDB 1.5, развиваемого компанией Google.

Так же как LevelDB, SQLite и BerkeleyDB, проект RocksDB оформлен в виде разделяемой библиотеки, подключаемой к приложениям в процессе компиляции. Библиотека может быть использована в качестве низкоуровневого звена для создания более сложных серверов хранения. Ключевым отличием от LevelDB является переработанная структура хранилища, оптимизированная для Flash-накопителях. Хранение в базе организовано в форме лога (Log-Structured-Merge-Database), при этом разработчики Facebook попытались найти оптимальный компромисс между сценариями использования (интенсивное добавление/чтение/удаление, большой размер базы).

В качестве ключей и привязанных к ним значений могут выступать произвольные байтовые массивы данных. Связки ключ/значение хранятся в отсортированном по ключу упорядоченном виде, метод сортировки задаётся через задаваемую пользователем функцию сравнения (comparator). Управление данными производится через базовые операторы Put(key,value), Get(key) и Delete(key), а также операторы перехода на предыдущие и следующие элементы отсортированного списка. В рамках одной атомарной операции в базу может быть внесено сразу несколько изменений. Поддерживается создание снапшотов со срезом состояния БД.

В библиотеке реализован встроенный многопоточный упаковщик, пригодный для использования в ситуациях размещения в одном хранилище терабайтов данных. Система уже достаточно хорошо отлажена и используется в Facebook для хранения почти петабайта данных. C позиции производительности RocksDB позволяет выжать максимум из возможностей кластеров Flash-накопителей. Если один SSD-накопитель демонстрирует производительность до 100 тысяч случайных операций записи и чтения в секунду, распределив хранилище на десять таких накопителей, производительность может быть увеличена до миллиона операций в секунду.

Тестирование показало, что RocksDB в 10 раз быстрее обрабатывает запросы на запись и в 30 раз быстрее операции случайного чтения по сравнению с использованием LevelDB на том же накопителе, дополнительно предоставляя гибкие возможности по масштабированию хранилища на несколько накопителей. При этом RocksDB потребляет заметно больше оперативной памяти, так как операции записи вначале сохраняются в размещённой в памяти структуре memtable, после чего сбрасываются в последовательно заполняемый лог, а после заполнения пула данные из лога сохраняются в основное упорядоченное хранилище.

Источник:
http://www.opennet.ru/opennews/art.shtml?num=38499

<= Назад
Комментарии
]]> ipv6 ready Kiev LUGLinux4MeНостальгияЛичный сайт skeletora ]]>