この質問のタイトルに従って、ID を生成するためのソリューションを探しています。
明確にするために:
- いくつかの異なる SQL Server とアプリケーション サーバーを使用しており、そのいずれかが ID を生成している可能性があります。
- 中央の ID 生成サービス/マシンを使用したくない
- 非常に多くのマシンでは衝突の可能性があるため、Guid にビットごとに変換された DateTime を使用したくありません。
1つの可能な解決策は、次の回答のように、各マシンに開始位置、スキップ、およびオフセットを割り当てることです: https://stackoverflow.com/a/7916720/175127
これは非常に簡単に私たちの解決策になる可能性がありますが、次の問題のいくつかにより適切に対処する、より洗練された解決策を誰かが持っていることを願っています。
1 台のマシンがより多くの ID を割り当てて、他のマシンよりもはるかに先にスキップする可能性があります。すべてのマシンを毎日新しい開始位置に再同期して、互いにペースを維持できるようにする場合がありますが、これにより、空の未使用の ID が大量に発生する可能性があります。これを最小限に抑えたいと考えています。
各マシンの外部依存を減らすことができるかどうかを確認したいと考えています。最初に、マシンが何台あるか、開始点は何か、そして固有のオフセットを決定する必要があります。これらを管理するための何らかの形で中央管理を行うことは避けられないのではないかと思います。
これまでのところ、ID の範囲を一度に配布する中央マシンを用意するのが最善だと思います。他の各マシンは、必要に応じて範囲ブロックを取得します。中央のマシンがダウンした場合は、start-skip-offset システムをフォールバックとして使用します。
クールなアイデアはありますか?