Doctrine Annotations type="guid" und strategie="UUID" Verhalten?

8

Ok, ich möchte nur wissen, was das Verhalten dieser Anmerkung macht:

%Vor%

Sind die Schlüssel in aufsteigender Reihenfolge, wenn ich Zeilen in meine Tabelle einfüge?

Ich weiß, dass die Schlüssel nicht so einfach sind wie 00001 , 000002 und verhält sich wie

  • 007f13ff-ce26-11e4-8e3d-a0b3cce9bb7e
  • 00805a63-ce26-11e4-8e3d-a0b3cce9bb7e
  • 0b1b6ca9-d178-11e4-8e3d-a0b3cce9bb7e

aber meine Frage ist, sind die Schlüssel in einer bestimmten Reihenfolge wie die erste eingefügte Zeile ist ein niedrigerer alphanumerischer Wert als der letzte Wert .. Immer?

    
Harold Anthony Ocampo 12.08.2015, 06:31
quelle

1 Antwort

14

Kurze Antwort: UUID sind nicht in einer bestimmten Reihenfolge.

Etwas Hintergrund

UUID sind eine Alternative zu Autoinkrement-Ganzzahlen, die immer mehr verwendet werden, weil sie einige Vorteile haben.

>
  1. Sie brechen Ihre Anwendung nicht, wenn Sie den 65537-Datensatz einfügen (oder ähnlich 2 ^ x + 1, abhängig von der ursprünglichen Größe der ID). Das Schlimmste, was passieren kann, ist, dass du eine doppelte ID hast, aber das ist sehr unähnlich: Ссылка

  2. Sie können sie in Ihrem Code generieren vor Speichern des Datensatzes; Sie müssen "last_insert_id" nicht aus der Datenbank abrufen. Das ist gut, zum Beispiel, wenn Sie auch verwandte Datensätze in einer anderen Tabelle speichern müssen (natürlich kann Doctrine das für Sie übernehmen, aber das ist eine andere Geschichte).

  3. Sie geben die Anzahl der Datensätze in Ihrer Tabelle nicht an einen intelligenten Mann weiter, der die ID der aktuellen Bestellung lesen kann :-)

Über das Sortieren

In der derzeit gebräuchlichsten Version (v4) sind UUID rein zufällig, sie sind also nicht in einer bestimmten Reihenfolge.

Version 1 UUID ist eine Kombination aus einem 60-Bit-Timestamp mit einer 48-Bit-MAC-Adresse.

Wenn Sie die Doctrine-UUID-Strategie verwenden, verwenden Sie im Grunde die datenbankspezifische Implementierung (d. h. UUID() function). Im Fall von MySQL 5.7 handelt es sich um ein v1-kompatibles Schema, das die UUID als

erzeugt %Vor%

wo

  • aaaaaaaa ist der untere Teil des Zeitstempels
  • bbbb ist der mittlere Teil des Zeitstempels
  • cccc ist der obere Teil des Zeitstempels
  • dddd fügt eine zeitliche Eindeutigkeit hinzu, wenn die Zeit angepasst wird
  • eeeeeeeeeeee ist die Knoten-ID (MAC-Adresse)

Da der Zeitstempel umgekehrt ist, wenn Sie mehrere UUID in kurzer Zeit produzieren, werden Sie sie sortieren, aber auf lange Sicht werden sie nicht sortiert. Denken Sie daran, die aktuellen Sekunden als ersten Teil der UUID zu verwenden.

Hinweis: Die Antwort wurde dank des @Etki-Kommentars verbessert, der einen wertvollen Beitrag hinzufügte und mich dazu zwang, mehr über das Thema zu erfahren.

    
Francesco Abeni 12.08.2015, 09:40
quelle

Tags und Links