Перейти до вмісту

RocksDB

Матеріал з Вікіпедії — вільної енциклопедії.

RocksDB — високопродуктивна вбудована база даних для пар «ключ–значення». Це відгалуження LevelDB від Google, пристосоване до багатоядерних процесорів і швидкого сховища, зокрема твердотільних накопичувачів, для навантажень, обмежених вводом-виводом. В основі лежить лог-структуроване дерево злиття (LSM-дерево). Рушій написано мовою C++; офіційні прив’язки є для C++, C і Java, а сторонні — для багатьох інших мов.[1][2]

Спершу код випустили під трипунктовою ліцензією BSD.[3] У липні 2017 року проєкт перейшов на подвійну ліцензію Apache 2.0 і GPLv2.[4] Це полегшило прийняття в проєктах Apache Software Foundation після того, як попереднє поєднання BSD із патентним застереженням туди не пускали.[5]

RocksDB працює в промислових системах великого масштабу, зокрема у Facebook, Yahoo! і LinkedIn.[6]

Можливості

[ред. | ред. код]

Як і LevelDB, RocksDB зберігає ключі й значення як довільні масиви байтів. Дані впорядковано побайтово за ключем або власним компаратором.

Понад можливості LevelDB є:

  • транзакції;
  • резервні копії й знімки (контрольні точки);
  • сімейства стовпців;
  • фільтри Блума;
  • час життя записів (TTL);
  • універсальне ущільнення;
  • оператори злиття;
  • збір статистики;
  • геопросторове індексування.[7]

Це не SQL-база. Реляційної моделі немає, запити SQL не підтримуються, хоча MyRocks поєднує RocksDB із MySQL. Вторинних індексів «із коробки» немає: їх можна зібрати самому через сімейства стовпців або зовні. Застосунок підключає RocksDB як бібліотеку: окремого сервера й інтерфейсу командного рядка немає.

Історія

[ред. | ред. код]

Рушій створив у Facebook Дхруба Бортхакур у квітні 2012 року як відгалуження LevelDB. Початкова мета — краща продуктивність на серверних навантаженнях.[8][9]

Вбудовування

[ред. | ред. код]

Як вбудовану базу RocksDB беруть рушієм зберігання всередині більшої СКБД. Наприклад, Rockset використовує її переважно для аналітичної обробки.

Заміна наявного рушія

[ред. | ред. код]

Кілька проєктів замінили або доповнили вже відомі системи зберіганням на RocksDB.

  • ArangoDB додала RocksDB до попереднього рушія mmfiles. Від версії 3.4 це типовий рушій.[10]
  • Cassandra. Команда Instagram у Facebook відкрила код і порівняння, у яких хвостова затримка Apache Cassandra зменшилася приблизно вдесятеро.[11]
  • MariaDB може використовувати рушій MyRocks (відгалуження RocksDB) від версії 10.2.5; стабільним він став у 10.2.16 (2018).[12]
  • MongoDB. Проєкт MongoRocks дає модуль зберігання на RocksDB. Інструмент Rocks Strata мовою Go керує нарощувальними резервними копіями MongoDB у такій конфігурації.[13]
  • MySQL. MyRocks — рушій зберігання MySQL на основі RocksDB. Подробиці показували на Percona Live 2016.[14]
  • Oxigraph — графова база зі стандартом SPARQL, побудована на RocksDB.
  • UKV дає спільну абстракцію операцій створення, читання, оновлення й вилучення над RocksDB і LevelDB і прив’язки для Python, Java та Go.

Як власний рушій

[ред. | ред. код]

Своїм вбудованим сховищем RocksDB обрали:

  • BlueStore у Ceph — для метаданих на пристроях OSD;[15]
  • Apache Flink — стан операторів і легкі нарощувальні контрольні точки;
  • FusionDB — XML, пари «ключ–значення» і JSON;
  • LogsDB у LogDevice;
  • Kafka Streams — сховища стану;
  • Manhattan — основний рушій даних Twitter від 2018 року;[16]
  • Rockset — операційна аналітика;
  • ssdb-rocks — рушій для NoSQL-бази SSDB;
  • TiDB — рушій зберігання;[17]
  • YugabyteDB — змінений RocksDB у складі рушія DocDB.

Прив’язки мов

[ред. | ред. код]

Окрім офіційних C, C++ і Java, сторонні прив’язки є для C#, Chicken Scheme, D, Elixir, Erlang, Go, Haskell, Kotlin, Node.js, Nim, Objective-C і Swift, OCaml, Perl, PHP, Prolog, Python, Ruby та Rust.

Помітні користувачі

[ред. | ред. код]
  • Meta використовує RocksDB в osquery.[18]
  • Cloudflare — у Quicksilver, сховищі конфігурації.[19]

Див. також

[ред. | ред. код]

Примітки

[ред. | ред. код]
  1. ↑ Performance Benchmarks. GitHub. Процитовано 29 листопада 2015.
  2. ↑ Golan-Gueta, Guy; Bortnikov, Edward; Hillel, Eschar; Keidar, Idit (21 квітня 2015). Scaling concurrent log-structured data stores. Proceedings of the Tenth European Conference on Computer Systems. с. 1—14. doi:10.1145/2741948.2741973. ISBN 9781450332385.
  3. ↑ Under the Hood: Building and open-sourcing RocksDB. Facebook. Процитовано 10 березня 2016.
  4. ↑ License change discussion. GitHub. Процитовано 20 липня 2017.
  5. ↑ Apache says 'no' to Facebook code libraries. The Register. Процитовано 20 липня 2017.
  6. ↑ Users.md. GitHub. Процитовано 1 грудня 2015.
  7. ↑ Features Not in LevelDB. GitHub.
  8. ↑ First commit where RocksDB diverges from LevelDB. GitHub. 10 травня 2012. Процитовано 15 березня 2016.
  9. ↑ The History of RocksDB. 24 листопада 2013. Процитовано 10 березня 2016.
  10. ↑ RC1 ArangoDB 3.4 — What's new?. 6 вересня 2018.
  11. ↑ Open-sourcing a 10x reduction in Apache Cassandra tail latency. 5 березня 2018.
  12. ↑ MyRocks. MariaDB Knowledge Base. Процитовано 28 квітня 2019.
  13. ↑ Integrating RocksDB with MongoDB. Процитовано 19 липня 2018.
  14. ↑ MyRocks: MySQL on RocksDB (PDF). Процитовано 29 листопада 2015.
  15. ↑ Storage Devices — Ceph Documentation. Процитовано 8 листопада 2017.
  16. ↑ Adopting RocksDB within Manhattan. Twitter. 28 грудня 2022.
  17. ↑ TiDB Internal (I) — Data Storage. 11 липня 2017.
  18. ↑ How RocksDB is used in osquery. Engineering at Meta. 30 квітня 2015.
  19. ↑ Moving Quicksilver into production. The Cloudflare Blog. 25 листопада 2020.

Посилання

[ред. | ред. код]