新しい項目をテーブルに追加するときにDynamoDBが自動的に一意のIDを生成するようにすることはできますか?DynamoDBのUUID?
私はJava APIに@DynamoDBAutoGeneratedKeyがあることに気づいたので、これもPHPで動作させる方法があると仮定しています。
もしそうなら、アプリケーションコードはこれらのIDを生成するのでしょうか、それともDynamoDB側で行われますか?
新しい項目をテーブルに追加するときにDynamoDBが自動的に一意のIDを生成するようにすることはできますか?DynamoDBのUUID?
私はJava APIに@DynamoDBAutoGeneratedKeyがあることに気づいたので、これもPHPで動作させる方法があると仮定しています。
もしそうなら、アプリケーションコードはこれらのIDを生成するのでしょうか、それともDynamoDB側で行われますか?
良い質問 - 概念的には可能ですが、現時点では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を生成します。文字列のプロパティのみが自動生成された のキーとしてマークできます。
私が取っているアプローチは、ハッシュキー(またはレンジキーを使用する場合はレンジキー)の現在のタイムスタンプを使用することです。タイムスタンプを整数として格納します。これは、「UNIXエポック」の開始から(UTCタイムゾーン内の)ミリ秒数を表します。多くの日付/時刻ライブラリでこの番号が生成されます。
これは、テーブルに「作成時刻」フィールドが必要な場合は、UUIDがすでにこの情報を保存しているという利点があります。あなたの日付/時刻ライブラリの別のメソッドを呼び出して、タイムスタンプを読みやすい形式に変換してください。
(2番目のアイテムが同じミリ秒のタイムスタンプで同じテーブルに作成された場合に発生する例外を処理してください。ちょっと後で現在のタイムスタンプで操作をやり直してください)例えば
:のみ
User table
ハッシュキー:ユーザーID(このユーザの作成のタイムスタンプ)。
WidgetAttributes table
ハッシュキープラスレンジキー。
hash-key:userID(ウィジェットが所属するユーザのUserテーブルからuserIDを使用)。 range-key:attribid(このウィジェット属性の作成のタイムスタンプを使用します)。
ここで、WidgetAttributesテーブルで「クエリ」操作を実行すると、特定のユーザーのすべてのウィジェット属性を取得できます。レンジキーのクエリーパラメータとして "greater-than-zero"を使用します。 nodejsとJavaScriptでDynamoDBのと協力しながらここで
が
http://www.mkyong.com/java/how-to-get-current-timestamps-in-java/
をmkyongから取られた別の良い方法である私は、ミリ秒単位の代わりに、実際の日付
java.util.Date date= new java.util.Date();
System.out.println(new Timestamp(date.getTime()).getTime());
のNode.jsスキーマベースAWSのDynamoDBのデータマッパーライブラリを使用することにより、ハッシュキー(ID)が自動的に生成されます。自動生成IDはuuid v4に基づいています。
詳細については、以下のawsパッケージをご覧ください。
Data Mapper package for Javascript
サンプルは、私はあなたの答えは本当に便利だったので、Javaのに慣れていないよ
@table('my_table')
class MyDomainClass {
@autoGeneratedHashKey()
id: string;
@rangeKey({defaultProvider:() => new Date()})
createdAt: Date;
}
感謝をsnipet。ですから@DynamoDBAutoGeneratedKeyは、Java APIを取得して、Dynamo自体ではなくUUIDを生成していますか?ダイナモがIDを生成し、新しいアイテムを追加するときにそれらを返すUUIDアトリビュートタイプを持っていれば本当に素晴らしいでしょう。 – Adam
@Adam:実際、 '@ DynamoDBAutoGeneratedKey'はJava SDKによって提供されるカスタムアノテーションであり、コンパイル時にコードが生成され、Javaアプリケーション内で実行され、実行時にUUIDが生成されますDynamoDBそのもの。また、ネイティブのDynamoDB UUIDデータ型は非常に便利です。AWSチームがDynamoDBの機能を時間をかけて拡張し、顧客の需要に対応し、それに応じて革新することで有名です。 –