Etiquetas

,

En la entrada Un poco de OpenTSDB (y de StatusWolf) se comentan las bondades de OpenTSDB una base de datos temporal escalable y distribuida. Y una de sus principales virtudes es la forma de almacenar los datos de las series temporales de forma eficiente y compacta.

Para ello utiliza HBase que es la base de datos por defecto de Hadoop: distribuible, escalable y preparada para almacenar grandes volúmenes de datos, pero orientada a columnas por lo que es importante la forma en que almacenemos la información para luego no tener problemas con la extracción.

  • Lo primero un diseño simple

Sólo se almacenan series de tiempo. Una fila con un solo KeyValue por datapoint
En el campo clave se almacena primero el nombre de la métrica y luego el tiempo

OpenTSDB TimeSeries1

  • Uso del campo clave

Como en el campo clave no puede ir texto se almacena una referencia (lo mismo se hace con los tags) es decir que utiliza tablas separadas para asignar Ids únicos a los nombre de las métricas y los tags y añade esa referencia en el campo clave.

OpenTSDB TimeSeries2

OpenTSDB TimeSeries3

  • Reducción del número de filas 

Almacena los datos de forma consecutiva en la misma fila. Al tener menos filas consigue mayor velocidad a la hora de buscar una fila específica

OpenTSDB TimeSeries4

  • Creación de las filas

El problema es decidir cuando crear una nueva fila y esto se hace en los siguientes casos:
– Cuando se inicia una serie
– Cuando se sobrepasa un límite temporal, por ejemplo 10 minutos

En las reconexiones los datos se añaden en la fila de su rango temporal

OpenTSDB TimeSeries5

  • Reducción del espacio en disco 

Para optimizar el espacion en disco utiliza la compactación de columnas

OpenTSDB TimeSeries7

La presentación original se encuentra aquí

OpenTSDB TimeSeries8

Anuncios