Diseño de esquemas para datos de series temporales

En esta página se describen patrones de diseño de esquemas para almacenar datos de series temporales en Bigtable. Esta página se basa en Diseñar tu esquema y parte de la base de que conoces los conceptos y las recomendaciones que se describen en esa página.

Una serie temporal es un conjunto de datos que consta de mediciones y los momentos en los que se registran. Estos son algunos ejemplos de series temporales:

  • Gráfico del uso de memoria en tu ordenador
  • Temperatura a lo largo del tiempo en una noticia
  • Precios de la bolsa durante un periodo

Un buen esquema da como resultado un rendimiento y una escalabilidad excelentes, mientras que un esquema incorrecto puede provocar que el sistema no funcione bien. Sin embargo, ningún diseño de esquema se adapta mejor a todos los casos prácticos.

Los patrones que se describen en esta página proporcionan un punto de partida. Tu conjunto de datos único y las consultas que piensas usar son los aspectos más importantes que debes tener en cuenta al diseñar un esquema para tus datos de serie temporal.

Los patrones de diseño básicos para almacenar datos de series temporales en Bigtable son los siguientes:

Datos de los ejemplos

Para ilustrar las diferencias entre los patrones, en los ejemplos de esta página se da por supuesto que almacena datos de una aplicación que registra las mediciones que realizan los globos meteorológicos cada minuto. Usamos el término evento para referirnos a una sola solicitud que escribe una o varias celdas al mismo tiempo. Los IDs de ubicación se corresponden con las Google Cloud regiones.

Medición Ejemplo
  1. Las marcas de tiempo de esta página tienen el formato `tAAAA-MM-DD-HHMM` para que sean más fáciles de leer. En una tabla de producción, las marcas de tiempo suelen expresarse como el número de microsegundos transcurridos desde el 1 de enero de 1970 a las 00:00:00 UTC, como `1616264288050807`.
Presión (pascales) 94587
Temperatura (Celsius) 9.5
Humedad (porcentaje) 65
Altitud (metros) 601
Datos relacionados Ejemplo
ID de globo 3698
Ubicación asia‑southeast1
Marca de tiempo 1 t2021-03-05-1204

Segmentos de tiempo

En un patrón de intervalo de tiempo, cada fila de la tabla representa un intervalo de tiempo, como una hora, un día o un mes. Una clave de fila incluye un identificador que no es una marca de tiempo, como week49, para el periodo registrado en la fila, junto con otros datos de identificación.

El tamaño del contenedor que uses (por ejemplo, minutos, horas o días) depende de las consultas que quieras usar y de los límites de tamaño de los datos de Bigtable. Por ejemplo, si las filas que contienen una hora de datos superan el tamaño máximo recomendado por fila (100 MB), es mejor usar filas que representen media hora o un minuto.

Estas son algunas de las ventajas de los patrones de contenedor de tiempo:

  • Mejorará el rendimiento. Por ejemplo, si almacena 100 mediciones, Bigtable las escribirá y leerá más rápido si están en una fila que si están en 100 filas.

  • Los datos almacenados de esta forma se comprimen de forma más eficiente que los datos de las tablas altas y estrechas.

Entre las desventajas se incluyen las siguientes:

  • Los patrones de diseño de esquemas de contenedores de tiempo son más complicados que los patrones de una sola marca de tiempo y pueden requerir más tiempo y esfuerzo para desarrollarse.

Añadir columnas nuevas para eventos nuevos

En este patrón de contenedor de tiempo, se escribe una columna nueva en una fila por cada evento y se almacenan los datos en el calificador de columna en lugar de como valor de celda. Esto significa que, en cada celda, se envía la familia de columnas, el calificador de columna y la marca de tiempo, pero no el valor.

Siguiendo este patrón para los datos de muestra de globos meteorológicos, cada fila contiene todas las mediciones de una sola métrica, como pressure, de un solo globo meteorológico a lo largo de una semana. Cada clave de fila contiene la ubicación, el ID del globo, la métrica que estás registrando en la fila y un número de semana. Cada vez que un globo informa de sus datos de una métrica, se añade una nueva columna a la fila. El calificador de columna contiene la medición, la presión en pascales, del minuto identificado por la marca de tiempo de la celda.

En este ejemplo, después de tres minutos, una fila podría tener este aspecto:

Clave de fila 94558 94122 95992
us-west2#3698#pressure#week1 "" (t2021-03-05-1200) "" (t2021-03-05-1201) "" (t2021-03-05-1202)

Estos son algunos casos prácticos de este patrón:

Añadir celdas para eventos nuevos

En este patrón de contenedor de tiempo, se añaden celdas nuevas a las columnas ya existentes cuando se escribe un evento nuevo. Este patrón te permite aprovechar la capacidad de Bigtable para almacenar varias celdas con marca de tiempo en una fila y una columna determinadas. Es importante especificar reglas de recogida de elementos no utilizados cuando se usa este patrón.

