オンラインで検索すると、一般的に次のようなものであることがわかりました。
リーリー リーリーUUID の説明を読んだ後、これらの生成方法の影響率が基準を満たしていないように感じたのはなぜですか?
オンラインで検索すると、一般的に次のようなものであることがわかりました。
リーリー リーリーUUID の説明を読んだ後、これらの生成方法の影響率が基準を満たしていないように感じたのはなぜですか?
現在、UUID を生成するための多くのいわゆる PHP メソッドは、アルゴリズムの基礎として乱数を使用していますが、実際に反復する機会を持つことは困難ですが、理論的には明らかに不可能です。
ここではMongoDbのObjectIdを例に挙げていますが、この生成方法はPHPにも導入できるのではないかと個人的に感じています。
ObjectId は主にタイムスタンプ、ミリ秒、マシンコード、自動インクリメント数の 4 つの部分に分かれています。
最初の 2 つについて詳しく説明する必要はありません。PHP は入手できます。焦点は後の 2 つです。
マシンコードは主に、異なるホスト間で同じ UUID が生成されるのを避けるために使用されます。
現在の機械語生成の主流はハードウェア情報に基づくハッシュ計算であり、この方法はPHPには適していません。
主な理由は 2 点あり、1 つは PHP がハードウェア情報を直接取得できないこと (ローカル コマンドの拡張や実行が必要など)、もう 1 つは PHP リクエスト間でデータを共有できないため、各リクエストはマシン コードをプルする必要があることです。パフォーマンスへの影響は非常に大きいです。
この問題を解決する非常に簡単な方法があります。それは、最初に異なるマシンでマシンコードを計算し、それを構成ファイルに直接書き込み、PHP 処理中にそれを直接読み取ることです。
自動インクリメント数は主に、同時処理で同じ UUID が生成されるのを避けるために使用されます。
自動インクリメントの場合、PHP はリクエスト間でデータを共有できないため、自動インクリメントのカウントを直接実装できません。
この問題を解決するには、PHP の 2 つの拡張機能、つまりセマフォと共有メモリを導入できます。どちらも PHP ソース コードに統合されており、--enable-sysvsem および --enable-sysvshm を通じて開くことができます。自動インクリメント番号を共有メモリに配置し、セマフォを介したアクセスを制限するだけで、自動インクリメント テクノロジを共有するという同時リクエストの目的を達成できます。もちろん、自己インクリメントは他のツールを通じても実現できます。
Linux カーネルは、UUID 生成インターフェイスを提供します。cat /proc/sys/kernel/random/uuid
どのプログラムであっても、ファイルを読み取ることで UUID を取得できます。
独自の価値を自分で生成:openssl_random_pseudo_bytes
リーリー