Gravações - Amazon Timestream

Para recursos semelhantes aos do Amazon Timestream para LiveAnalytics, considere o Amazon Timestream para InfluxDB. Ele oferece ingestão de dados simplificada e tempos de resposta de consulta de um dígito em milissegundos para análises em tempo real. Saiba mais aqui.

Gravações

Você pode coletar dados de séries temporais de dispositivos conectados, sistemas de TI e equipamentos industriais e gravá-los no Timestream para Live Analytics. O Timestream para Live Analytics permite que você grave pontos de dados de uma única série temporal e/ou pontos de dados de várias séries em uma única solicitação de gravação quando a série temporal pertence à mesma tabela. Para sua conveniência, o Timestream para Live Analytics oferece um esquema flexível que detecta automaticamente os nomes das colunas e os tipos de dados das tabelas do Timestream para Live Analytics com base nos nomes das dimensões e nos tipos de dados dos valores de medida que você especifica ao invocar gravações no banco de dados. Você também pode gravar lotes de dados no Timestream para Live Analytics.

nota

O Timestream para Live Analytics oferece suporte à semântica de consistência eventual para leituras. Isso significa que quando você consulta dados imediatamente após a gravação de um lote de dados no Timestream para Live Analytics, os resultados da consulta podem não refletir os resultados de uma operação de gravação recém-concluída. Os resultados também podem incluir alguns dados obsoletos. Da mesma forma, ao gravar dados de séries temporais com uma ou mais novas dimensões, uma consulta pode retornar um subconjunto parcial de colunas por um curto período de tempo. Se você repetir essas solicitações de consulta após um curto período, o resultado deverá retornar os dados mais recentes.

Você pode gravar dados usando os AWS SDKs, AWS CLI ou por meio de AWS Lambda, AWS IoT Core, Amazon Managed Service for Apache Flink, Amazon Kinesis, Amazon MSK e Telegraf de código aberto.

Tipos de dados

O Timestream para Live Analytics oferece suporte aos seguintes tipos de dados para gravações.

Tipo de dados Descrição

BIGINT

Representa um contador de números inteiros assinado de 64 bits.

BOOLEAN

Representa os dois valores verdadeiros da lógica, a saber, verdadeiro e falso.

DOUBLE

Precisão variável de 64 bits que implementa o padrão IEEE 754 para aritmética de ponto flutuante binário.

nota

Existem funções de linguagem de consulta para Infinity e valores duplos NaN que podem ser usados em consultas. Mas você não pode gravar esses valores no Timestream.

VARCHAR

Dados de caracteres de comprimento variável com um comprimento máximo opcional. O limite máximo é de 2 KB.

MULTI

Tipo de dados para registros de várias medidas. Esse tipo de dados inclui uma ou mais medidas do tipo BIGINT, BOOLEAN, DOUBLE, VARCHAR e TIMESTAMP.

TIMESTAMP

Representa uma instância no tempo usando tempo de precisão de nanossegundos em UTC, rastreando o tempo desde o horário do Unix. Atualmente, esse tipo de dados é suportado somente para registros de várias medidas (ou seja, dentro de valores de medida do tipo MULTI).

YYYY-MM-DD hh:mm:ss.sssssssss

Grava registros de data e hora de suporte no intervalo de 1970-01-01 00:00:00.000000000 a 2262-04-11 23:47:16.854775807.

Sem definição de esquema inicial

Antes de enviar dados para o Amazon Timestream para Live Analytics, você deve criar um banco de dados e uma tabela usando o Console de gerenciamento da AWS, os SDKs Timestream para Live Analytics ou o Timestream para Live Analytics API. Para obter mais informações, consulte Criar um banco de dados e Criar uma tabela. Ao criar a tabela, você não precisa definir o esquema antecipadamente. O Amazon Timestream para Live Analytics detecta automaticamente o esquema com base nas medidas e dimensões dos pontos de dados enviados, para que você não precise mais alterar seu esquema off-line para adaptá-lo aos dados de séries temporais que mudam rapidamente.

