DynamoDBは初めてです。 DeviceIDをハッシュキーとして、Timestampを範囲キーとして使用し、データを使用するテーブルを作成したいと思います。
{ DeviceID: 123, Timestamp: "2016-11-11T17:21:07.5272333Z", X: 12, Y: 35 }
SQLでは、タイムスタンプに日時タイプを使用できますが、DynamoDBにはありません。
String data typeは、DateまたはTimestampに使用する必要があります。
Stringデータ型を使用して、日付またはタイムスタンプを表すことができます。これを行う1つの方法は、次の例に示すように、ISO 8601文字列を使用することです。
2016-02-15
2015-12-21T17:42:34Z
20150311T122706Z
はい、日付が文字列として保存されている場合、範囲クエリがサポートされます。 BETWEENは、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."}}}}}
データ型は要件によって異なります。
ISO形式の文字列またはエポック形式の数値を使用できます。
ISO形式(文字列)の利点は人間が読みやすいことですが、DynamoDBはこの形式のTime To Live(TTL)をサポートしていません。 notionquestで説明されているように、「between」や「range」などのすべてのフィルターが機能します。
Time to Live(TTL) DynamoDBの場合、データベースから自動的に削除できるように、テーブル内のアイテムの有効期限を定義できます。
エポック形式(数値)を使用する利点は、TTL機能とすべてのフィルターを使用できることです。
TLDR;
エポック形式(数値型)-Time To Liveを使用できます
ISO形式(文字列型)-Time To Liveは使用できませんが、より人間に読みやすい形式です