Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ist Mysql UUID_SHORT() vergleichbar mit UUID()

uuid_short() erzeugt eine bitweise Zusammenfassung der Server-ID, einer ziemlich statischen Zeitkomponente und einer sequentiell ansteigenden 24-Bit-Ganzzahl. Diese Bits werden in eine 8-Byte-Ganzzahl gestopft. Die Zeitkomponente basiert auf der Startzeit des Servers.

uuid() erzeugt eine Hex-Zeichenfolge, die eine 16-Byte-Version1-UUID darstellt. UUIDs der Version 1 sind eine bitweise Anhäufung der Server-ID, des aktuellen Zeitstempels, einiger Bytes, die ins Spiel kommen, wenn Sie IDs mit Hyperspeed generieren, und ein paar Bits des Dienstprogramms.

Um Ihre Frage zu beantworten:funktioniert uuid_short bietet zeitliche und räumliche Eindeutigkeit, die mit uuid konkurriert ? Die Antwort ist nein. Beispielsweise die Server-ID in einem uuid_short ist nur ein Byte. Wenn Sie also 256 oder mehr Server haben, haben zumindest einige von ihnen dieselbe Knoten-ID, was bedeutet, dass Sie die Eindeutigkeit des Speicherplatzes verlieren. Zum Vergleich:Die Server-ID in der UUID von Version 1 ist 6 Byte lang, wodurch die Wahrscheinlichkeit von Duplikaten für alle außer den größten Unternehmensserverfarmen effektiv beseitigt wird :)

Eine bessere Frage ist, ob uuid_short ist gut genug. Sie könnten ID-Kollisionen sehen, wenn Sie :

  1. Generieren Sie in kurzer Zeit mehr als 16 Millionen IDS vom selben Server. ***
  2. Starten Sie alle Server mit derselben Server-ID genau zur gleichen Zeit und teilen Sie Daten zwischen ihnen.
  3. Fummeln Sie an der Systemuhr herum und starten Sie dann Ihren Server neu.

Das zweite Problem scheint für die meisten Leute unwahrscheinlich, aber das erste ist es wert, untersucht zu werden, bevor Sie sich dazu verpflichten, uuid_short zu erstellen die Grundlage Ihrer Schlüssel.

*** Basierend auf der MySQL-Dokumentation für uuid_short , scheint es, als würden Kollisionen auftreten, wenn Sie während der Betriebszeit eines einzelnen Servers mehr als 16 Millionen IDs generieren. Aber das wäre albern. Die MySQL-Dokumentation sagt weiter, dass es Ihnen gut geht, solange Sie nicht 16 Millionen IDs pro Sekunde generieren. Das bedeutet, dass sie einige der Bits im Zeitstempel erhöhen müssen, wenn Sie die 16 Millionen sequentiellen IDs erschöpfen. Ich habe das nicht getestet.