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.
- ↑ Performance Benchmarks. GitHub. Процитовано 29 листопада 2015.
- ↑ 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.
- ↑ Under the Hood: Building and open-sourcing RocksDB. Facebook. Процитовано 10 березня 2016.
- ↑ License change discussion. GitHub. Процитовано 20 липня 2017.
- ↑ Apache says 'no' to Facebook code libraries. The Register. Процитовано 20 липня 2017.
- ↑ Users.md. GitHub. Процитовано 1 грудня 2015.
- ↑ Features Not in LevelDB. GitHub.
- ↑ First commit where RocksDB diverges from LevelDB. GitHub. 10 травня 2012. Процитовано 15 березня 2016.
- ↑ The History of RocksDB. 24 листопада 2013. Процитовано 10 березня 2016.
- ↑ RC1 ArangoDB 3.4 — What's new?. 6 вересня 2018.
- ↑ Open-sourcing a 10x reduction in Apache Cassandra tail latency. 5 березня 2018.
- ↑ MyRocks. MariaDB Knowledge Base. Процитовано 28 квітня 2019.
- ↑ Integrating RocksDB with MongoDB. Процитовано 19 липня 2018.
- ↑ MyRocks: MySQL on RocksDB (PDF). Процитовано 29 листопада 2015.
- ↑ Storage Devices — Ceph Documentation. Процитовано 8 листопада 2017.
- ↑ Adopting RocksDB within Manhattan. Twitter. 28 грудня 2022.
- ↑ TiDB Internal (I) — Data Storage. 11 липня 2017.
- ↑ How RocksDB is used in osquery. Engineering at Meta. 30 квітня 2015.
- ↑ Moving Quicksilver into production. The Cloudflare Blog. 25 листопада 2020.