Soy nuevo en DynamoDB. Deseo crear una tabla que use DeviceID como clave hash, Timestamp como clave de rango y algunos datos.
{ DeviceID: 123, Timestamp: "2016-11-11T17:21:07.5272333Z", X: 12, Y: 35 }
En SQL, podemos usar el tipo de fecha y hora para la marca de tiempo, pero en DynamoDB no hay ninguno.
Para el tipo de datos elegido, ¿en qué tipo de formato de marca de tiempo debo escribir? ¿Formato ISO (por ejemplo: 2016-11-11T17: 21: 07.5272333Z) o tiempo de época (por ejemplo: 1478943038816)?
Necesito buscar en la tabla en un rango de tiempo, por ejemplo: 1/1/2015 10:00:00 am hasta 31/12/2016 11:00:00 pm
Respuestas:
El tipo de datos String debe usarse para Fecha o Marca de tiempo.
Tipo de datos de DynamoDB para fecha o marca de tiempo
Sí, las consultas de rango son compatibles cuando la fecha se almacena como cadena. El ENTRE se puede utilizar en FilterExpresssion. Obtuve los elementos en el resultado usando las siguientes expresiones de filtro.
FilterExpression sin tiempo: -
FilterExpression con tiempo: -
Valores de la base de datos: -
Formato 1 - con zona horaria:
Formato 2 - sin zona horaria: -
fuente
El tipo de datos depende de sus requisitos.
Puede usar String usando formato ISO o Number usando formato de época.
La ventaja del formato ISO (String) es la legibilidad humana; sin embargo, DynamoDB no es compatible con Time To Live (TTL) para este formato. Todos los filtros funcionan como 'entre' y 'rango' como se explica en notionquest.
La ventaja de usar el formato de época (Número) es que puede usar la función TTL y todos los filtros.
TLDR;
Formato Epoch (tipo de número): puede usar el
formato ISO Time To Live (tipo String): no puede usar Time To Live, pero es más legible por humanos
fuente
El tipo de datos Número O el tipo de datos Cadena
se puede usar para la fecha o la marca de tiempo, no solo la cadena, ya que la respuesta aceptada en esta pregunta se identifica incorrectamente mientras se ignora el número.
Tipo de datos de DynamoDB para fecha o marca de tiempo
fuente
para poder filtrar los resultados al enviar una solicitud de consulta, usé el formato de época para DateTime, es más eficiente que usar una cadena.
imagine estos escenarios: últimos 31 días, últimas 24 horas, ... nuevamente, todo es posible usando el formato de cadena, ya que también tiene el operador starts_with ( verifique el tercer ejemplo en el enlace a continuación en el documento de AWS ) pero los valores numéricos son mucho más eficientes en términos de rendimiento mientras clasifica (compara) y calcula.
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.html#Query.KeyConditionExpressions
es fácil convertir la fecha y la hora al 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ón
import time epoch = time.time() # converting back to date-time initial_date = time.gmtime(epoch )
fuente