Un poco de TimescaleDB: hypertables

Hace unos días publicábamos el primer post dedicado a esta interesante base de datos Time Series: ¿Qué es TimescaleDB?

Hoy vamos a profundizar un poco en el concepto de hypertable.

Como vimos el concepto principal de TimescaleDB (Que funciona sobre Postgresql) es el hypertable. TimescaleDB de hecho se monta como una extensión de Postgresql:

Al ser una extensión puedo utilizar el mismo driver de Postgresql (el JDBC en nuestro caso).

Creación de hypertable

Una vez tenemos la extensión para crear una hypertable crearé mi tabla como normalmente:

Y luego la convierto a hypertable indicando el campo por el que particionamos:

Una vez hecho esto puedo hacer las operaciones SQL normalmente:

Opciones hypertable

A la hora de crear la hypertable puedo configurar un conjunto de opciones, como el intervalo de tiempo por defecto (que si no se establece es de 7 días), podemos cambiarlo así:

También puedo configurar las space partitions.

Best Practices sobre hypertables:

Podéis leer más sobre las Best Practices aquí:

https://docs.timescale.com/v1.3/using-timescaledb/hypertables#best-practices

Índices hypertable

Cuando se crea una hypertable se crea un índice temporal así:

Si a la hora de crear la hypertable especificamos un space partition se creará un índice de este tipo:

Soporte JSON en Hypertable

TimescaleDB puede trabajar con los mismos tipos de datos que Postgresql, incluido JSON y JSONB lo que es una opción muy interesante para muchos escenarios.

Se recomienda:

  • Usar el tipo de dato JSONB (Json binario) que son más eficientes en almacenamiento y búsqueda
  • Una aproximación semiestructurada donde los campos como time, user_id, device_id estén fuera de la estructura JSONB ya que el acceso es más eficiente

TimescaleDB también soporta crear índices sobre una estructura JSONB entera (índices GIN) o incluso sobre un campo dentro del JSONB.

Inserciones múltiples y upserts

Además de los INSERTs normales TimescaleDB soporta inserciones de múltiples filas en una hypertable con un único INSERT:

+

También tengo el concepto de UPSERT, que me permite gestionar conflictos en las inserciones:

Queries

TimescaleDB y sus hypertables se comportan igual que una tabla Postgresql, por tanto puedo hacer JOINS entre tablas normales e hypertables:

Además de queries complejas:

Además de queries analíticas como la medias, mediana, percentil, sumatorios, histogramas, relleno de huecos,…

Más info sobre estas queries: https://docs.timescale.com/v1.3/using-timescaledb/reading-data

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s