概要:永続的な Java Web アプリケーションを開発しています。重複を防ぐために、永続化するすべてのリソースにグローバルに一意の識別子があることを確認する必要があります。
ファインプリント:
- 私は RDBMS を使用していないので、派手なシーケンス ジェネレータ (Oracle が提供するものなど) を持っていません。
- 高速で、できればすべてメモリ内にあることを望みます-ファイルを開いて値をインクリメントする必要はありません
- スレッドセーフである必要があります (一度に 1 つの JVM だけが ID を生成する必要があると予想しています)。
- JVM のインスタンス化全体で一貫性が必要です。サーバーがシャットダウンして起動した場合、ID ジェネレーターは以前のインスタンス化で生成したものと同じ ID を再生成するべきではありません (または、少なくとも可能性は非常に低くなければなりません - 何百万もの既存のリソースが予想されます)。
- EJB 固有 ID パターンの記事で例を見てきました。それらは私にはうまくいきません (ミリ秒ごとに複数のリソースを永続化するため、System.currentTimeMillis() だけに依存したくありません)。
- この質問で提案されている回答を見てきました。それらについての私の懸念は、時間の経過とともに重複した ID を取得する可能性はどのくらいかということです。UUIDにjava.util.UUIDを使用するという提案に興味をそそられましたが、繰り返しになりますが、重複の可能性は限りなく小さくする必要があります。
- 私はJDK6を使用しています