Para obtener capacidades similares a las de Amazon Timestream para LiveAnalytics, considere Amazon Timestream para InfluxDB. Ofrece una ingesta de datos simplificada y tiempos de respuesta a las consultas en milisegundos de un solo dígito para realizar análisis en tiempo real. Obtenga más información aquí.
Escrituras
Puede recopilar datos de serie temporal de dispositivos conectados, sistemas de TI y equipos industriales, y escribirlos en Timestream para Live Analytics. Timestream para Live Analytics le permite escribir puntos de datos de una sola serie temporal o puntos de datos de varias series en una sola solicitud de escritura cuando las series temporales pertenecen a la misma tabla. Para su conveniencia, Timestream para Live Analytics le ofrece un esquema flexible que detecta de manera automática los nombres de las columnas y los tipos de datos de las tablas de Timestream para Live Analytics según los nombres de las dimensiones y los tipos de datos de los valores de medición que especifique al invocar las escrituras en la base de datos. También puede escribir lotes de datos en Timestream para Live Analytics.
nota
Timestream para Live Analytics admite una semántica de coherencia eventual para las lecturas. Esto significa que, al consultar datos inmediatamente después de escribir un lote de datos en Timestream para Live Analytics, es posible que los resultados de la consulta no reflejen los resultados de una operación de escritura que se haya completado recientemente. Además, los resultados pueden incluir algunos datos obsoletos. Del mismo modo, al escribir datos de serie temporal con una o más dimensiones nuevas, una consulta puede devolver un subconjunto parcial de columnas durante un breve periodo de tiempo. Si repite estas solicitudes de consultas después de un breve intervalo, la respuesta debería mostrar los datos más recientes.
Puede escribir datos mediante los AWSSDK, AWS CLI o a través AWS Lambda, AWS IoT Core, Amazon Managed Service para Apache Flink, Amazon Kinesis, Amazon MSK y Telegraf de código abierto.
Temas
Tipos de datos
Timestream para LiveAnalytics admite los siguientes tipos de datos para las escrituras:
| Tipo de datos: | Descripción |
|---|---|
|
BIGINT |
Representa un entero con signo de 64 bits. |
|
BOOLEAN |
Representa los dos valores de verdad de la lógica, a saber, verdadero y falso. |
|
DOBLE |
Precisión variable de 64 bits que implementa el estándar IEEE 754 para la aritmética binaria de punto flotante. notaHay funciones de lenguaje de consultas para valores dobles |
|
VARCHAR |
Datos de caracteres de longitud variable con una longitud máxima opcional. El límite máximo es 2 KB. |
|
MULTI |
Tipo de datos para registros de múltiples medidas. Este tipo de datos incluye una o más medidas del tipo |
|
TIMESTAMP |
Representa una instancia en el tiempo mediante el tiempo de precisión de nanosegundos en UTC, rastreando el tiempo desde la hora Unix. Actualmente, este tipo de datos solo se admite para registros de medidas múltiples (es decir, dentro de los valores de medición del tipo
Las escrituras admiten marcas de tiempo en el intervalo de |
Sin definición de esquema inicial
Antes de enviar datos a Amazon Timestream para Live Analytics, debe crear una base de datos y una tabla con Consola de administración de AWS, SDK de Timestream para Live Analytics o las operaciones de la API de Timestream para Live Analytics. Para obtener más información, consulte Creación de una base de datos de y Creación de una tabla. Al crear la tabla, no será necesario definir el esquema por adelantado. Amazon Timestream para Live Analytics detecta automáticamente el esquema en función de las medidas y dimensiones de los puntos de datos que se envían, por lo que ya no es necesario modificar el esquema sin conexión para adaptarlo a los datos de serie temporal que cambian rápidamente.
Datos de escritura (inserciones y ajustes)
La operación de escritura en Amazon Timestream para Live Analytics le permite insertar y modificar datos. De forma predeterminada, las escrituras en Amazon Timestream para Live Analytics siguen al primer escritor gana la semántica, en la que los datos se almacenan solo como datos adjuntos y se rechazan los registros duplicados. Si bien el primer escritor gana, la semántica satisface los requisitos de muchas aplicaciones de series temporales, hay situaciones en las que las aplicaciones necesitan actualizar los registros existentes de forma de idempotencia o escribir datos con la semántica que gana el último escritor, gana la semántica, en la que el registro con la versión más alta se almacena en el servicio. Para abordar estas situaciones, Amazon Timestream para Live Analytics ofrece la posibilidad de actualizar los datos. Upsert es una operación que inserta un registro en el sistema cuando el registro no existe o lo actualiza cuando existe. Cuando se actualiza el registro, se actualiza de forma de idempotencia.
No hay ninguna operación de eliminar a nivel de registro. Sin embargo, las tablas y las bases de datos se pueden eliminar.
Escribir datos en el almacén de memoria y en el almacén magnético
Amazon Timestream para Live Analytics ofrece la posibilidad de escribir datos directamente en el almacén de memoria y en el almacén magnético. El almacén en memoria está optimizado para escrituras de datos de alto rendimiento y el almacén magnético está optimizado para escrituras de datos tardíos a un rendimiento inferior.
Los datos de llegada tardía son datos con una marca de tiempo anterior a la hora actual y fuera del período de retención del almacén de memoria. Debe habilitar de forma explícita la capacidad de escribir los datos que lleguen tarde en el almacén magnético habilitando la escritura en el almacén magnético para la tabla. Además, MagneticStoreRejectedDataLocation se define cuando se crea una tabla. Para escribir en el almacén magnético, las personas que llaman a WriteRecords deben tener los permisos de S3:PutObject para acceder al bucket de S3 especificado en MagneticStoreRejectedDataLocation durante la creación de la tabla. Para obtener más información, consulte CreateTable, WriteRecords y PutObject.
Escribir datos con registros de una sola medida y registros de múltiples medidas
Amazon Timestream para Live Analytics ofrece la posibilidad de escribir datos mediante dos tipos de registros, a saber, registros de una sola medida y registros de múltiples medidas.
Registros de medida única
Los registros de una sola medida le permiten enviar una única medida por registro. Cuando los datos se envían a Timestream para Live Analytics con este formato, Timestream para Live Analytics crea una fila de tabla por registro. Esto significa que si un dispositivo emite 4 métricas y cada métrica se envía como un registro de una sola medida, Timestream para Live Analytics creará 4 filas en la tabla para almacenar estos datos y los atributos del dispositivo se repetirán para cada fila. Se recomienda este formato en los casos en los que desee supervisar una única métrica de una aplicación o cuando la aplicación no emita varias métricas al mismo tiempo.
Registros de medidas múltiples
Con los registros de múltiples medidas, puede almacenar múltiples medidas en una sola fila de la tabla, en lugar de almacenar una medida por fila de la tabla. Por lo tanto, los registros de medidas múltiples le permiten migrar los datos existentes de las bases de datos relacionales a Amazon Timestream para Live Analytics con cambios mínimos.
También puede agrupar más datos en una sola solicitud de escritura que los registros de una única medida. Esto aumenta el rendimiento y el rendimiento de la escritura de datos y, además, reduce el costo de la escritura de datos. Esto se debe a que agrupar más datos en una solicitud de escritura permite a Amazon Timestream para Live Analytics identificar más datos repetibles en una sola solicitud de escritura (cuando proceda) y cobrar solo una vez por los datos repetidos.
Temas
Registros de múltiples medidas
Con los registros de medidas múltiples, puede almacenar sus datos de serie temporal en un formato más compacto en la memoria y en el almacén magnético, lo que ayuda a reducir los costos de almacenamiento de datos. Además, el almacenamiento de datos compacto se presta para escribir consultas más sencillas para la recuperación de datos, mejora el rendimiento de las consultas y reduce el costo de las consultas.
Además, los registros de múltiples medidas también admiten el tipo de datos TIMESTAMP para almacenar más de una marca temporal en un registro de serie temporal. Los atributos TIMESTAMP de un registro de múltiples medidas admiten marcas de tiempo futuras o pasadas. Por lo tanto, los registros de múltiples medidas ayudan a mejorar el rendimiento, el costo y la simplicidad de las consultas, y ofrecen más flexibilidad para almacenar diferentes tipos de medidas correlacionadas.
Ventajas
A continuación, se describen las ventajas de usar registros de múltiples medidas.
-
Rendimiento y costo: los registros de múltiples medidas permiten escribir varias medidas de serie temporal en una sola solicitud de escritura. Esto aumenta el rendimiento de la escritura de datos y, además, reduce el costo de la escritura. Con los registros de medidas múltiples, puede almacenar sus datos en una manera más compacta, lo que ayuda a reducir los costos de almacenamiento de datos. El almacenamiento compacto de datos de los registros de múltiples medidas hace que las consultas procesen menos datos. Esto está diseñado para mejorar el rendimiento general de las consultas y ayudar a reducir el costo de las consultas.
-
Simplicidad de consulta: con los registros de múltiples medidas, no es necesario escribir expresiones de tabla comunes (CTE) complejas en una consulta para leer varias medidas con la misma marca de tiempo. Esto se debe a que las medidas se almacenan como columnas en una sola fila de la tabla. Por lo tanto, los registros de medidas múltiples permiten escribir consultas más sencillas.
-
Flexibilidad de modelado de datos: puede escribir marcas de tiempo futuras en Timestream para Live Analytics mediante el tipo de datos TIMESTAMP y los registros de medidas múltiples. Un registro de varias medidas puede tener varios atributos del tipo de datos TIMESTAMP, además del campo de tiempo de un registro. Los atributos TIMESTAMP, en un registro de múltiples medidas, pueden tener marcas de tiempo en el futuro o en el pasado y comportarse como el campo de tiempo, excepto que Timestream para Live Analytics no indexa los valores de tipo TIMESTAMP en un registro de múltiples medidas.
Casos de uso
Puede usar registros de múltiples medidas para cualquier aplicación de serie temporal que genere más de una medición desde el mismo dispositivo en un momento dado. A continuación, se muestran algunas aplicaciones de ejemplo.
-
Una plataforma de transmisión de vídeo que genera cientos de métricas en un momento específico.
-
Dispositivos médicos que generan mediciones como los niveles de oxígeno en sangre, la frecuencia cardíaca y el pulso.
-
Equipos industriales, como plataformas petrolíferas, que generan sensores métricos, de temperatura y meteorológicos.
-
Otras aplicaciones que están diseñadas con uno o más microservicios.
Ejemplo: supervisión del rendimiento y el estado de una aplicación de transmisión de vídeo
Considere una aplicación de transmisión de vídeo que se ejecute en 200 instancias de EC2. Desea utilizar Amazon Timestream para Live Analytics para almacenar y analizar las métricas emitidas por la aplicación, de modo que pueda comprender el rendimiento y el estado de la aplicación, identificar rápidamente las anomalías, resolver problemas y descubrir oportunidades de optimización.
Modelaremos esta situación con registros de una sola medida y registros de múltiples medidas y, a continuación, compararemos o contrastaremos ambos enfoques. Para cada enfoque, hacemos las siguientes suposiciones.
-
Cada instancia de EC2 emite cuatro medidas (video_startup_time, rebuffering_ratio, video_playback_failures, y average_frame_rate) y cuatro dimensiones (device_id, device_type, os_version y región) por segundo.
-
Desea almacenar 6 horas de datos en el almacén de memoria y 6 meses de datos en el almacén magnético.
-
Para identificar las anomalías, ha configurado 10 consultas que se ejecutan cada minuto para identificar cualquier actividad inusual producida en los últimos minutos. También ha creado un panel de control con ocho widgets que muestran los datos de las últimas seis horas, para que pueda supervisar su aplicación de forma eficaz. Cinco usuarios acceden a este panel en un momento dado y se actualiza de forma automática cada hora.
Uso de registros de medida única
Modelado de datos: con los registros de una sola medida, crearemos un registro para cada una de las cuatro medidas (tiempo de inicio del vídeo, relación de realmacenamiento en búfer, errores de reproducción del vídeo y velocidad media de fotogramas). Cada registro tendrá las cuatro dimensiones (device_id, device_type, os_version y región) y una marca de tiempo.
Escritura: al escribir datos en Amazon Timestream para Live Analytics, los registros se crean de la siguiente manera.
public void writeRecords() { System.out.println("Writing records"); // Specify repeated values for all records List<Record> records = new ArrayList<>(); final long time = System.currentTimeMillis(); List<Dimension> dimensions = new ArrayList<>(); final Dimension device_id = new Dimension().withName("device_id").withValue("12345678"); final Dimension device_type = new Dimension().withName("device_type").withValue("iPhone 11"); final Dimension os_version = new Dimension().withName("os_version").withValue("14.8"); final Dimension region = new Dimension().withName("region").withValue("us-east-1"); dimensions.add(device_id); dimensions.add(device_type); dimensions.add(os_version); dimensions.add(region); Record videoStartupTime = new Record() .withDimensions(dimensions) .withMeasureName("video_startup_time") .withMeasureValue("200") .withMeasureValueType(MeasureValueType.BIGINT) .withTime(String.valueOf(time)); Record rebufferingRatio = new Record() .withDimensions(dimensions) .withMeasureName("rebuffering_ratio") .withMeasureValue("0.5") .withMeasureValueType(MeasureValueType.DOUBLE) .withTime(String.valueOf(time)); Record videoPlaybackFailures = new Record() .withDimensions(dimensions) .withMeasureName("video_playback_failures") .withMeasureValue("0") .withMeasureValueType(MeasureValueType.BIGINT) .withTime(String.valueOf(time)); Record averageFrameRate = new Record() .withDimensions(dimensions) .withMeasureName("average_frame_rate") .withMeasureValue("0.5") .withMeasureValueType(MeasureValueType.DOUBLE) .withTime(String.valueOf(time)); records.add(videoStartupTime); records.add(rebufferingRatio); records.add(videoPlaybackFailures); records.add(averageFrameRate); WriteRecordsRequest writeRecordsRequest = new WriteRecordsRequest() .withDatabaseName(DATABASE_NAME) .withTableName(TABLE_NAME) .withRecords(records); try { WriteRecordsResult writeRecordsResult = amazonTimestreamWrite.writeRecords(writeRecordsRequest); System.out.println("WriteRecords Status: " + writeRecordsResult.getSdkHttpMetadata().getHttpStatusCode()); } catch (RejectedRecordsException e) { System.out.println("RejectedRecords: " + e); for (RejectedRecord rejectedRecord : e.getRejectedRecords()) { System.out.println("Rejected Index " + rejectedRecord.getRecordIndex() + ": " + rejectedRecord.getReason()); } System.out.println("Other records were written successfully. "); } catch (Exception e) { System.out.println("Error: " + e); } }
Al almacenar registros de una sola medida, los datos se representan de forma lógica de la siguiente manera.
| Time | device_id | device_type | os_version | region | measure_name | measure_value::bigint | measure_value::double |
|---|---|---|---|---|---|---|---|
|
2021-09-07 21:48:44 .000000000 |
12345678 |
iPhone 11 |
14,8 |
us-east-1 |
video_startup_time |
200 |
|
|
2021-09-07 21:48:44 .000000000 |
12345678 |
iPhone 11 |
14,8 |
us-east-1 |
rebuffering_ratio |
0,5 |
|
|
2021-09-07 21:48:44 .000000000 |
12345678 |
iPhone 11 |
14,8 |
us-east-1 |
video_playback_failures |
0 |
|
|
2021-09-07 21:48:44 .000000000 |
12345678 |
iPhone 11 |
14,8 |
us-east-1 |
average_frame_rate |
0,85 |
|
|
2021-09-07 21:53:44 .000000000 |
12345678 |
iPhone 11 |
14,8 |
us-east-1 |
video_startup_time |
500 |
|
|
2021-09-07 21:53:44 .000000000 |
12345678 |
iPhone 11 |
14,8 |
us-east-1 |
rebuffering_ratio |
1.5 |
|
|
2021-09-07 21:53:44 .000000000 |
12345678 |
iPhone 11 |
14,8 |
us-east-1 |
video_playback_failures |
10 |
|
|
2021-09-07 21:53:44 .000000000 |
12345678 |
iPhone 11 |
14,8 |
us-east-1 |
average_frame_rate |
0.2 |
Consultas: puede escribir una consulta que recupere todos los puntos de datos con la misma marca temporal recibidos en los últimos 15 minutos de la siguiente manera.
with cte_video_startup_time as ( SELECT time, device_id, device_type, os_version, region, measure_value::bigint as video_startup_time FROM table where time >= ago(15m) and measure_name=”video_startup_time”), cte_rebuffering_ratio as ( SELECT time, device_id, device_type, os_version, region, measure_value::double as rebuffering_ratio FROM table where time >= ago(15m) and measure_name=”rebuffering_ratio”), cte_video_playback_failures as ( SELECT time, device_id, device_type, os_version, region, measure_value::bigint as video_playback_failures FROM table where time >= ago(15m) and measure_name=”video_playback_failures”), cte_average_frame_rate as ( SELECT time, device_id, device_type, os_version, region, measure_value::double as average_frame_rate FROM table where time >= ago(15m) and measure_name=”average_frame_rate”) SELECT a.time, a.device_id, a.os_version, a.region, a.video_startup_time, b.rebuffering_ratio, c.video_playback_failures, d.average_frame_rate FROM cte_video_startup_time a, cte_buffering_ratio b, cte_video_playback_failures c, cte_average_frame_rate d WHERE a.time = b.time AND a.device_id = b.device_id AND a.os_version = b.os_version AND a.region=b.region AND a.time = c.time AND a.device_id = c.device_id AND a.os_version = c.os_version AND a.region=c.region AND a.time = d.time AND a.device_id = d.device_id AND a.os_version = d.os_version AND a.region=d.region
Costo de la carga de trabajo: el costo de esta carga de trabajo se estima en 373,23 USD al mes con registros de medición única
Uso de registros de múltiples medidas
Modelado de datos: con los registros de medidas múltiples, crearemos un registro que contenga las cuatro medidas (tiempo de inicio del vídeo, relación de realmacenamiento, errores de reproducción del vídeo y velocidad media de fotogramas), las cuatro dimensiones (device_id, device_type, os_version y región) y una marca temporal.
Escritura: al escribir datos en Amazon Timestream para Live Analytics, los registros se crean de la siguiente manera.
public void writeRecords() { System.out.println("Writing records"); // Specify repeated values for all records List<Record> records = new ArrayList<>(); final long time = System.currentTimeMillis(); List<Dimension> dimensions = new ArrayList<>(); final Dimension device_id = new Dimension().withName("device_id").withValue("12345678"); final Dimension device_type = new Dimension().withName("device_type").withValue("iPhone 11"); final Dimension os_version = new Dimension().withName("os_version").withValue("14.8"); final Dimension region = new Dimension().withName("region").withValue("us-east-1"); dimensions.add(device_id); dimensions.add(device_type); dimensions.add(os_version); dimensions.add(region); Record videoMetrics = new Record() .withDimensions(dimensions) .withMeasureName("video_metrics") .withTime(String.valueOf(time)); .withMeasureValueType(MeasureValueType.MULTI) .withMeasureValues( new MeasureValue() .withName("video_startup_time") .withValue("0") .withValueType(MeasureValueType.BIGINT), new MeasureValue() .withName("rebuffering_ratio") .withValue("0.5") .withType(MeasureValueType.DOUBLE), new MeasureValue() .withName("video_playback_failures") .withValue("0") .withValueType(MeasureValueType.BIGINT), new MeasureValue() .withName("average_frame_rate") .withValue("0.5") .withValueType(MeasureValueType.DOUBLE)) records.add(videoMetrics); WriteRecordsRequest writeRecordsRequest = new WriteRecordsRequest() .withDatabaseName(DATABASE_NAME) .withTableName(TABLE_NAME) .withRecords(records); try { WriteRecordsResult writeRecordsResult = amazonTimestreamWrite.writeRecords(writeRecordsRequest); System.out.println("WriteRecords Status: " + writeRecordsResult.getSdkHttpMetadata().getHttpStatusCode()); } catch (RejectedRecordsException e) { System.out.println("RejectedRecords: " + e); for (RejectedRecord rejectedRecord : e.getRejectedRecords()) { System.out.println("Rejected Index " + rejectedRecord.getRecordIndex() + ": " + rejectedRecord.getReason()); } System.out.println("Other records were written successfully. "); } catch (Exception e) { System.out.println("Error: " + e); } }
Al almacenar registros de múltiples medidas, los datos se representan de forma lógica de la siguiente manera.
| Time | device_id | device_type | os_version | region | measure_name | video_startup_time | rebuffering_ratio | video_ playback_failures | average_frame_rate |
|---|---|---|---|---|---|---|---|---|---|
|
2021-09-07 21:48:44 .000000000 |
12345678 |
iPhone 11 |
14,8 |
us-east-1 |
video_metrics |
200 |
0,5 |
0 |
0,85 |
|
2021-09-07 21:53:44 .000000000 |
12345678 |
iPhone 11 |
14,8 |
us-east-1 |
video_metrics |
500 |
1.5 |
10 |
0.2 |
Consultas: puede escribir una consulta que recupere todos los puntos de datos con la misma marca temporal recibidos en los últimos 15 minutos de la siguiente manera.
SELECT time, device_id, device_type, os_version, region, video_startup_time, rebuffering_ratio, video_playback_failures, average_frame_rate FROM table where time >= ago(15m)
Costo de la carga de trabajo: el costo de la carga de trabajo se estima en 127,43 USD con registros de múltiples medidas.
nota
En este caso, el uso de registros con múltiples medidas reduce 2,5 veces el gasto mensual total estimado: el costo de escritura de datos se reduce 3,3 veces, el costo de almacenamiento se reduce 3,3 veces y el costo de las consultas se reduce 1,2 veces.
Escribir datos con una marca temporal que existe en el pasado o en el futuro
Timestream para Live Analytics ofrece la posibilidad de escribir datos con una marca de tiempo que se encuentra fuera del intervalo de retención del almacén de memoria mediante un par de mecanismos diferentes.
-
Grabaciones en almacenamiento magnético: puede escribir los datos que lleguen tarde de forma directa en el almacén magnético mediante escrituras en el almacén magnético. Para utilizar las escrituras por almacenamiento magnético, primero debe habilitar las escrituras por almacenamiento magnético para una tabla. A continuación, puede introducir datos en la tabla mediante el mismo mecanismo utilizado para escribir los datos en el almacén de memoria. Amazon Timestream para Live Analytics escribirá de forma automática los datos en el almacén magnético en función de su marca temporal.
nota
La latencia de escritura a lectura del almacén magnético puede ser de hasta seis horas, a diferencia de la escritura de datos en el almacén de memoria, donde la latencia de escritura a lectura se sitúa en el rango de menos de un segundo.
-
Tipo de datos TIMESTAMP para medidas: puede usar el tipo de datos TIMESTAMP para almacenar datos del pasado, presente o futuro. Un registro de varias medidas puede tener varios atributos del tipo de datos TIMESTAMP, además del campo de tiempo de un registro. Los atributos TIMESTAMP, en un registro de múltiples medidas, pueden tener marcas de tiempo en el futuro o en el pasado y comportarse como el campo de tiempo, excepto que Timestream para Live Analytics no indexa los valores de tipo TIMESTAMP en un registro de múltiples medidas.
nota
El tipo de datos TIMESTAMP solo se admite para registros de múltiples medidas.
Consistencia eventual de las lecturas
Timestream para Live Analytics admite una semántica de coherencia eventual para las lecturas. Esto significa que, al consultar datos inmediatamente después de escribir un lote de datos en Timestream para Live Analytics, es posible que los resultados de la consulta no reflejen los resultados de una operación de escritura que se haya completado recientemente. Si repite estas solicitudes de consultas después de un breve intervalo, la respuesta debería mostrar los datos más recientes.