Tomando como ejemplo los datos de un globo meteorológico, cada fila contiene todas las mediciones de un solo globo meteorológico a lo largo de una semana. El prefijo de clave de fila es un identificador de la semana, por lo que puedes leer los datos de toda una semana de varios globos con una sola consulta. Los otros segmentos de la clave de fila son la ubicación en la que opera el globo y el número de ID del globo. La tabla tiene una familia de columnas, measurements, y esa familia de columnas tiene una columna por cada tipo de medición: pressure, temperature, humidity y altitude.

Cada vez que un globo envía sus mediciones, la aplicación escribe nuevos valores en la fila que contiene los datos de la semana actual del globo, y escribe celdas adicionales con marcas de tiempo en cada columna. Al final de la semana, cada columna de cada fila tiene una medición por cada minuto de la semana, es decir,10.080 celdas (si tu política de recogida de elementos no utilizados lo permite).

Cada columna de cada fila contiene una medición de cada minuto de la semana. En este caso, después de tres minutos, las dos primeras columnas de una fila podrían tener este aspecto:

Clave de fila presión temp
asia-south2#3698#week1 94558 (t2021-03-05-1200) 9.5 (t2021-03-05-1200)
94122 (t2021-03-05-1201) 9.4 (t2021-03-05-1201)
95992 (t2021-03-05-1202) 9.2 (t2021-03-05-1202)

Estos son algunos casos prácticos de este patrón:

  • Quieres medir los cambios en las mediciones a lo largo del tiempo.

Filas de una sola marca de tiempo

En este patrón, se crea una fila por cada evento o medición nuevos en lugar de añadir celdas a las columnas de las filas ya existentes. El sufijo de la clave de fila es el valor de la marca de tiempo. Las tablas que siguen este patrón suelen ser altas y estrechas, y cada columna de una fila contiene solo una celda.

Serializado de una sola marca de tiempo

En este patrón, se almacenan todos los datos de una fila en una sola columna en un formato serializado, como un búfer de protocolo (protobuf). Este enfoque se describe con más detalle en el artículo Diseñar el esquema.

Por ejemplo, si usas este patrón para almacenar los datos de un globo meteorológico, tu tabla podría tener este aspecto después de cuatro minutos:

Clave de fila measurements_blob
us-west2#3698#2021-03-05-1200 protobuf_1
us-west2#3698#2021-03-05-1201 protobuf_2
us-west2#3698#2021-03-05-1202 protobuf_3
us-west2#3698#2021-03-05-1203 protobuf_4

Estas son algunas de las ventajas de este patrón:

  • Eficiencia del almacenamiento

  • Rapidez

Entre las desventajas se incluyen las siguientes:

  • La imposibilidad de recuperar solo determinadas columnas al leer los datos

  • La necesidad de deserializar los datos después de leerlos

Estos son algunos casos prácticos de este patrón:

  • No sabes cómo vas a consultar los datos o tus consultas pueden fluctuar.

  • Necesitas reducir los costes más que poder filtrar los datos antes de recuperarlos de Bigtable.

  • Cada evento contiene tantas mediciones que puede superar el límite de 100 MB por fila si almacena los datos en varias columnas.

Single-timestamp unserialized

En este patrón, cada evento se almacena en su propia fila, aunque solo registre una medición. Los datos de las columnas no están serializados.

Estas son algunas de las ventajas de este patrón:

  • Por lo general, es más fácil de implementar que un patrón de contenedor de tiempo.

  • Puede que dediques menos tiempo a perfeccionar tu esquema antes de usarlo.

Las desventajas de este patrón suelen superar a las ventajas:

  • Bigtable tiene un rendimiento inferior con este patrón.

  • Los datos almacenados de esta forma no se comprimen de forma tan eficiente como los datos de las columnas más anchas.

  • Aunque la marca de tiempo esté al final de la clave de fila, este patrón puede provocar puntos de acceso.

Estos son algunos casos prácticos de este patrón:

  • Quieres recuperar siempre todas las columnas, pero solo un intervalo de marcas de tiempo específico, pero tienes un motivo para no almacenar los datos en una estructura serializada.

  • Quieres almacenar un número ilimitado de eventos.

Si usamos los datos de ejemplo del globo meteorológico, la familia de columnas y los calificadores de columna son los mismos que en el ejemplo con contenedores de tiempo y celdas nuevas. Sin embargo, en este patrón, cada conjunto de mediciones registradas de cada globo meteorológico se escribe en una nueva fila. En la siguiente tabla se muestran cinco filas escritas con este patrón:

Clave de fila presión temperatura Humedad altitud
us-west2#3698#2021-03-05-1200 94558 9,6 61 612
us-west2#3698#2021-03-05-1201 94122 9.7 62 611
us-west2#3698#2021-03-05-1202 95992 9.5 58 602
us-west2#3698#2021-03-05-1203 96025 9.5 66 598
us-west2#3698#2021-03-05-1204 96021 9,6 63 624

Estrategias adicionales

Si necesitas enviar varias consultas diferentes para el mismo conjunto de datos, te recomendamos que almacenes los datos en varias tablas, cada una con una clave de fila diseñada para una de las consultas.

En algunos casos, también puedes combinar patrones. Por ejemplo, puedes almacenar datos serializados en filas que representen intervalos de tiempo, siempre que no permitas que las filas sean demasiado grandes.

Siguientes pasos