2016-08-08 15 views
0

dynamoDBを使用しているときに、ユーザー、製品、またはユーザーが正しい方法であることを知るためにユニークなIDを生成する必要がありますか?dynamoDB用の読み込み可能なIDの生成

確かにUUIDは素晴らしいですが、顧客が使用すると期待できるものではありません。自分のサーバーで自分のものを作りたいのであれば、私はいくつかの順序で次のものを使うかいくつかの奇妙な余分なフィールドを保存したり、暗闇の中でランダムなスタブを作成したりします。

どうすればこの問題を解決できますか?

答えて

0

私はUUIDにはまだ進むべき道であることを主張するだろう。特にスケーラブルなソリューションを設計する場合は、単一の「障害点」を使用して、一意のシーケンシャルな識別子を生成することはできません。そのようなものには、同期や可用性が必要です。分散システム。

あなたには、いくつかのより多くの人に優しい識別子を生成したい場合は、あなたはオプションのカップルを持っている:

  1. あなたがのUUIDを開始し、半分にそれらを折ることができ(最初の8つのバイトを取ると、 xorまたは最後の8バイト)、次に得られた64ビットの数値を取り、ベースの62エンコーディング(0〜9の数字と大文字と小文字の数字)を使用してエンコードして、人間にやさしい11文字の文字列を生成します典型的なUUIDです。もしあなたがより少ないエントロピーで大丈夫なら、UUIDを2回折り畳むことができます。32ビットの数値を6文字のベース62の表現にエンコードするか、または7文字のベース32のエンコーディングで数字と大文字のみを使用します。

  2. あなたが取ることができる第2のアプローチは、MACアドレス、タイムスタンプ、擬似乱数ジェネレータの組み合わせを使用して、独自のIDを生成し、UUIDの生成方法と同様の一定の規則に従いますあなたは、彼らがユーザー

友好的であることのIDがそのようなコードすることができることをあなたは同じIDが誤って異なる2で生成された場合に発生する可能性の問題を防ぐことができますあなたはconditional writes to DynamoDBを利用することができます。

+0

あなたのご意見ありがとうございました。このようなことを行うソリューションを見つけることはできますが、この問題を解決するにはどれほど複雑かと驚いています。 – Jeppz

+0

@Jeppz - はい、分散コンピューティングは自明ではありません;)ところで、私は、DynamoDBへの条件付き書き込みを使用して潜在的な重複IDを防御できることを明確にするために、 –

0

プロセスキャッシュ(またはキャッシュのようなmemcacheまたはredis)でカウンタを使用し、次の値を取得するためにこのカウンタでロックを使用できます。

psaudoコード:

function get_next_value(): 
    lock: 
     counter+=1 
     return counter 
関連する問題