Mit UUID in CakePHP, Welchen Datentyp Wird Empfohlen?

Mein Szenario:

  • Neuen Kuchen (2.x) Projekt, Keine DB Noch
  • MySQL Cluster ist, und vielleicht auch Oracle Clustered Prod
  • Keine DATEN migriert/importiert
  • Daten können wie folgt Aussehen: Users -> HABTM -> Groups -> HABTM -> Other Groups

Ich ve wurde dabei ein wenig Forschung auf, wie zu verwenden UUIDs mit CakePHP und habe Folgendes gefunden:

Kuchen hat Native Unterstützung für UUID, aber es wird davon ausgegangen CHAR(36):

http://book.cakephp.org/2.0/en/getting-started/cakephp-conventions.html

Diese Stack Antwort weist darauf hin, dass:

Den Kosten zu tun UUID als CHAR(36) ist lächerlich hoch, und wird
dumm ist 1+ Millionen, 10 Millionen, 100+ Millionen von Zeilen, meiner bescheidenen
Erfahrung

Diese Blog-Post behauptet, dass BINARY(36) ist besser als CHAR(36):

Obwohl CakePHP unterstützt keine 16-byte-hex-kodierte UUID mit
der Schlüssel Art von BINARY(16), es unterstützt das BINARY(36), die noch
besser als mit CHAR(36), die kann verlangsamt werden durch Sortierung.

...aber der Kuchen Docs nicht sagen, dass...

Meine Frage ist, da CakePHP/MySQL (oder CakePHP/Oracle), ist CHAR(36) die einzige vernünftige Wahl, oder gibt es eine bessere, effizientere Möglichkeit zur Verwendung von UUIDs mit CakePHP (oder jeder anderen PHP-Framework, für diese Angelegenheit)?

  • Halten Sie im Verstand, wenn Sie innodb dann ist dein Primärschlüssel angehängt werden alle "index" und Sie haben erheblichen Aufwand in Indizes Größe. In der Regel die kleineren PK-Daten-Typ ist, desto besser. Und persönlich bevorzuge ich es immer ganze zahlen für Sie.
  • Vereinbart auf dem overhead, aber leider für die Datensätze, die diese app erstellen Sie müssen Global eindeutig sein, die nicht auf die Leistung auswirken.
  • Ich bin damit einverstanden, BINÄRE ist viel leistungsfähiger als CHAR, der 3.x Weg ist hier dokumentiert: github.com/dereuromark/cakephp-shim/blob/3.0/docs/...
  • BINARY(16) ist auch performant, aber die Schwierigkeiten mit der Notwendigkeit einer ausdrücklichen hexing und unhexing der Wert in der DB machen Sie es vermeiden. Durch die Art und Weise, einem alten blog-post erwähnt, dass ein quick-benchmark der CHAR(36) vs BINARY(16) ist hier und ich glaube BINARY(36) liegen irgendwo zwischen diesen beiden; evtl. mehr auf der Seite der guten 😉
InformationsquelleAutor JohnnyCoder | 2012-09-28
Schreibe einen Kommentar