2012-01-24 27 views
28

新しい項目をテーブルに追加するときにDynamoDBが自動的に一意のIDを生成するようにすることはできますか?DynamoDBのUUID?

私はJava APIに@DynamoDBAutoGeneratedKeyがあることに気づいたので、これもPHPで動作させる方法があると仮定しています。

もしそうなら、アプリケーションコードはこれらのIDを生成するのでしょうか、それともDynamoDB側で行われますか?

答えて

19

良い質問 - 概念的には可能ですが、現時点ではCreateTableでもPutItemもこのような機能を指摘していない限り、DynamoDB APIレベルの機能としては利用できません。

お気づき@DynamoDBAutoGeneratedKey表記は実際のJava SDKが提供する、すなわちシンタックスシュガー、Java annotation次のとおりです。

注釈は、Javaのコンピュータプログラミング言語で、できる構文メタデータの特別 形でありますJavaソースコードに追加することができます。このよう@DynamoDBAutoGeneratedKeyとして

は、Java SDKの高レベルAPI内オブジェクトの永続化モデルの一部として提供アマゾンDynamoDBの注釈の一つである(Using the Object Persistence Model with Amazon DynamoDBを参照してください):

はハッシュをマークキーまたは範囲キーのプロパティを自動生成します。 オブジェクト永続性モデルは、これらの属性を保存するときにランダムなUUIDを生成します。文字列のプロパティのみが自動生成された のキーとしてマークできます。

+1

感謝をsnipet。ですから@DynamoDBAutoGeneratedKeyは、Java APIを取得して、Dynamo自体ではなくUUIDを生成していますか?ダイナモがIDを生成し、新しいアイテムを追加するときにそれらを返すUUIDアトリビュートタイプを持っていれば本当に素晴らしいでしょう。 – Adam

+1

@Adam:実際、 '@ DynamoDBAutoGeneratedKey'はJava SDKによって提供されるカスタムアノテーションであり、コンパイル時にコードが生成され、Javaアプリケーション内で実行され、実行時にUUIDが生成されますDynamoDBそのもの。また、ネイティブのDynamoDB UUIDデータ型は非常に便利です。AWSチームがDynamoDBの機能を時間をかけて拡張し、顧客の需要に対応し、それに応じて革新することで有名です。 –

-4

私が取っているアプローチは、ハッシュキー(またはレンジキーを使用する場合はレンジキー)の現在のタイムスタンプを使用することです。タイムスタンプを整数として格納します。これは、「UNIXエポック」の開始から(UTCタイムゾーン内の)ミリ秒数を表します。多くの日付/時刻ライブラリでこの番号が生成されます。

これは、テーブルに「作成時刻」フィールドが必要な場合は、UUIDがすでにこの情報を保存しているという利点があります。あなたの日付/時刻ライブラリの別のメソッドを呼び出して、タイムスタンプを読みやすい形式に変換してください。

(2番目のアイテムが同じミリ秒のタイムスタンプで同じテーブルに作成された場合に発生する例外を処理してください。ちょっと後で現在のタイムスタンプで操作をやり直してください)例えば

:のみ

User table 

ハッシュキー:ユーザーID(このユーザの作成のタイムスタンプ)。

WidgetAttributes table 

ハッシュキープラスレンジキー。
hash-key:userID(ウィジェットが所属するユーザのUserテーブルからuserIDを使用)。 range-key:attribid(このウィジェット属性の作成のタイムスタンプを使用します)。

ここで、WidgetAttributesテーブルで「クエリ」操作を実行すると、特定のユーザーのすべてのウィジェット属性を取得できます。レンジキーのクエリーパラメータとして "greater-than-zero"を使用します。 nodejsとJavaScriptでDynamoDBのと協力しながらここで

+7

タイムスタンプは一意であるとは限りません。特に、複数のクライアントが並行して実行されている場合は特にそうです。 – Jason

+0

timestamp_userID? – shle2821

+3

@ shle2821 idのUUIDを生成し、この提案とは別のフィールドにタイムスタンプを格納する方が良いでしょう。 –

0

を取得するために彼の方法を調整しました。私はユニークなキーを生成するためにnpmモジュールuuidを使います。

例:

ID = uuid.v1()。

が参照:uuid npm

0

のNode.jsスキーマベースAWSのDynamoDBのデータマッパーライブラリを使用することにより、ハッシュキー(ID)が自動的に生成されます。自動生成IDはuuid v4に基づいています。

詳細については、以下のawsパッケージをご覧ください。

Data Mapper with annotation

Data Mapper package for Javascript

サンプルは、私はあなたの答えは本当に便利だったので、Javaのに慣れていないよ

@table('my_table') 
class MyDomainClass { 
    @autoGeneratedHashKey() 
    id: string; 

    @rangeKey({defaultProvider:() => new Date()}) 
    createdAt: Date; 
}