Gravação de dados (inserções e acréscimos)

A operação de gravação no Amazon Timestream para Live Analytics permite que você insira e atualize dados. Por padrão, as gravações no Amazon Timestream para Live Analytics seguem a semântica primeira gravação vence, em que os dados são armazenados somente como acréscimos e os registros duplicados são rejeitados. Embora a semântica da primeira gravação vence satisfaça os requisitos de muitos aplicativos de séries temporais, há cenários em que os aplicativos precisam atualizar os registros existentes de maneira idempotente e/ou gravar dados com a semântica da última gravação vence, em que o registro com a versão mais alta é armazenado no serviço. Para lidar com esses cenários, o Amazon Timestream para Live Analytics oferece a capacidade de alterar dados. Upsert é uma operação que insere um registro no sistema quando o registro não existe ou atualiza o registro quando ele existe. Quando o registro é atualizado, ele é atualizado de forma idempotente.

Não há uma operação em nível de registro para exclusão. Mas tabelas e bancos de dados podem ser excluídos.

Gravando dados no armazenamento na memória e no armazenamento magnético

O Amazon Timestream para Live Analytics oferece a capacidade de gravar dados diretamente no armazenamento na memória e no armazenamento magnético. O armazenamento na memória é otimizado para gravações de dados de alto throughput e o armazenamento magnético é otimizado para gravações de dados de chegada tardia.

Os dados de chegada tardia são dados com um registro de data e hora anterior à hora atual e fora do período de retenção do armazenamento na memória. Você deve habilitar explicitamente a capacidade de gravar dados de chegada tardia no armazenamento magnético habilitando gravações do armazenamento magnético para a tabela. Além disso, MagneticStoreRejectedDataLocation é definido quando uma tabela é criada. Para gravar no armazenamento magnético, os chamadores do WriteRecords devem ter permissões S3:PutObject para o bucket do S3 especificado no MagneticStoreRejectedDataLocation durante a criação da tabela. Para obter mais informações, consulte CreateTable, WriteRecords e PutObject.

Gravando dados com registros de medida única e registros de várias medidas

O Amazon Timestream para Live Analytics oferece a capacidade de gravar dados usando dois tipos de registros, que são os registros de medida única e registros de várias medidas.

Registros de medida única

Os registros de medida única permitem que você envie uma única medida por registro. Quando os dados são enviados para o Timestream para Live Analytics usando esse formato, o Timestream para Live Analytics cria uma linha de tabela por registro. Isso significa que, se um dispositivo emitir 4 métricas e cada métrica for enviada como um registro de medida única, o Timestream para Live Analytics criará 4 linhas na tabela para armazenar esses dados, e os atributos do dispositivo serão repetidos para cada linha. Esse formato é recomendado nos casos em que você deseja monitorar uma única métrica de um aplicativo ou quando seu aplicativo não emite várias métricas ao mesmo tempo.

Registros de várias medidas

Com registros de várias medidas, você pode armazenar várias medidas em uma única linha da tabela, em vez de armazenar uma medida por linha da tabela. Portanto, os registros de várias medidas permitem que você migre seus dados existentes de bancos de dados relacionais para o Amazon Timestream para Live Analytics com o mínimo de alterações.

Você também pode agrupar mais dados em uma única solicitação de gravação do que registros de medida única. Isso aumenta o throughput e o desempenho da gravação de dados, além de reduzir o custo da gravação de dados. Isso ocorre porque agrupar mais dados em uma solicitação de gravação permite que o Amazon Timestream para Live Analytics identifique mais dados repetíveis em uma única solicitação de gravação (quando aplicável) e cobre apenas uma vez por dados repetidos.

Registros de várias medidas

Com registros de várias medidas, você pode armazenar seus dados de séries temporais em um formato mais compacto na memória e no armazenamento magnético, o que ajuda a reduzir os custos de armazenamento de dados. Além disso, o armazenamento de dados compacto permite escrever consultas mais simples para recuperação de dados, melhora o desempenho das consultas e reduz o custo das consultas.

Além disso, os registros de várias medidas também suportam o tipo de dados TIMESTAMP para armazenar mais de um registro de data e hora em um registro de série temporal. Os atributos TIMESTAMP em um registro de várias medidas oferecem suporte aos registros de data e hora no futuro ou no passado. Portanto, os registros de várias medidas ajudam a melhorar o desempenho, o custo e a simplicidade da consulta, além de oferecer mais flexibilidade para armazenar diferentes tipos de medidas correlacionadas.

Benefícios

Estes são os benefícios de usar registros de várias medidas.

  • Desempenho e custo — os registros de várias medidas permitem que você grave várias medidas de séries temporais em uma única solicitação de gravação. Isso aumenta o throughput de gravação e também reduz o custo das gravações. Com registros de várias medidas você pode armazenar dados de forma mais compacta, o que ajuda a reduzir os custos de armazenamento de dados. O armazenamento de dados compacto de registros de várias medidas resulta em menos dados sendo processados por consultas. Isso foi projetado para melhorar o desempenho geral da consulta e ajudar a reduzir o custo da consulta.

  • Simplicidade da consulta — com registros de várias medidas, você não precisa escrever expressões de tabela comuns (CTEs) complexas em uma consulta para ler várias medidas com o mesmo registro de data e hora. Isso acontece porque as medidas são armazenadas como colunas em uma única linha da tabela. Portanto, registros de várias medidas permitem escrever consultas mais simples.

  • Flexibilidade de modelagem de dados — Você pode gravar registros de data e hora futuros no Timestream para Live Analytics usando o tipo de dados TIMESTAMP e registros de várias medidas. Um registro de várias medidas pode ter vários atributos do tipo de dados registro de data e hora, além do campo de hora em um registro. Os atributos registro de data e hora, em um registro de várias medidas, podem ter registros de data e hora no futuro ou no passado e se comportar como o campo de hora, exceto que o Timestream para Live Analytics não indexa os valores do tipo registro de data e hora em um registro de várias medidas.

Casos de uso

Você pode usar registros de várias medidas para qualquer aplicativo de série temporal que gere mais de uma medição do mesmo dispositivo a qualquer momento. Estes são alguns dos aplicativos de exemplo.

  • Uma plataforma de streaming de vídeo que gera centenas de métricas em um determinado momento.

  • Dispositivos médicos que geram medições como níveis de oxigênio no sangue, frequência cardíaca e pulso.

  • Equipamentos industriais, como plataformas de petróleo, que geram métricas, sensores de temperatura e clima.

  • Outros aplicativos que são arquitetados com um ou mais microsserviços.

Por exemplo: monitoramento do desempenho e da integridade de um aplicativo de streaming de vídeo

Considere um aplicativo de streaming de vídeo executado em 200 instâncias do EC2. Você quer usar o Amazon Timestream para Live Analytics para armazenar e analisar as métricas emitidas pelo aplicativo, para que você possa entender o desempenho e a integridade do seu aplicativo, identificar rapidamente anomalias, resolver problemas e descobrir oportunidades de otimização.

Modelaremos esse cenário com registros de medida única e registros de várias medidas e, em seguida, vamos comparar e contrastar as duas abordagens. Para cada abordagem, fazemos as seguintes suposições.

  • Cada instância do EC2 emite quatro medidas (video_startup_time, rebuffering_ratio, video_playback_failures e average_frame_rate) e quatro dimensões (device_id, device_type, os_version e region) por segundo.

  • Você deseja armazenar 6 horas de dados no armazenamento na memória e 6 meses de dados no armazenamento magnético.

  • Para identificar anomalias, você configurou 10 consultas que são executadas a cada minuto para identificar qualquer atividade incomum nos últimos minutos. Você também criou um painel com oito widgets que exibem as últimas 6 horas de dados, para que você possa monitorar seu aplicativo com eficiência. Esse painel é acessado por cinco usuários a qualquer momento e é atualizado automaticamente a cada hora.

Usando registros de medida única

