it-swarm.com.ru

Какой тип данных следует использовать для отметки времени в DynamoDB?

Я новичок в DynamoDB. Я хочу создать таблицу, которая использует DeviceID в качестве хеш-ключа, Timestamp в качестве моего ключа диапазона и некоторые данные.

{ DeviceID: 123, Timestamp: "2016-11-11T17:21:07.5272333Z", X: 12, Y: 35 }

В SQL мы можем использовать тип datetime для Timestamp, но в DynamoDB его нет. 

  1. Какой тип данных мне следует использовать? Строка? Число?
    enter image description here

  2. Для выбранного типа данных в каком формате метки времени я должен писать? Формат ISO (например, 2016-11-11T17: 21: 07.5272333Z) или время эпохи (например, 1478943038816)? 

  3. Мне нужно выполнить поиск по таблице за определенный промежуток времени, например: 01.01.2015 с 10:00:00 до 31/12/2016 23:00:00

46
Dennis

Тип данных String должен использоваться для даты или метки времени.

Вы можете использовать тип данных String для представления даты или отметки времени . Один из способов сделать это - использовать строки ISO 8601, как показано в этих Примеры:

2016-02-15 

2015-12-21T17: 42: 34Z

20150311T122706Z

Тип данных DynamoDB для даты или метки времени

Да, запросы Range поддерживаются, когда дата сохраняется как String. МЕЖДУ можно использовать в FilterExpresssion. Я получил элементы в результате, используя приведенные ниже выражения фильтра.

FilterExpression без времени: -

FilterExpression : 'createdate between :val1 and :val2',
ExpressionAttributeValues : {
        ':hkey' : year_val,
        ':rkey' : title,
        ":val1" : "2010-01-01",
        ":val2" : "2010-12-31"
    }

FilterExpression со временем: -

FilterExpression : 'createdate between :val1 and :val2',
    ExpressionAttributeValues : {
        ':hkey' : year_val,
        ':rkey' : title,
        ":val1" : "2010-01-01T00:00:00",
        ":val2" : "2010-12-31T00:00:00"
    }

Значения базы данных: -

Формат 1 - с часовым поясом:

{"Item":{"createdate":{"S":"2010-12-21T17:42:34+00:00"},"title":{"S":"The Big New Movie 2010"},"yearkey":{"N":"2010"},"info":{"M":{"rating":{"N":"0"},"plot":{"S":"Nothing happens at all."}}}}}

Формат 2 - без часового пояса: -

{"Item":{"createdate":{"S":"2010-12-21T17:42:34Z"},"title":{"S":"The Big New Movie 2010"},"yearkey":{"N":"2010"},"info":{"M":{"rating":{"N":"0"},"plot":{"S":"Nothing happens at all."}}}}}
39
notionquest

Тип данных зависит от ваших требований.

Вы можете использовать String в формате ISO или Number в формате Epoch.

Преимуществом формата ISO (String) является удобочитаемость, однако DynamoDB не поддерживает Time To Live (TTL) для этого формата. Все фильтры работают, например, «между» и «диапазоном», как объяснено notionquest.

Время жизни (TTL) для DynamoDB позволяет определить, когда истекает срок действия элементов в таблице, чтобы их можно было автоматически удалять из базы данных.

Преимущество использования формата Epoch (Number) заключается в том, что вы можете использовать функцию TTL и все фильтры. 

TLDR;

Формат эпохи (тип числа) - можно использовать Time To Live
Формат ISO (тип String) - не может использовать Time To Live, но более читабелен

0
TheKnightCoder