The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

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

22.11.2013 17:34

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

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

Ключами и привязанными к ним значениями могут выступать произвольные байтовые массивы данных. Связки ключ/значение хранятся в отсортированном по ключу упорядоченном виде, метод сортировки задаётся через задаваемую пользователем функцию сравнения (comparator). Управление данными производится через базовые операторы 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 может использоваться для сохранения состояния пользователя и истории его действий на сайте; в программах определения спама; в системах, занимающихся перебором набора данных в режиме реального времени; для организации очередей сообщений с большим числом операций добавления и удаления записей.

  1. Главная ссылка к новости (https://www.facebook.com/notes...)
  2. OpenNews: Компания Google открыла исходные тексты БД LevelDB
  3. OpenNews: Компания Oracle представила открытую БД Oracle NoSQL Database 2.0
  4. OpenNews: Facebook выпустил модуль Flashcache 3.0 для организации кэширования на SSD-накопителях
  5. OpenNews: Facebook открыл код распределённого SQL-движка для петабайтных хранилищ
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/38499-rocksdb
Ключевые слова: rocksdb, nosql
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (19) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, pavlinux (ok), 18:03, 22/11/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    > рассчитанная на использование на Flash-накопителях.

    У файловой системы спросить не забыли?

    > Если один SSD-накопитель демонстрирует производительность до 100 тысяч случайных операций
    > записи и чтения в секунду, распределив хранилище на десять таких накопителей,
    > производительность может быть увеличена до миллиона операций в секунду.

    Это только в теории, в реальности включится Закон Амдала и его друзей.

     
     
  • 2.3, oxyum (ok), 18:53, 22/11/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Тут закон Амдала особо мешать не будет, ибо узким местом для распаралелливания скорее всего будут процессор, память и шина, а они пока быстрее чем SSD.
     
  • 2.7, all_glory_to_the_hypnotoad (ok), 22:56, 22/11/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    хранилища всегда масштабируются линейно, если, конечно, не нужна транзакционность - единственное ограничение масштабируемости в данном  случае. Закон Амдала  вообще не из этой оперы.
     
     
  • 3.11, pavlinux (ok), 04:20, 23/11/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > хранилища всегда масштабируются линейно, если, конечно, не нужна транзакционность - единственное
    > ограничение масштабируемости в данном  случае. Закон Амдала  вообще не
    > из этой оперы.

    Ну я и не сомневался, что дальше чтения википедии мало кто способен пойти. :)

     
  • 2.9, linux must __RIP__ (?), 23:54, 22/11/2013 [^] [^^] [^^^] [ответить]  
  • +/
    а зачем файловая система на raw device ? :)
     
     
  • 3.18, kurokaze (ok), 04:33, 24/11/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    В твоём ПТУ этого не объяснили? Печалька
     
     
  • 4.19, Crazy Alex (ok), 15:57, 24/11/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А что не так? Базы сплошь и рядом на raw device работают. Тем более на энтерпрайзных SSD, где контроллер нормальный, в FS особого смысла нет.
     
     
  • 5.20, all_glory_to_the_hypnotoad (ok), 16:14, 24/11/2013 [^] [^^] [^^^] [ответить]  
  • +/
    сплошь и рядом не работают.  Этим путём шли некоторые СУБД в  9х, но многие вернулись назад.
     
  • 5.24, Maniaq (ok), 15:53, 25/11/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > А что не так? Базы сплошь и рядом на raw device работают.
    > Тем более на энтерпрайзных SSD, где контроллер нормальный, в FS особого смысла нет.

    А бэкап и рестор на RAW-девайсах ты будешь писать и поддерживать?

     
     
  • 6.26, all_glory_to_the_hypnotoad (ok), 20:43, 25/11/2013 [^] [^^] [^^^] [ответить]  
  • +/
    коли субд взялась работать с raw девайсом, то тулзы для саппорта тоже даёт. Но это чаще геморее чем работать с традиционной фс.
     

  • 1.2, Аноним (-), 18:49, 22/11/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    это они петабайт на SSD хранят? оО А как же голодающие дети в Африке?
     
     
  • 2.4, oxyum (ok), 18:54, 22/11/2013 [^] [^^] [^^^] [ответить]  
  • +15 +/
    > это они петабайт на SSD хранят? оО А как же голодающие дети
    > в Африке?

    SSD диски всё равно не сытные - можно и под данные использовать.

     

  • 1.6, Dmitry77 (ok), 19:15, 22/11/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Месяц баз данных от facebook.
    Это уже вторая база открытая  ими: http://www.opennet.dev/opennews/art.shtml?num=38368
     
  • 1.8, YetAnotherOnanym (ok), 23:44, 22/11/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    "Log-Structured-Merge-Database"
    Хмммм... как бы это перевести? БД со слиянием, структурированным по журналу?
     
  • 1.10, Аноним (-), 02:17, 23/11/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    так она не sql что ли? :(
     
     
  • 2.14, Аноним (-), 15:32, 23/11/2013 [^] [^^] [^^^] [ответить]  
  • –2 +/
    вообще не понимаю, зачем ноускьюэль нужны базы?
     

  • 1.22, Аноним (-), 09:29, 25/11/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    для хранения картинок
     
  • 1.23, count0krsk (ok), 14:18, 25/11/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Где сравнение производительности с mysql/postgresql/oracle?
    И чисто ради лулзов - c MSSQL ))) Сколько запросов она успеет обработать в секунду? 50-100, может 1000 даже, ггг.


     
     
  • 2.25, SpiritOfStallman (ok), 15:57, 25/11/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Где сравнение производительности с mysql/postgresql/oracle?

    Сравнивать NoSQL с SQL?

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру