Eu sou novo no DynamoDB. Desejo criar uma tabela que usa DeviceID como a chave hash, Timestamp como minha chave de intervalo e alguns dados.
{ DeviceID: 123, Timestamp: "2016-11-11T17:21:07.5272333Z", X: 12, Y: 35 }
Em SQL, podemos usar o tipo datetime para Timestamp, mas no DynamoDB não há nenhum.
Para o tipo de dados escolhido, em que tipo de formato de carimbo de data / hora devo escrever? Formato ISO (por exemplo: 2016-11-11T17: 21: 07.5272333Z) ou tempo de época (por exemplo: 1478943038816)?
Preciso pesquisar na tabela em um intervalo de tempo, por exemplo: 01/01/2015 10:00:00 até 31/12/2016 23:00:00
Respostas:
O tipo de dados String deve ser usado para Data ou Timestamp.
Tipo de dados DynamoDB para data ou carimbo de data / hora
Sim, as consultas de intervalo são suportadas quando a data é armazenada como String. O BETWEEN pode ser usado em FilterExpresssion. Peguei os itens no resultado usando as expressões de filtro abaixo.
FilterExpression sem hora: -
FilterExpression com o tempo: -
Valores do banco de dados: -
Formato 1 - com fuso horário:
Formato 2 - sem fuso horário: -
fonte
O tipo de dados depende de seus requisitos.
Você pode usar String usando o formato ISO ou Número usando o formato de época.
A vantagem do formato ISO (String) é a legibilidade humana; entretanto, o DynamoDB não oferece suporte ao Time To Live (TTL) para este formato. Todos os filtros funcionam como 'entre' e 'intervalo', conforme explicado por notionquest.
A vantagem de usar o formato de época (Número) é que você pode usar o recurso TTL e todos os filtros.
TLDR;
Formato de época (tipo de número) - Pode usar o
formato ISO Time To Live (tipo String) - Não é possível usar Time To Live, mas é mais legível por humanos
fonte
O tipo de dados Number OU o tipo de dados String
pode ser usado para Data ou Timestamp - não apenas String, já que a Resposta Aceita nesta Pergunta destaca incorretamente enquanto ignora o Número.
Tipo de dados DynamoDB para data ou carimbo de data / hora
fonte
para que eu possa filtrar os resultados ao enviar uma solicitação de consulta, usei o formato de época para DateTime, é mais eficiente do que usar string.
imagine estes cenários: últimos 31 dias, últimas 24 horas, ... novamente, tudo é possível usando o formato de string, já que também tem o operador começa_com ( verifique o terceiro exemplo no link abaixo no documento AWS ), mas os valores numéricos são muito mais eficientes em termos de desempenho durante a classificação (comparação) e cálculo.
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.html#Query.KeyConditionExpressions
é fácil converter data-hora em formato de época
Javascript:
var date = new Date(); var epoch = date.getTime(); // converting back to date-time var initial_date = new Date(epoch);
C #
var date = DateTime.UtcNow; var epoch = new DateTimeOffset(date).ToUnixTimeSeconds(); // converting back to date-time var initial_date = DateTimeOffset.FromUnixTimeSeconds(epoch);
Pitão
import time epoch = time.time() # converting back to date-time initial_date = time.gmtime(epoch )
fonte