Hi Mensen,

Sinds kort ben ik bezig een oud shorturl script van me te herschrijven maar nu in OOP style. Hierbij loop ik hoofdzakelijk tegen het probleem op van het creëren van een unieke hash. Het script zal een suffix moeten kunnen gebruiken (mits deze niet bezet is natuurlijk) en indien er geen suffix is ingevoerd, er zelf 1 creëren.

Enkel is het probleem nu dat je met een combinatie van 62 karakters (a-z, A-Z, 0-9) bij een suffix grootte van 4 characters al in de 14 miljoen combinaties kan lopen (62^4). Het lijkt me daarbij niet echt verstandig om continu een loop te gaan draaien om te controleren of de nieuwe (door het systeem gegenereerd in dit geval) nog vrij is. (Stel je voor dat er al 13 miljoen bezet zijn..)

Wat zouden jullie hier voor oplossing bij gebruiken? Of wat is hier de snelste oplossing voor?

Thanks in advance!

Robin
- Aar - op 17/05/2011 09:09:56

Jij loopt toch geen 13 miljoen records door? MySQL houd zelf toch wel een index bij, lijkt me of er dubbele bij zitten?

Heb je een voorbeeld van wat je bedoelt? Ik denk dat we elkaar verkeerd begrijpen..
Heb je al eens gekeken wat een UNIQUE-index op je database doet? En wat mysql_erro_no() doet? Als deze gelijk is aan 1066, dan weet je dat die ID al bestaat, en dan kan je een nieuwe poging wagen.
- Aar - op 17/05/2011 09:59:39

Heb je al eens gekeken wat een UNIQUE-index op je database doet? En wat mysql_erro_no() doet? Als deze gelijk is aan 1066, dan weet je dat die ID al bestaat, en dan kan je een nieuwe poging wagen.

Maar bedoel je dan mét of zonder alle mogelijke combinaties in de database? In example: Ik heb een database waar 14 miljoen mogelijke combinaties in kunnen, 13 miljoen daarvan zijn al bezet. Nu ga ik vervolgens een query draaien met 3 random combinaties om te kijken of deze nog vrij zijn, deze zijn allen bezet dus krijg ik error no 1066 terug. Dan ga ik hem weer opnieuw draaien. Ik heb geen benul van de kans berekening, maar bij 3 verschillende combinaties op een database waar al 13miljoen combinaties in staan, lijkt me de kans vrij klein dat je snel een vrije combinatie zal vinden. Ik denk overigens nog steeds dat ik je verkeerd begrijp, vandaar het verzoek om een voorbeeld ;-)

Robin, kijk nou nog eens naar mijn query.. Die werkt gewoon, 1 keer draaien en klaar!
Chris Horeweg op 17/05/2011 10:55:04

Robin, kijk nou nog eens naar mijn query.. Die werkt gewoon, 1 keer draaien en klaar!

Deze heb ik inderdaad bekeken en werkt naar verwachting, heb hem een klein beetje aangepast zodat a-Z en 0-9 er ook in voorkomen en ze niet uppercase zijn. Hoe kan ik nu het beste alle combinaties toevoegen in de database? Met bigdump of gewoon rechtstreeks via phpmyadmin? Qua verstand van database ontbreekt er nog wat van mijn kant, maar heb reeds een boek besteld om me erin te kunnen gaan verdiepen.
MySQL verbinding maken en in plaats van ze te echo-en, een query uitvoeren en ze erin zetten ;-) Zie de beginners MySQL handleiding
Chris Horeweg op 17/05/2011 10:59:20

MySQL verbinding maken en in plaats van ze te echo-en, een query uitvoeren en ze erin zetten ;-) Zie de beginners MySQL handleiding

Hehe okay, ja zover was ik al met MySQL. Ging me eerder om het normaliseren en het optimaal laten werken van een MySQL database. Thanks voor je hulp tot zover in ieder geval!



[size=xsmall]Toevoeging op 17/05/2011 18:56:03:[/size]

Hey Chris. Het is allemaal gelukt, thanks voor je hulp. Momenteel staan er ruim 240 duizend combinaties in de database, dat is eerst wel even genoeg denk ik. Is er ook een snellere manier om random vrije hashes op te halen? In jouw query had je order by rand, maar het ziet er naar uit dat dit de query wel ruim 5 seconden doet vertragen..

Reageren