Találkoztatok már UUID-ütközéssel?
Olyan, amikor két generált UUID ugyanaz lesz. Azt igéri, hogy világszinten egyedi, de matematikailag ez egy véges halmaz, elképzelhető, hogy lesz ütközés.
Szoktatok ilyenre készülni?
Én most egy adatbázba generálok egyedi UUID-vel sorokat. Ezzel lehet majd egy weboldalon megímezni az adott részt. Tehát az UUID bekerül az url-be majd. És ugyan már megcsináltam az előzetes ellenőrzést, csak az merült fel bennem, hogy egyáltalán van ennek értelme? Fordult már elő ilyen bárkivel is, hogy két legenerált UUID ütközzön egy rendszeren belül?
Illetve nem fog ez a program belassulni idővel?
Ilyen a kódom pszeudokódban egyébként:
- generálok egy uuid-t
- lekérdezem a meglévőek között van-e ilyen
- ha van már ilyen akkor újrakezdem az egészet
- ha nincs akkor kész vagyunk, mehet a program többi része
"Szoktatok ilyenre készülni?"
Nem. Ugyanis annak a valószínűsége, hogy két véletlenszerűen generált UUID megegyezzen, kisebb, mint annak, hogy egy éven át minden héten megnyered a lottóötöst.
#5: azért ez nagyon nem igaz.
A guid az 128 bites, kb 3*10^38 lehetőség
Az 5-ös lottón kb 44 millió kombináció van, 44 milliü az 52-en kb 3*10^397, azaz JÓVAL valószínűtlenebb. Kb 5 alkalommal történő nyeréssel egyedik meg, nem egy egész évvel.
Persze ez akkor igaz, ha egyetlen szelvényt veszel minden héten. Ha nincs a szelvényekre korlát, akár midnen héten nyerhetsz, csak az sokba kerül :)
Illetve még azt is hozzá kéne tenni, hogy a guid azért nem egy sima random érték általában telejs egészében, hanem van benne egy időbélyeg rész is. Ami csökkebti jóval a véletlenszerű bitek számát.
egy stackoverflow kommentben olvastam ezt a kifejezést a problémára: "UUID generation guarantees uniqueness across time and space"
a UUID generalás téren és időn ár garantálja az egyediséget
annyira kicsi az ütközés valószínűsége, hogy kvázi halott kód lenne az újragenerálás
több pénz/idő/energia lenne lekezelni azt mint elfogadni hogy egyszer majd valamikor 1500 éven belül talán lesz 2 közel hasonló érték
"the number of UUIDs generated to have at least 1 collision is 2.71 quintillion. This is equivalent to generating around 1 billion UUIDs per second for about 85 years."
Vagyis egy UUID ütközéshez ~85 évig kéne másodpercenként 1 milliárdot generálni.
De ezek csak esélyek. Hasonlóan ahhoz - bár nyilván sok nagyságrenddel másabb valószínűségekkel dolgozva - hogy dobókockával is egyenletes eloszlásod lesz nagy átlagban. De azért nagyritkán belefér az hogy valaki 5 egymást követő alkalommal hatost dobjon.
A lottón is hibába játszanék 43-44 millió hétig, az sem garantálná, hogy ezalatt pontosan egyszer ötösöm lesz. Ahogy azt sem, hogy nem lesz véletlenül kétszer egymás után ötösöm.
Lényeg, hogy ezek nem mondják el, hogy nálad mi fog történni. Csak azt mondják el, hogy általában mi szokott történni.
Ha már kész a kódod, akkor ne töröld, elfér. Valószínűleg sosem vog végrehajtódni, de ha mégis a sokmilliárd ember közül éppen neked fog egyetlen egyszer is lefutni, akkor sok fejvakarástól és reprodukálhatatlan hibától tud megóvni.
Egyetértek azokkal, akik a rá-ellenőrzésre teszik a voksukat. Én is ellenőrzöm az UUID létezését mentés előtt. Jobb félni, mint megijedni alapon.
Ha prod környezetben fekszik meg e miatt, mert nem gondoltál rá, az rengeteg hiba jelentéstől ment meg.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!