InfluxDB: Base de datos para diseñar aplicaciones en tiempo real

InfluxDB es una nueva propuesta dentro del mundo de las bases de datos. Escrita en Go, lenguaje de programación inspirado en la sintaxis de C y desarrollado por Google, InfluxDB es un proyecto open source especialmente pensado para desarrolladores que buscan un sistema de almacenamiento para sus aplicaciones que operen en tiempo real.

InfluxDB es una propuesta fresca y completamente nueva, no utiliza ni una sola dependencia adicional para correr. El autor de este proyecto desarrolló este recurso al no encontrar una solución realmente eficiente a la hora de trabajar con métricas, eventos y demás tipos de datos que aparecen al diseñar una aplicación que se ejecute en tiempo real.

influxdb base de datos

Según anuncian en el sitio oficial esta base de datos devuelve resultados en tiempos inferiores a los 100ms. Inclusive se habla de una real capacidad a la hora de escalar de forma horizontal, esto significa incorporar nuevos nodos al sistema que funcionen en espejo, en lugar de la escalabilidad horizontal que consiste en añadir más recursos a un solo nodo, por ejemplo, añadiendo más memoria RAM a un servidor.

InfluxDB es una buena solución para almacenar datos de métricas, por ejemplo: uso del cpu de un equipo. Su autor confiesa que se hizo especial hincapié en el almacenamiento de eventos.

Otro punto fuerte de este proyecto es su instalación, es muy sencilla y rápida. Si están interesados en probar InfluxDB les cuento que tienen a su disposición los paquetes para Ubuntu y Debian (32 y 64bits), para RedHat y CentOS (32 y 64bits) y próximamente para Mac OS X a través de Brew.

Con respecto a la forma de realizar consultas decir que InfluxDB posee una sintaxis del tipo SQL (muy similar aunque puede tener unas muy pequeñas diferencias).

Ejemplo de uso de InfluxDB:

Inicialización:

influxdb = new InfluxDB(host, port, username, password, database);

Escritura:

// with server set timestamps
influxdb.writePoints("some_series", [
    {"value": 23.0,  "state": "NY", "email": "paul@influxdb.org"},
    {"value": 191.3, "state": "CO", "email": "foo@bar.com"}
]);

// with a specified timestamp
influxdb.writePoints("response_times", [
  {time: new Date(), "value": 232}
]);

Lectura:

// get the latest point from the events time series
series = influxdb.query(
  "select * from events limit 1;");

// get the count of events (using the column type)
// in 5 minute periods for the last 4 hours
series = influxdb.query(
  "select count(region) from events " +
  "group by time(5m) where time > now() - 4h;");

// get the count of unique event types in 10 second
// intervals for the last 30 minutes
series = influxdb.query(
  "select count(type) from events " +
  "group by time(10s), type where time > now() - 30m;");

En el sitio oficial del proyecto pueden ver el panel de administración en funcionamiento, incluso pueden realizar sus propias pruebas sin descargar ni instalar un solo complemento.

El proyecto se encuentra en una etapa inicial, se están buscando desarrolladores para sumarse al equipo de desarrollo, pero como propuesta me parece de lo más interesante.

Categorizado en: