Saya tahu ada kemungkinan satu menit dari bentrokan tetapi jika saya menghasilkan kumpulan 1000 GUID (misalnya), apakah aman untuk mengasumsikan semuanya unik untuk menyimpan pengujian masing-masing?
Pertanyaan bonus
Cara optimal untuk menguji GUID untuk keunikan? Filter Bloom mungkin?
Jawaban:
Ya kamu bisa. Karena GUID memiliki panjang 128 bit, memang ada kemungkinan kecil terjadinya bentrokan — tetapi kata "menit" tidak cukup kuat. Ada begitu banyak GUID sehingga jika Anda menghasilkan beberapa triliun di antaranya secara acak, Anda masih lebih mungkin terkena meteorit daripada hanya mengalami satu tabrakan (dari Wikipedia ). Dan jika Anda tidak membuatnya secara acak, tetapi misalnya menggunakan algoritma alamat-MAC-dan-cap waktu, maka mereka juga akan menjadi unik, karena alamat MAC unik di antara komputer dan stempel waktu unik di komputer Anda. komputer.
Sunting 1: Untuk menjawab pertanyaan bonus Anda, cara optimal untuk menguji sekumpulan GUID untuk keunikannya adalah dengan menganggap bahwa semuanya unik. Mengapa? Karena, dengan jumlah GUID yang Anda hasilkan, kemungkinan tabrakan GUID lebih kecil daripada kemungkinan sinar kosmik membalik sedikit di memori komputer Anda dan mengacaukan jawaban yang diberikan oleh algoritme "akurat" yang Anda pedulikan. untuk berlari. (Lihat jawaban StackOverflow ini untuk matematika.)
Ada banyak sekali GUID di luar sana. Mengutip Hitchhiker's Guide to the Galaxy dari Douglas Adams :
Dan karena ada sekitar 7 × 10 22 bintang di alam semesta , dan sedikit di bawah 2 128 GUID, maka ada sekitar 4,86 × 10 15 —hampir lima kuadriliun —GUID untuk setiap bintang. Jika setiap bintang memiliki dunia dengan populasi yang berkembang pesat seperti kita, maka di sekitar setiap bintang, setiap manusia atau alien yang pernah hidup berhak atas lebih dari empat puluh lima ribu GUID. Untuk setiap orang dalam sejarah di setiap bintang di alam semesta. Ruang GUID berada pada tingkat yang sama dengan ukuran seluruh alam semesta. Anda tidak perlu khawatir.
( Edit 2: Berkaca pada ini: wow Aku tidak menyadari. Diriku sendiri apa yang dimaksud Ruang GUID ini incomprehensibly besar aku semacam kagum itu...)
sumber
10^14
sel dalam tubuh Anda, dan 106,5 miliar orang pernah hidup. Atau,2.385 * 10^23
UUID untuk setiap sen utang publik AS.Jawaban singkatnya: untuk tujuan praktis, ya.
Namun, Anda harus mempertimbangkan paradoks ulang tahun!
Saya telah menghitung beberapa probabilitas tabrakan yang representatif. Dengan UUID 122-bit seperti yang ditentukan dalam artikel Wikipedia , kemungkinan tabrakan adalah 1/2 jika Anda menghasilkan setidaknya
2.71492e18
UUID. Dengan 10 ^ 19 UUID, probabilitasnya adalah 0,999918. Dengan 10 ^ 17 UUIDs, 0,000939953.Beberapa angka untuk perbandingan dapat ditemukan di Wikipedia. Jadi, Anda dapat dengan aman menetapkan UUID untuk setiap manusia yang pernah hidup, setiap galaksi di alam semesta yang dapat diamati, setiap ikan di lautan, dan setiap individu semut di Bumi. Namun , tabrakan hampir pasti jika Anda menghasilkan UUID untuk setiap transistor yang diproduksi manusia dalam satu tahun, setiap serangga di Bumi, setiap butir pasir di Bumi, setiap bintang di alam semesta yang dapat diamati, atau apa pun yang lebih besar.
Jika Anda menghasilkan 1 miliar UUID per detik, itu akan memakan waktu sekitar 36 tahun untuk mendapatkan probabilitas tabrakan sebesar 10%.
Akhirnya, mungkin akan ada tabrakan di antara perangkat UUID yang dihasilkan selama sejarah manusia. Namun, kemungkinan bahwa UUID yang bertabrakan akan digunakan untuk tujuan yang sama semakin kecil, jadi tidak ada masalah dalam praktiknya.
sumber
Analisis kemungkinan tabrakan tersedia di Wikipedia: http://en.wikipedia.org/wiki/Uuid#Random_UUID_probability_of_duplicates
Seperti yang disebutkan di tautan, ini akan dipengaruhi oleh properti generator bilangan acak.
Ada juga kemungkinan bug dalam kode generator GUID; sementara kemungkinannya rendah, mereka mungkin lebih tinggi dari kemungkinan tabrakan berdasarkan matematika.
Filter Bloom mungkin cocok; itu dapat dengan cepat memberi tahu Anda jika GUID itu unik, tetapi ada kemungkinan indikasi benturan yang salah. Metode alternatif jika Anda menguji kelompok pada satu waktu adalah dengan mengurutkan kelompok dan membandingkan setiap elemen yang berurutan.
sumber
Secara umum, ya aman untuk diasumsikan.
Jika generator GUID Anda benar-benar acak, kemungkinan bentrokan dalam 1000 GUID sangatlah kecil.
Tentu saja, itu mengasumsikan generator GUID yang baik. Jadi pertanyaannya sebenarnya tentang seberapa besar Anda mempercayai alat yang Anda gunakan untuk menghasilkan GUID dan apakah alat tersebut memiliki pengujiannya sendiri?
sumber
Meskipun tabrakan mungkin terjadi, sangat kecil kemungkinannya. (Matematika di sini .) Aman untuk mengasumsikan bahwa mereka sebenarnya berbeda.
sumber
Biasanya ini adalah asumsi yang cukup aman.
http://en.wikipedia.org/wiki/Globally_Unique_Identifier
Apakah GUID selalu unik 100%?
sumber