web-dev-qa-db-ja.com

DynamoDBのタイムスタンプに使用するデータ型は何ですか?

DynamoDBは初めてです。 DeviceIDをハッシュキーとして、Timestampを範囲キーとして使用し、データを使用するテーブルを作成したいと思います。

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

SQLでは、タイムスタンプに日時タイプを使用できますが、DynamoDBにはありません。

  1. どのデータ型を使用すればよいですか?ひも?数?
    enter image description here

  2. 選択したデータ型について、どのような種類のタイムスタンプ形式で書き込む必要がありますか? ISO形式(例:2016-11-11T17:21:07.5272333Z)またはエポック時間(例:1478943038816)?

  3. 一定の時間範囲でテーブルを検索する必要があります。

57
Dennis

String data typeは、DateまたはTimestampに使用する必要があります。

Stringデータ型を使用して、日付またはタイムスタンプを表すことができます。これを行う1つの方法は、次の例に示すように、ISO 8601文字列を使用することです。

2016-02-15

2015-12-21T17:42:34Z

20150311T122706Z

日付またはタイムスタンプのDynamoDBデータ型

はい、日付が文字列として保存されている場合、範囲クエリがサポートされます。 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."}}}}}
45
notionquest

データ型は要件によって異なります。

ISO形式の文字列またはエポック形式の数値を使用できます。

ISO形式(文字列)の利点は人間が読みやすいことですが、DynamoDBはこの形式のTime To Live(TTL)をサポートしていません。 notionquestで説明されているように、「between」や「range」などのすべてのフィルターが機能します。

Time to Live(TTL) DynamoDBの場合、データベースから自動的に削除できるように、テーブル内のアイテムの有効期限を定義できます。

エポック形式(数値)を使用する利点は、TTL機能とすべてのフィルターを使用できることです。

TLDR;

エポック形式(数値型)-Time To Liveを使用できます
ISO形式(文字列型)-Time To Liveは使用できませんが、より人間に読みやすい形式です

6
TheKnightCoder