RocksDB
RocksDB | ||
---|---|---|
Información general | ||
Tipo de programa | base de datos embebida | |
Desarrollador | Meta Platforms | |
Modelo de desarrollo | Código abierto | |
Licencia | Licencia BSD de 3 cláusulas | |
Información técnica | ||
Programado en | C++ | |
Plataformas admitidas | ||
Versiones | ||
Última versión estable | 9.7.316 de octubre de 2024 | |
Enlaces | ||
RocksDB es una base de datos incrustada de alto rendimiento[1][2][3][4][5] para datos de clave-valor. Es un fork de LevelDB, optimizado para explotar múltiples núcleos de CPU, y hacer uso eficiente de dispositivos de almacenamiento rápido como Unidad de estado sólido en cargas de trabajo de Entrada/Salida (E/S) limitada. Está basado en la estructura de datos de árbol LSM (Log-structured merge-tree). Está escrito en C++ y provee una API de lenguaje oficial para C++, C y Java, junto a varios enlaces de lenguajes de terceros. RocksDB es de código abierto, publicado bajo la Licencia BSD de 3 cláusulas.[6][7][8]
RocksDB es usando en sistemas de producción en varios sitios web de escala empresarial,[9] incluyendo Facebook, Yahoo!,[10] y LinkedIn.[11]
Características
[editar]Al igual que LevelDB, RocksDB almacena claves y valores en arrays de bytes arbitrarios, y los datos son ordenados mediante byte por clave, o proveyendo un comparador personalizado.
RocksDB provee todas las características de LevelDB, además de:
- Familias de columnas[12]
- Filtros de Bloom[13]
- Transacciones[14]
- Soporte para Time to Live (TTL)[15]
- Compactación universal[16]
- Operaciones de combinación[17]
- Recolección de estadísticas[18]
- Geo-spatial[19]
RocksDB no es una base de datos SQL (a pesar de que MyRocks combina RocksDB con MySQL). Como otros sistemas de almacenamiento como NoSQL y dbm, RocksDB no posee un modelo relacional, y no soporta consultas SQL. Además, no posee soporte directo para índices secundarios,sin embargo, un usuario puede crear la suya propia internamente usando Familias de columnas o externamente. Las aplicaciones usan RocksDB como una biblioteca, ya que no provee una interfaz de servidor o línea de comandos.
Historia
[editar]RocksDB fue creado en Facebook por Dhruba Borthakur[20][21] en abril de 2012, como un fork de LevelDB, con el objetivo principal de mejorar el rendimiento en las cargas del servidor.[22][23]
Integración
[editar]Como una base de datos incrustada, RocksDB puede ser usado como un mecanismo de almacenamiento junto con gestores de bases de datos mayores. Por ejemplo, CockroachDB usa RocksDB como su mecanismo de almacenamiento.[24]
Backends alternativos
[editar]Los siguientes proyectos se han iniciado para ofrecer o reemplazar un mecanismo de almacenamiento alternativo para los sistemas de base de datos ya establecidos con RocksDB:
MongoDB
[editar]El proyecto MongoRocks provee un módulo de almacenamiento para MongoDB, en el cual el mecanismo de almacenamiento es RocksDB.[25][26][27]
Un programa relacionado es Rocks Strata, una herramienta escrita en Go, el cual permite manejar respaldos incrementales de MongoDB donde RocksDB es usado como mecanismo de almacenamiento.[28]
MySQL
[editar]El proyecto MyRocks crea un nuevo mecanismo de almacenamiento para MySQL basado en RocksDB.[29][30] En el Percona Live 2016 se presentaron detalles en profundidad de MyRocks.[31]
Una base de datos distribuida NewSQL orientada a ser una alternativa compatible con MySQL, posee un número de backends conectables, entre ellos RocksDB.[33]
Incrustados
[editar]Los siguientes sistemas de bases de datos eligieron usar RocksDB como su mecanismo de almacenamiento incrustado:
Dgraph
[editar]El proyectp Dgraph[34] usa RocksDB como el motor de su base de datos.[35] NoSQLGraph Database.
SSDB
[editar]El proyectp ssdb-rocks[36] usa RocksDB como mecanismo de almacenamiento NoSQL de SSDB.[37] NoSQL Database.
Enlaces de lenguaje de terceros
[editar]Los enlaces de lenguaje de terceros disponibles para RocksDB incluyen:
- C#[38]
- Erlang[39]
- Go[40]
- Haskell[41]
- Node.js[42]
- Objective-C, and Swift[43]
- Perl[44]
- PHP[45]
- Python[46]
- Ruby[47]
- Rust[48]
Referencias
[editar]- ↑ «Performance Benchmarks». Consultado el 29 de noviembre de 2015.
- ↑ «Benchmarking the leveldb family». Consultado el 10 de marzo de 2016.
- ↑ «Comparing LevelDB and RocksDB, take 2». Consultado el 10 de marzo de 2016.
- ↑ «Benchmarking LevelDB vs. RocksDB vs. HyperLevelDB vs. LMDB Performance for InfluxDB». Consultado el 10 de marzo de 2016.
- ↑ Golan-Gueta, Guy; Bortnikov, Edward; Hillel, Eschar; Keidar, Idit (21 de abril de 2015). «Scaling Concurrent Log-Structured Data Stores». EuroSys '15 Proceedings of the Tenth European Conference on Computer Systems. doi:10.1145/2741948.2741973.
- ↑ «Facebook’s latest open source effort: a flash-powered database called RocksDB». Archivado desde el original el 24 de febrero de 2020. Consultado el 10 de marzo de 2016.
- ↑ «Under the Hood: Building and open-sourcing RocksDB». Consultado el 10 de marzo de 2016.
- ↑ «RocksDB - Facebook's Database Now Open Source». Consultado el 10 de marzo de 2016.
- ↑ «Users.md». Consultado el 1 de diciembre de 2015.
- ↑ «RocksDB on Steroids». Consultado el 10 de marzo de 2016.
- ↑ «Benchmarking Apache Samza: 1.2 million messages per second on a single node». Consultado el 10 de marzo de 2016.
- ↑ «Column families in RocksDB». GitHub. Consultado el 4 de abril de 2016.
- ↑ «RocksDB bloom filters». GitHub. Consultado el 4 de abril de 2016.
- ↑ «RocksDB transactions». GitHub. Consultado el 4 de abril de 2016.
- ↑ «RocksDB TTL support». GitHub. Consultado el 4 de abril de 2016.
- ↑ «Universal compaction». GitHub. Consultado el 4 de abril de 2016.
- ↑ «RocksDB merge operator». GitHub. Consultado el 4 de abril de 2016.
- ↑ «RocksDB perf context and IO stats context». GitHub. Consultado el 4 de abril de 2016.
- ↑ «Spatial indexing in RocksDB « RocksDB». rocksdb.org. Consultado el 4 de abril de 2016.
- ↑ «First commit where RocksDB diverges from LevelDB». 10 de mayo de 2012. Consultado el 15 de marzo de 2016.
- ↑ «rocksdb README file». 30 de noviembre de 2012. Consultado el 15 de marzo de 2016.
- ↑ «The History of RocksDB». 24 de noviembre de 2013. Consultado el 10 de marzo de 2016.
- ↑ Borthakur, Dhruba (22 de noviembre de 2013). «RocksDB: A High Performance Embedded Key-Value Store for Flash Storage - Data@Scale». Consultado el 10 de marzo de 2016. «... The story of why we decided to do RocksDB ...»
- ↑ Edwards, Jessica (29 de octubre de 2015). «Hello World: Meet CockroachDB, the Resilient SQL Database». The New Stack. Consultado el 8 de julio de 2016.
- ↑ «mongodb-partners/mongo-rocks».
- ↑ «Integrating RocksDB with MongoDB». Consultado el 1 de diciembre de 2015.
- ↑ «MongoDB + RocksDB at Parse». Archivado desde el original el 13 de noviembre de 2015. Consultado el 1 de diciembre de 2015.
- ↑ «facebookgo/rocks-strata».
- ↑ «Facebook/mysql-5.6».
- ↑ «MyRocks: MySQL on RocksDB». Consultado el 29 de noviembre de 2015.
- ↑ «MyRocks Deep Dive». Consultado el 9 de mayo de 2016.
- ↑ «pingcap/tidb».
- ↑ «TiDB Readme». Consultado el 3 de enero de 2017.
- ↑ «dgraph-io/dgraph».
- ↑ Labs, Dgraph. «Dgraph Wiki».
- ↑ «ideawu/ssdb-rocks».
- ↑ https://ssdb.io Archivado el 5 de enero de 2018 en Wayback Machine.
- ↑ «warrenfalk/rocksdb-sharp».
- ↑ «leo-project/erocksdb».
- ↑ «tecbot/gorocksdb».
- ↑ «rocksdb-haskell: Haskell bindings to RocksDB».
- ↑ «rocksdb».
- ↑ «iabudiab/ObjectiveRocks».
- ↑ «RocksDB - Perl extension for RocksDB - metacpan.org».
- ↑ «Photonios/rocksdb-php».
- ↑ «stephan-hof/pyrocksdb».
- ↑ «rocksdb-ruby - RubyGems.org - your community gem host».
- ↑ «spacejam/rust-rocksdb».