Ich habe eine App in Rails auf Heroku mit einer PostgreSQL-Datenbank erstellt.
Es gibt ein paar Tabellen, die so konzipiert sind, dass sie mit mobilen Geräten synchronisiert werden können, wo Daten an verschiedenen Orten erstellt werden können. Dafür habe ich ein uuid-Feld, das eine Zeichenfolge speichert, die einer GUID entspricht, zusätzlich zu einem automatisch inkrementierten Primärschlüssel. Das uuid ist das, was zwischen dem Server und den Clients kommuniziert wird.
Nach der Implementierung des Synchronisations-Motors auf der Serverseite habe ich festgestellt, dass dies zu Leistungsproblemen führt, wenn ich ständig zwischen uuid<->id zuordnen muss (beim Schreiben von Objekten muss ich nach der uuid abfragen, um die id zu erhalten, bevor ich speichere, und umgekehrt beim Zurücksenden von Daten).
Ich überlege jetzt, nur noch UUID als Primärschlüssel zu verwenden, um das Schreiben und Lesen einfacher und schneller zu machen.
Ich habe gelesen, dass UUID als Primärschlüssel manchmal eine schlechte Indexleistung (Indexfragmentierung) geben kann, wenn ein geclusteter Primärschlüsselindex verwendet wird. Leidet PostgreSQL unter diesem Problem oder ist es in Ordnung, UUID als Primärschlüssel zu verwenden?
Ich habe bereits eine UUID-Spalte heute, also wird es speichermäßig besser sein, weil ich die reguläre id-Spalte entferne.