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?
Beginnen bij a lijkt me. Dan b, c, ... z
Daarna a, ab, ac... etc.
Bumpen is overigens toegestaan na één dag ja.
En bij een database met 14 miljoen records? Allemaal 1 voor 1 af gaan lijkt me geen mogelijkheid. Enige oplossing die ik zie is het toevoegen van alle mogelijke combinaties (geen idee hoe overigens) en dan vervolgens gewoon met een query een vrije combinatie zoeken. Maar hoe ga ik dan zoveel combinaties toevoegen? Bij een suffix met 4 karakters (i.e.: 3fA4)heb je al 14776336 mogelijke combinaties.. (62(2x alfabet + 0-9)^4)..
Het gaat om een zo kort mogelijke code.. SHA1 is 40 tekens?
Je kan inderdaad 14 miljoen records aanmaken, vervolgens "SELECT code FROM codes WHERE used = 0 ORDER BY RAND() LIMIT 1" gebruiken om een code op te halen. Op de "code" veld zet je een UNIQUE attribuut, dan heb je geen dubbele codes ook.
Het gaat om een zo kort mogelijke code.. SHA1 is 40 tekens?
Je kan inderdaad 14 miljoen records aanmaken, vervolgens "SELECT code FROM codes WHERE used = 0 ORDER BY RAND() LIMIT 1" gebruiken om een code op te halen. Op de "code" veld zet je een UNIQUE attribuut, dan heb je geen dubbele codes ook.
Simpel script, geef aan hoeveel codes je wilt en hij maakt unieke codes aan :)
Inderdaad is het natuurlijk de bedoeling dat de suffix zo kort mogelijk blijft (of in ieder geval bij de kortst mogelijke combinatie begint). Thanks voor je script, hier heb ik zeker wel wat aan. Op welke manier kan ik het beste 14 miljoen hashes in een database gooien? Query opbouwen en dan met bigdump erin gooien ofzo? Of zijn er snellere methodes?
Unique key op je database, en dan kijken met of er een fout optreedt met mysql_erro_no().
Ik meen dat bij een duplicate key foutcode 1022 teruggaf, of 1044. Maar dat moet je even op zoeken. Als hij een unique key aangeeft doe je een nieuwe insert.
Unique key op je database, en dan kijken met of er een fout optreedt met mysql_erro_no().
Ik meen dat bij een duplicate key foutcode 1022 teruggaf, of 1044. Maar dat moet je even op zoeken. Als hij een unique key aangeeft doe je een nieuwe insert.
1066 geloof ik inderdaad, maar je gaat natuurlijk niet (die kans kan je lopen) 13 miljoen records aflopen.. Daarom lijkt alle mogelijk combinaties toevoegen en daar een vrije uitkiezen de beste mogelijkheid.