2016-06-18 6 views
0

ユーザーは、ID番号を自動的に割り当てるエントリを作成できます。エントリはDynamoDBテーブルに格納され、ラムダ関数とapiゲートウェイを介して作成されます。ユーザが作成する各エンティティに一意のID番号を安全に割り当てる最良の方法は何ですか?

ID番号は一意でなければならず、ID番号は堅牢でガロンティエ独自でなければなりません。

ここで私は1で始まる "グローバル"変数を使用し、エントリが作成されるたびにそのエントリIDをグローバル変数値に割り当て、グローバル変数値をインクリメントします。

このアプローチはうまくいくでしょうか?もしそうなら、それを実装するのが最善の方法でしょうか?あなたはよりよいアプローチを考えることができますか?

答えて

1

解決策の縮尺は変わりません。

グローバル変数を使用すると、(競合状態を回避するために)並行安全な方法で値を増やす必要があります。また、変数がアプリケーションの再起動後に増分をサポートする必要があります。

この問題を回避するには、使用するパターンの1つがキーとしてUUIDを使用することです。 Dynamo DBのjava sdkは、カスタム注釈@DynamoDBAutoGeneratedKeyを提供することでこのパターンをサポートしています。これにより、各エントリーが自身のために生成されたランダムな識別子を持つことが保証される。

言語がJavaではない場合は、UUIDを生成するライブラリを取得する必要があります。

+0

@DynamoDBAutoGeneratedKeyによって生成されたIDは一意になりますか?それは、確率が同じものが2回起こらないことを指示するか、またはこれを確実にするメカニズムを組み込んでいるかを決定するだけの長さですか? –

+0

はい、衝突の可能性はそのサイズのわずかな原因です。他のメカニズムはありません。現代の世界的な分散システムのほとんどは、ある場所でUUIDを使用しています。 – Shibashis

+0

情報ありがとうございます。 –

関連する問題