Unique Key!? Denkfabrik :o) Komplexe Sache...

Mik3e

Erfahrenes Mitglied
Einen heißen und schönen Nachmittag zusammen :eek:)

Stehe vor folgendem Problem:

Ich muss einen UNIQUE KEY entwickeln, der folgende Eigenschaften hat:

1. Gesamtlänge nicht über 18 Zeichen (besser 12 oder 14)
2. Darf nur aus numerische Zeichen (0-9) bestehen
3. Der Key muss "unendlich" lang sein
4. Der Key muss eine 4-stellige Zufallszahl enthalten

Das sind mal die Eckdaten. Vorerst ist mir mal klar, dass der Key Zeitebunden sein muss. Der Key muss mindestens 999.999 Datensätze pro Minute zulassen.

Zur Erklärung:
Meine Idee ist folgender Aufbau für den Key:
KEY = DATE(YmdHi) + RMD(4) + Laufende Nummer(6)

Das würde allerdings zu einem Key mit einer Länge von 20 Zeichen führen -> viel zu lang.

Nun grübel ich schon einige Zeit rum, welche anderen Möglichkeiten es geben könnte, ohne die Leistungsfähigkeit des Keys einzuschränken.

Vielleicht hat jemand eine Idee oder ich kann damit eine kleine Diskussion anstoßen...

Danke & LG
Mike
 
Ach ja, hier ein Beispiel was ich mir unter "kürzen" vorstelle:
ZB. könnte man das Monat durch die Buchstaben A-L ersetzen (Jänner bis Dezember). Das würde eine Stelle sparen.
ABER: Dann ist der ganze Key natürlich nicht mehr numerisch...
 
wie wäre es mit Timestamp(10).Zufall(4).Nummer(1).
15 -Stellen und bricht erst beim 10. Tupel ab, der innerhalb von einer Sekunde eingetragen wurde UND immer denselben 4-stelligen Zufall hat.
 
Das klingt nicht schlecht..
Du meinst einen Key, der so aussieht:

DATE(ymdHis)[12] + RMD(4) + INT(1)
050728144800 + 1234 + 1

Bin dann allerdings auf 17 Stellen wenn ich mich nicht verzählt hab....
 
Dadurch ergibt sich eigentlich folgendes:

Im besten Fall:
59.049 Keys / Sec
(wenn der Randomizer wirklich immer eine andere Zufallszahl ausgibt -> 9^4)

Im schlechtesten Fall:
9 Keys / Sec
(wenn der Randomizer innerhalb einer Sekunde immer die Selbe Zahl ausgibt)

Oder hab ich Dich falsch verstanden?
 
Ja, in den UNIX-Timestamp habe ich nicht sonderlich viel vertrauen... Der wäre natürlich eine elegante Lösung...

Ich bilde mir ein gehört zu haben, dass der UX Timestamp nur bis zu einem gewissen Datum laufen soll!?

(Bilde mir ein das mal in Zusammenhang mit der mktime() gelesen zu haben)
 
Ja.. klar.. die 0-9 am schluss gehören auch dazu..
Hier was ich in verbindung mit dem UX Timestamp gemeint habe:

Notes
Caution
Negative timestamps are not supported under any known version of Windows. Therefore the range of valid years includes only 1970 through 2038.

Das heißt, im Jahr 2038 ist Ende im Gelände...
Und das klingt nicht sonderlich vertrauenserweckend.
 
Was hat das mit Vertrauen zu tun?
Der Timestamp hat halt von vorneherein 10-Stellen.
Wenn am 19. Januar 2038 um 04:14:07 Uhr die 99 99 99 99 99 erreicht ist halt Schluss.
Bis dahin gibts aber bestimmt was anderes.

Vergleichbar IPv4 und jetzt IPv6.
 

Neue Beiträge

Zurück