Microsoft SQL Server bietet den NEWID
Befehl zum Generieren eines neuen GUID- Werts (der Microsoft-Version von UUID ), der als Primärschlüsselwert (in ihrem uniqueidentifier
Datentyp) verwendet werden kann. Diese sind nicht sequentiell, daher kann die Aktualisierung eines Index ineffizient sein.
Alternativ bietet MS SQL Server den NEWSEQUENTIALID
Befehl an. Um ihre Dokumentation zu zitieren:
Erstellt eine GUID, die größer ist als jede GUID, die zuvor von dieser Funktion auf einem bestimmten Computer seit dem Start von Windows generiert wurde. Nach dem Neustart von Windows kann die GUID von einem niedrigeren Bereich aus erneut gestartet werden, ist jedoch immer noch global eindeutig. Wenn eine GUID-Spalte als Zeilenbezeichner verwendet wird, kann die Verwendung von NEWSEQUENTIALID schneller sein als die Verwendung der NEWID-Funktion. Dies liegt daran, dass die NEWID-Funktion zufällige Aktivitäten verursacht und weniger zwischengespeicherte Datenseiten verwendet. Die Verwendung von NEWSEQUENTIALID hilft auch dabei, die Daten- und Indexseiten vollständig auszufüllen.
Gibt es eine Möglichkeit, die effizient indizierte UUID in Postgres zu erhalten?
quelle
NEXSEQUENTIALID
scheint eine Problemumgehung für solche zu sein. (Und es gibt andere Techniken.)Antworten:
uuid-ossp
ModulPostgreSQL verwendet die standardisierten UUID-Generierungsalgorithmen von ITU-T Rec. X.667 , ISO / IEC 9834-8: 2005 und RFC 4122. Ab den Dokumenten
uuid-ossp
,Solange sich die MAC-Adresse nicht ändert, sind Sie golden.
Trotzdem stimme ich @a_horse_with_no_name zu,
In der Tat würde ich es angesichts der Möglichkeit von weniger Kollisionen und mehr Sicherheit annehmen. Und dazu würde ich verwenden
uuid_generate_v4()
quelle
Ja, Tomas Vondra hat eine sequentielle UUID-Erweiterung für PostgreSQL erstellt, die auf der nur weniger vorhersehbaren MSSQL-Newsequentialid basiert.
Primärschlüssel werden von Indizes verwendet, um Daten schneller zu finden, da sie sequentiell sind. Durch die Verwendung vollständig zufälliger UUIDs verpassen sie den Vorteil.
Die Verwendung einer perfekt sequentiellen UUID wird vorhersehbar und widerspricht der ursprünglichen Idee, UUIDs zu verwenden, da sie global einzigartig sind.
In der Erweiterung von Vondra werden Bits aus beiden Welten verwendet: "... Anstatt ein perfekt sequentielles Präfix zu generieren, ist der Wert für eine Weile sequentiell, wird aber auch gelegentlich umbrochen. Die Umhüllung beseitigt die Vorhersagbarkeit ..."
So installieren Sie es in Ihrem PostgreSQL: Voraussetzungen unter Ubuntu:
Installieren:
in PostgreSQL:
Lassen Sie es anhand eines Beispiels funktionieren:
... wird in meinem Fall erstellen:
Quelle: https://github.com/tvondra/sequential-uuids https://www.2ndquadrant.com/de/blog/sequential-uuid-generators/
quelle