Cómo almacenar marcas de tiempo en Dynamodb

Cómo almacenar marcas de tiempo en Dynamodb
Las marcas de tiempo son una de las características de base de datos más vitales y una tarea que vale la pena dominar. Dynamodb también presenta varias formas de representar y almacenar una marca de tiempo. Más obviamente, puede almacenar convenientemente marcas de tiempo en DynamoDB como atributos de la tabla.

Puede almacenar una marca de tiempo como un tipo de datos de número o un tipo de datos de cadena. Las marcas de tiempo almacenadas como un tipo de datos numerosos tienen un valor de marca de tiempo UNIX (segundos o milisegundos), mientras que las almacenadas como tipos de datos de cadena cuentan con los formatos de cadena ISO 8601.

Idealmente, trabajar con marcas de tiempo también requiere una precisión inmejorable. Cuanto más precisas sean sus marcas de tiempo, más fáciles serán de consulta. Por ejemplo, puede especificar el año de creación para cada elemento en su tabla o obtener más específico indicando el minuto, el segundo o el milisegundo. Cuanto más específicas sean sus marcas de tiempo, más fáciles serán clasificar, consultar o filtrar.

Almacene las marcas de tiempo en DynamodB utilizando el tipo de datos de número

Puede usar el tipo de datos de número para almacenar una marca de tiempo. En esta ilustración, nuestro tipo de datos numéricos tomará la forma de un atributo de fecha. Un ejemplo de Boto3 (AWS SDK para Python) de cómo almacenar una marca de tiempo en DynamoDB es el siguiente:

importar boto3
Importar DateTetime
# Crear un cliente Dynamodb
Dynamodb = Boto3.Cliente ('Dynamodb')
# Obtenga la marca de tiempo actual
Timestamp = int (DateTime.fecha y hora.utcnow ().marca de tiempo ())
# Crea un nuevo elemento en tu mesa
Respuesta = Dynamodb.put_item (
TableName = 'my-table-name',
Item =
'id': 'n': '1234',
'Timestamp': 'n': str (timestamp)

)

El tipo de datos para la marca de tiempo anterior almacena el número en segundos desde la medianoche del 1 de enero de 1970, que es la época. Por supuesto, también usará la zona horaria de UTC.

Recuperar una marca de tiempo en Dynamodb

Recuperar una marca de tiempo en DynamodB no es una empresa compleja. Como cualquier otra operación de recuperación en DynamodB, usará el comando get_item en el extremo del cliente para recuperar marcas de tiempo. A continuación se muestra un comando de ejemplo:

importar boto3
# Crear un cliente Dynamodb
Dynamodb = Boto3.Cliente ('Dynamodb')
# Recupere el artículo de su mesa
Respuesta = Dynamodb.obtiene el objeto(
TableName = 'my-table-name',
Clave =
'id': 'n': '1234'

)
# Obtenga la marca de tiempo del artículo
item = respuesta ['item']
timestamp = int (item ['timestamp'] ['n'])

Convertir una marca de tiempo en un objeto de fecha y hora

Puede convertir aún más su marca de tiempo en un objeto DateTime utilizando el módulo DateTime. Vea la ilustración a continuación:

Importar DateTetime
# Convierta la marca de tiempo en un objeto de fecha y hora
dt = DateTime.fecha y hora.fromtimeStamp (marca de tiempo)
Imprimir (DT)

Almacene una marca de tiempo con un atributo actualizado_at

Curiosamente, también puede almacenar una marca de tiempo en DynamoDB con un atributo actualizado_at. En este ejemplo, estableceremos nuestro atributo actualizado_at al 2023-01-01.

importar boto3
# Crear un cliente Dynamodb
Dynamodb = Boto3.Cliente ('Dynamodb')
# Establezca la marca de tiempo en 2023-01-01
timestamp = "2023-01-01"
# Establecer el nombre de la tabla
table_name = "my_table-name"
# Establecer la clave principal
PK = "1234"
# Establezca el valor para almacenarse
valor = "feliz año nuevo"
# Establecer el mapa de atributos
attribute_map =
"Actualated_at":
"S": marca de tiempo
,
"valor":
"S": valor


# Pon el artículo en la mesa
Respuesta = Dynamodb.put_item (
TableName = table_name,
Item =
"paquete":
"S": PK
,
** attribute_map

)
Imprimir (respuesta)

El ejemplo anterior almacenará un elemento con una clave principal de 1234 y dos atributos: actualizado_at y valor. El actualizado_at El atributo se establecerá en la marca de tiempo 2023-01-01, y el valor El atributo se establecerá en la cadena "feliz año nuevo."

Consulta dinamodb entre dos marcas de tiempo

Puede consultar elementos desde una tabla Dynamodb con un actualizado_at atributo entre dos marcas de tiempo. Para lograr esto, use el consulta operación y especifique el KeyConditionExpression parámetro.

Aquí hay un ejemplo de cómo puede consultar los artículos con un actualizado_at atributo entre 2022-01-01 y 2022-12-31:

importar boto3
# Crear un cliente Dynamodb
Dynamodb = Boto3.Cliente ('Dynamodb')
# Establecer el nombre de la tabla
table_name = "my_table_name"
# Establezca las marcas de tiempo de inicio y finalización
start_timestamp = "2022-01-01"
end_timestamp = "2022-12-31"
# Consulta la mesa
Respuesta = Dynamodb.consulta(
TableName = table_name,
KeyConditionExpression = "Updated_atbetween: start_timestamp y: end_timestamp",
ExpressionAttributeValues ​​=
": start_timestamp":
"S": start_timestamp
,
": end_timestamp":
"S": end_timestamp


)
# Imprima los resultados de la consulta
Imprimir (respuesta)

El código anterior devolverá todos los elementos en la tabla que tienen un actualizado_at atributo entre 2022-01-01 y 2022-12-31, inclusivo. El KeyConditionExpression El parámetro especifica la condición que debe cumplirse para que se devuelva un elemento y el ExpressionAttributeValues El parámetro establece los valores para los marcadores de posición de atributo en el KeyConditionExpression.

También puedes usar el ScanIdexForward parámetro para especificar el orden en que se deben devolver los elementos. Por defecto, el ScanIdexForward El parámetro se establece en Verdadero, lo que significa que los artículos se devolverán en orden ascendente. Si lo configuras en FALSO, Los artículos serán devueltos en orden descendente.

Conclusión

Este artículo discutió los conceptos básicos de almacenar marcas de tiempo en Dynamodb. Ahora puede almacenar marcas de tiempo correctamente en Dynamodb. También destacamos cómo podría trabajar con marcas de tiempo. Como todas las operaciones de DynamodB, puede usar marcas de tiempo a través de su AWS SDK o AWS preferido.