# RocksDB

RocksDB es una base de datos incrustada de alto rendimiento 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.
RocksDB es usando en sistemas de producción en varios sitios web de escala empresarial, incluyendo Facebook, Yahoo!, y LinkedIn.

## Características

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
* Filtros de Bloom
* Transacciones
* Soporte para Time to Live (TTL)
* Compactación universal
* Operaciones de combinación
* Recolección de estadísticas
* Geo-spatial
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

RocksDB fue creado en Facebook por Dhruba Borthakur en abril de 2012, como un fork de LevelDB, con el objetivo principal de mejorar el rendimiento en las cargas del servidor.

## Integración

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.

### Backends alternativos

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

El proyecto MongoRocks provee un módulo de almacenamiento para MongoDB, en el cual el mecanismo de almacenamiento es RocksDB.
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.

#### MySQL

El proyecto MyRocks crea un nuevo mecanismo de almacenamiento para MySQL basado en RocksDB. En el Percona Live 2016 se presentaron detalles en profundidad de MyRocks.

#### TiDB

Una base de datos distribuida NewSQL orientada a ser una alternativa compatible con MySQL, posee un número de backends conectables, entre ellos RocksDB.

### Incrustados

Los siguientes sistemas de bases de datos eligieron usar RocksDB como su mecanismo de almacenamiento incrustado:

#### Dgraph

El proyectp Dgraph usa RocksDB como el motor de su base de datos. NoSQLGraph Database.

#### SSDB

El proyectp ssdb-rocks usa RocksDB como mecanismo de almacenamiento NoSQL de SSDB. NoSQL Database.

## Enlaces de lenguaje de terceros

Los enlaces de lenguaje de terceros disponibles para RocksDB incluyen:
* C#
* Erlang
* Go
* Haskell
* Node.js
* Objective-C, and Swift
* Perl
* PHP
* Python
* Ruby
* Rust