Modelagem de dados: com registros de medida única, criaremos um registro para cada uma das quatro medidas (tempo de inicialização do vídeo, taxa de rebuffer, falhas na reprodução do vídeo e taxa média de quadros). Cada registro terá as quatro dimensões (device_id, device_type, os_version e region) e um registro de data e hora.

Gravações: quando você grava dados no Amazon Timestream para Live Analytics, os registros são construídos da seguinte forma.

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); } }

Quando você armazena registros de medida única, os dados são representados logicamente da seguinte forma.

Tempo device_id device_type os_version região nome_medida valor_medida::bigint valor_medida::duplo

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: você pode escrever uma consulta que recupere todos os pontos de dados com o mesmo registro de data e hora recebido nos últimos 15 minutos da seguinte maneira.

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

Custo do workload: o custo desse workload é estimado em US$ 373,23 por mês com registros de medida única

Usando registros de várias medidas

Modelagem de dados: com registros de várias medidas, criaremos um registro que contém todas as quatro medidas (tempo de inicialização do vídeo, taxa de rebuffer, falhas na reprodução do vídeo e taxa média de quadros), todas as quatro dimensões (device_id, device_type, os_version e region) e um registro de data e hora.

Gravações: quando você grava dados no Amazon Timestream para Live Analytics, os registros são construídos da seguinte forma.

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); } }

Quando você armazena registros de várias medidas, os dados são representados logicamente da seguinte forma.

Tempo device_id device_type os_version região nome_medida 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: você pode escrever uma consulta que recupere todos os pontos de dados com o mesmo registro de data e hora recebido nos últimos 15 minutos da seguinte maneira.

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)

Custo do workload: o custo do workload é estimado em US$ 127,43 com registros de várias medidas.

nota

Nesse caso, o uso de registros de várias medidas reduz o gasto mensal geral estimado em 2,5 vezes, com o custo de gravação de dados reduzido em 3,3 vezes, o custo de armazenamento reduzido em 3,3 vezes e o custo de consulta reduzido em 1,2 vezes.

Gravando dados com um registro de data e hora que existe no passado ou no futuro

O Timestream para Live Analytics oferece a capacidade de gravar dados com um registro de data e hora que fica fora da janela de retenção do armazenamento na memória por meio de alguns mecanismos diferentes.

  • Gravações no armazenamento magnético — Você pode gravar dados de chegada tardia diretamente no armazenamento magnético por meio de gravações no armazenamento magnético. Para usar gravações de armazenamento magnético, você deve primeiro habilitar gravações de armazenamento magnético para uma tabela. Em seguida, você pode ingerir dados na tabela usando o mesmo mecanismo usado para gravar dados no armazenamento na memória. O Amazon Timestream para Live Analytics gravará automaticamente os dados no armazenamento magnético com base em seu registro de data e hora.

    nota

    A latência de gravação para leitura do armazenamento magnético pode ser de até 6 horas, ao contrário da gravação de dados no armazenamento na memória, onde a latência de gravação para leitura está na faixa de menos de um segundo.

  • Tipo de dados TIMESTAMP para medidas — Você pode usar o tipo de dados TIMESTAMP para armazenar dados do passado, do presente ou do futuro. Um registro de várias medidas pode ter vários atributos do tipo de dados registro de data e hora, além do campo de hora em um registro. Os atributos registro de data e hora, em um registro de várias medidas, podem ter registros de data e hora no futuro ou no passado e se comportar como o campo de hora, exceto que o Timestream para Live Analytics não indexa os valores do tipo registro de data e hora em um registro de várias medidas.

    nota

    O tipo de dados TIMESTAMP é suportado somente para registros de várias medidas.

Consistência eventual das leituras

O Timestream para Live Analytics oferece suporte à semântica de consistência eventual para leituras. Isso significa que quando você consulta dados imediatamente após a gravação de um lote de dados no Timestream para Live Analytics, os resultados da consulta podem não refletir os resultados de uma operação de gravação recém-concluída. Se você repetir essas solicitações de consulta após um curto período, o resultado deverá retornar os dados mais recentes.