Postgresql uuid-osspドキュメントによると、uuid_generate_v1()
はMacアドレス+タイムスタンプに基づいています:
https://www.postgresql.org/docs/9.4/static/uuid-ossp.html
数百のデータベースがUUIDキーを使用してレコードを生成し、中央データベースに同期する分散データベースシナリオ。
将来、マシンの日付/時刻が間違っていることを検出し、それを正しい日付/時刻に戻したとします。この特定のマシンで競合するUUIDキーを生成することはありますか?
1つのシナリオは、夏時間/夏時間です。
uuid_generate_v1()
よりもuuid_generate_v4()
を使用することがわかっている理由はありません。そうは言っても、フィロは彼が言ったときに大体正しいです
「1つのシナリオは、夏時間/夏時間です。」 - いいえそうではありません。すべてをUTCとして保存する必要があります。時間は常に前進します。 –フィロ
表示時間がDST(またはCSTCDTなど)に設定されている場合でも、基になるストレージメカニズムはUTCである必要があります。
つまり、すべてをUTCとして保存する必要がありますが、常にそうであるとは限りません。例外があります XPやWindows 7の場合と同様 。特に、他のOSによるRTCの変更を許可する場合は、何らかの異常が発生する可能性があります。
また、カーネルまたはデーモンが秒をロールバックし、これをサポートしているかどうかを確認するのは基本的に彼ら次第です。本当にひとめぼりしたい場合は、うるう秒の問題が常にあります。 Linux-properとOSXは、Androidはafaikしません うるう秒のユーモラスなNDT
参考までに、仕様ではUUID v1時間ベースのUUID 4.2時間ベースのUUIDを作成するためのアルゴリズム の生成プロセスについて詳しく説明しています。