Facebook lo usan unos 1000 millones de personas en el mundo y utiliza un manejador de bases de datos creado para procesar la información gigantesca que millones de usuarios alimentan en el sistema. Un sistema así es muy complejo de escribir, por lo que llama la atención que el equipo de bases de datos de Facebook  ha puesto ahora en código abierto un manejador llamado RocksDB, que puede ser útil en muchas tareas de bases de datos.

RocksDB está diseñado para cargas de trabajo embebido, aunque el equipo ha dicho que puede usarse para una base de datos cliente/servidor. RocksDB está construido sobre LevelDB para ser escalable y correr en servidores que tengan muchos núcleos. Está diseñado para almacenar los datos de manera eficiente además.

El proyecto RocksDB empezó en Facebook como un experimento para desarrollar una base de datos eficiente que use almacenamiento flash para las cargas en el servidor. Es una biblioteca en C++ que puede ser usada para guardar llaves y valores en donde dichos elementos pueden tener un tamaño arbitrario de bytes. RocksDB puede afinarse para correr en datos que estén en memoria pura, en memoria flash, discos duros o HDFS. Soporta varios algoritmos de compresión y tiene buenas herramientas para apoyo en producción y depuración.

El equipo de Facebook empezó por medir los parámetros de LevelDB, pero no cumplió con las necesidades de las cargas de trabajo de Facebook. De acuerdo al equipo de RocksDB: “Los resultados del benchmark fueron en un principio asombrosos, pero nos dimos cuenta pronto que estos resultados eran para bases de datos que eran más pequeñas que el tamaño de la RAM en la máquina de prueba, en donde toda la base de datos cabía en una página del caché del sistema operativo usado. Cuando medimos el desempeño con una base de datos cinco veces más grande en la memoria principal, los resultados fueron lamentables”.

El equipo entonces desarrolló RocksDB e hizo las pruebas correspondientes, mostrando que su sistema sobrepasa las posibilidades de LevelDB. El equipo indica: “Hallamos que el proceso de compactación en un solo hilo de ejecución de LevelDB era insuficiente para las cargas del servidor. Notamos frecuentemente problemas al escribir en LevelDB haciendo que el 99% de la latencia fuese muy grande. Encontramos que mapear un archivo en el caché del sistema operativo introduce cuellos de botella en el desempeño para las lectuuras.  No pudimos hacer que levelDb consumiese todas las entradas y salidas ofrecidas por el almacenamiento Flash”.

El benchmark y sus resultados se reportan en GitHub. El código fuente también está en ese sitio. El ingeniero de Faceboook, Dhruba Borthakur dio una plática introductoria sonbre RocksDB en la conferencia Data @ SACLE 2013 y se puede tener acceso a su plática (en pdf).

Los usos sugeridos para RocksDB son aplicaciones con acceso a bases de datos de baja latencia, tales como aplicaciones que detecten spam o que necesiten rápido acceso a conjuntos grandes de datos. RocksDB puede ser usado en aplicaciones que consultan datos de Hadoop en tiempo real.

Refeerencias:

RocksDB.org
RocksDB on Github