2012-04-03 9 views
1

私は、ユニークな部品番号をプロビジョニングするためのシンプルだが堅牢なソリューションを探しています。私はGUIDを使用して、異なるクライアント(デスクトップ、電話など)からの要求を識別し、次に要求GUIDの挿入日時に基づいてPNを順番に割り当てることについて考えてきました。雲で一意のIDを生成

質問:SQL Azureは適切なサービスですか?これには標準的なアプローチがありますか?

ありがとうございました。

答えて

7

これは「オンクラウド」とほとんど関係なく、一般的な分散コンピューティングの問題です。

お客様の要件を十分に理解するための十分な情報はありませんが、収集しているのは、部品番号を要求するサービスのコンシューマーに固有の番号を割り当てる必要があることです。

最初に考えられるのは、GUIDが数字(128ビット長)であるということです。パーツ番号を割り当てる必要があるときはいつでもGUIDを生成できますか?必要に応じて、数十億個の部品番号を扱っていない限り、ハッシュ衝突のリスクが非常に小さい、例えばunsigned long(都市ハッシュはそのタイプのアプリケーションのための好きな64ビットハッシュ)にGUIDをハッシュできます。 32ビットの数値にハッシュするような衝動を感じたら、Birthday Problemを見てください。ハッシュの衝突は、わずか32ビットで考えるよりはるかに頻繁になります。

シリアル番号を割り当てる必要がある場合は、処理にシリアル化ポイントが必要です。個々の部品番号要求を数え、次に大きい番号を割り当てるサービス(DB表のID列でもよい)が必要です。

小さい数字が欲しいが、必ずしも順不同である必要がない場合は、そのようなリクエストを処理する可能性のある各サーバーが、自分の範囲を管理できるようにすることができます(たとえば、特定のサーバーがブロックを "チェックアウト"中央サービスからの1000個の部品番号のうち、それらが使い果たされるまで割り当て、次に新しい番号のブロックを「チェックアウト」する)。これは、複数のサーバーが異なる速度で番号を割り当てる可能性があるため、現在割り当てられているすべての番号が順次であることを保証するものではありません。また、アプリケーションのクラッシュを適切に管理しないと、チェックアウトされたが完全に割り当てられていない番号ブロックの一部を「失う」可能性があります。

+0

はそこCityHashのC#実装がありますか? – JMarsch

+0

@JMarsch:そこにはいませんが、C++から移植するのはとても簡単です。私はそれを約1時間で元従業員にした。 –

+0

@EricJ:クラウドには、クラウドソリューションに近い可用性を保証できるサーバーがないため、私はクラウドに言及します。私たちには外出しており、引用用のPNを生成する必要があります。私たちは同じページにいると思います。私の最初の考えは、要求GUIDをデータベースに挿入し、その後にPNを生成することです。 –

0

あなたがたいが、これを見ている可能性があります:SnowMaker – a unique id generator

+0

私もそれを考えています。ありがとう –

+0

Azure Mobile Services(ほとんどの場合、プロジェクトに含まれているものの代わりにMobile Services dllを含む)で動作するように変更されたSnowMakerがうまくいきます。 –

関連する問題