ある特定の価値の独自性に依存する多くのシステムがあります。GUIDを使用するもの(Windowsレジストリやその他のデータベースなど)だけでなく、オブジェクトを識別するためにオブジェクトからハッシュを作成するため、このハッシュが一意である必要があるものも思い浮かびます。
ハッシュテーブルは通常、2つのオブジェクトが同じハッシュを持っているかどうかを気にしません。これは、ハッシュがオブジェクトをカテゴリに分類するために使用されるため、ルックアップ時に、テーブル内のすべてのオブジェクトではなく、同じカテゴリ内のオブジェクトのみが含まれるためです(バケット)は、検索されたオブジェクトとの同一性を比較する必要があります。
ただし、他の実装は(そう思われる)一意性に依存します。私の例(これが私にこれを尋ねさせる理由です)は、MercurialのリビジョンIDです。Mercurialメーリングリストのエントリには、正しく記載されています
最初の10億回のコミットで、チェンジセットハッシュが偶然に衝突する確率は基本的にゼロです。しかし、それが起こるかどうかはわかります。そして、あなたは偶然にSHA1を壊した男として有名になるでしょう。
しかし、最も小さな確率でさえ不可能を意味するわけではありません。さて、なぜ一意性に依存してもまったく問題がないのかについての説明は必要ありません(これについては、たとえばここで説明しました)。これは私には非常に明白です。
むしろ、私は知りたいです(多分あなた自身の仕事からの例によって):
とにかく、これらのありそうもないケースをカバーするためのベストプラクティスはありますか?
特に強い太陽風がハードディスクの読み取りに失敗する可能性が高いため、無視する必要がありますか?
ユーザーへの「私はあきらめます、あなたは不可能なことをしました」というメッセージで失敗するだけなら、少なくともそれらをテストする必要がありますか?
それとも、これらのケースでさえ適切に処理する必要がありますか?
私にとって、特に以下は興味深いものですが、やや手触りが良いです。
あなたがこれらのケースを処理しない場合、あなたは確率に耳を傾けない腸の感情に対して何をしますか?
あなたがそれらを処理する場合、スーパーノンバのようにあなたが処理しない可能性の高いケースがあることを考慮して、この作業を(あなた自身と他の人に)どのように正当化しますか?