テーブルに新しいアイテムを追加するときに、DynamoDBに一意のIDを自動的に生成させることは可能ですか?
Java APIが@DynamoDBAutoGeneratedKeyに言及していることに気付いたので、これをPHPでも機能させる方法があると思います。
その場合、アプリケーションコードはこれらのIDを生成しますか、それともDynamoDB側で実行されますか?
テーブルに新しいアイテムを追加するときに、DynamoDBに一意のIDを自動的に生成させることは可能ですか?
Java APIが@DynamoDBAutoGeneratedKeyに言及していることに気付いたので、これをPHPでも機能させる方法があると思います。
その場合、アプリケーションコードはこれらのIDを生成しますか、それともDynamoDB側で実行されますか?
良い質問-概念的には可能ですが、 CreateTableもPutItemもそのような機能を参照していない限り、これは現在DynamoDBAPIレベルの機能としては利用できないようです。
お気づきの@DynamoDBAutoGeneratedKey
表記は、Javaアノテーション、つまりJavaSDKが提供するシンタックスシュガーです。
Javaコンピュータプログラミング言語の注釈は、Javaソースコードに追加できる特殊な形式の構文メタデータです。
そのため、JavaSDKの高レベルAPI内のオブジェクト永続性モデルの一部として提供されるAmazonDynamoDBアノテーション@DynamoDBAutoGeneratedKey
の1つです( Amazon DynamoDBでのオブジェクト永続性モデルの使用を参照)。
ハッシュキーまたは範囲キーのプロパティを自動生成済みとしてマークします。オブジェクト永続性モデルは、これらの属性を保存するときにランダムなUUIDを生成します。自動生成されたキーとしてマークできるのは、文字列プロパティのみです。
nodejsを使用してjavascriptでdynamodbを操作しているとき。npmモジュールuuidを使用して一意のキーを生成します。
元:
id = uuid.v1();
参照:uuid npm
Node.jsでスキーマベースのAWSdynamodbデータマッパーライブラリを使用することにより、ハッシュキー(id)が自動的に生成されます。自動生成されたIDはuuidv4に基づいています。
詳細については、次のawsパッケージをご覧ください。
サンプルスニペット
@table('my_table')
class MyDomainClass {
@autoGeneratedHashKey()
id: string;
@rangeKey({defaultProvider: () => new Date()})
createdAt: Date;
}
クライアントは、長いランダムID(たとえば、DynamoDBは128ビット整数をサポート)を選択するか、クライアントのIPアドレス、CPU番号、および現在のIDを含むIDを選択することにより、(すべての目的と目的で)一意のIDを作成できます。時間-またはこれらの線に沿った何か。UUID標準には、これを行うための標準的な方法も含まれています(そして、クライアント側でそのようなUUIDを作成するためのさまざまな言語のライブラリがあります)が、実際には標準を使用する必要はありません。そして興味深い質問は、ランダムなキーがある場合、これらのアイテムをどのように見つける予定かということです。または、セカンダリインデックスを使用することを計画していますか?
2022の答えはここにあります: https ://dev.to/prabusah_53/aws-lambda-in-built-uuid-382f
外部ライブラリは不要になりました。
これがmkyongから取ったもう一つの良い方法です
http://www.mkyong.com/java/how-to-get-current-timestamps-in-java/
実際の日付ではなくミリ秒を取得するように彼のメソッドを調整しました
java.util.Date date= new java.util.Date();
System.out.println(new Timestamp(date.getTime()).getTime());
私が取っているアプローチは、ハッシュキー(または範囲キーを使用している場合は範囲キー)に現在のタイムスタンプを使用することです。タイムスタンプを整数として格納します。これは、「UNIXエポック」の開始からのミリ秒数を表します(UTCタイムゾーン)。多くの日付/時刻ライブラリがこの番号を生成できます。
これには、テーブルに「作成時間」フィールドが必要な場合、UUIDにこの情報がすでに格納されているという利点があります。日付/時刻ライブラリの別のメソッドを呼び出すだけで、タイムスタンプを読み取り可能な形式に変換できます。
(同じミリ秒のタイムスタンプで同じテーブルに2番目のアイテムが作成された場合に発生する例外を必ず処理してください。その場合は、フォールバックして操作を再試行してください。少し遅れて、現在のタイムスタンプを使用してください。)
例えば:
User table
ハッシュキーのみ:userID(このユーザーの作成のタイムスタンプ)。
WidgetAttributes table
ハッシュキーと範囲キー。
hash-key:userID(ウィジェットが属するユーザーのUserテーブルのuserIDを使用します)。range-key:attribID(このwidget-attributeの作成のタイムスタンプを使用します)。
これで、WidgetAttributesテーブルに対して「クエリ」操作を実行して、特定のユーザーのすべてのウィジェット属性を取得できます。範囲キーのクエリパラメータとして「ゼロより大きい」を使用する。