2010-04-07 5 views
5

Wir sind dabei, vom C Guid.NewGuid() Random-ish-Guid-Generator zum sequentiellen Guid-Algorithmus zu wechseln, der in this post vorgeschlagen wird. Während dies für MS SQL Server gut zu funktionieren scheint, bin ich unsicher bezüglich der Implikationen für Oracle Datenbanken, in denen wir Guids in einem rohen (16) Feld speichern. Hat jemand einen Einblick, ob dieser Algorithmus gut für die Erstellung von sequentiellen Guids für Oracle sowie für MS SQL Server geeignet ist oder ob eine andere Variante verwendet werden soll.Sequenzielle (Kamm) GUIDs für Oracle

Danke!

Antwort

2

Die Verwendung von Raw (16) scheint ein vernünftiger Datentyp für GUIDs zu sein. Die maximale Größe für den Raw-Datentyp beträgt 2000 Byte und wird in Oracle 9i, 10g und 11 unterstützt.

Es gibt auch eine SQL-Funktion zum Generieren von GUIDs, sie heißt SYS_GUID. siehe Dokumentation hier->http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/functions153.htm

Sie können in diesem Artikel interessiert sein ->http://feuerthoughts.blogspot.com/2006/02/watch-out-for-sequential-oracle-guids.html

+0

Vielen Dank für Ihre Antwort. Was ich jedoch nicht möchte, ist, ob raw ein guter Datentyp für GUIDs in Oracle ist, sondern eher, ob der fragliche Algorithmus eine unnötige Indexfragmentierung in Oracle verursacht, obwohl dies eine gute Wahl für MS SQL Server zu sein scheint. Außerdem muss ich meine Guides auf dem Client generieren, daher wird die SYS_GUID-Funktion wenig hilfreich sein. – Eyvind

+0

Was genau ist eine unnötige Indexfragmentierung? Natürlich werden die GUIDs durch den gesamten Raum möglicher Daten verteilt (fragmentiert). Dafür ist GUID da. Die Fragmentierung der Daten ist eine inhärente Eigenschaft des GUID-Algorithmus, den die Datenbank zu bewältigen hat, egal ob es sich um SQL-Server oder Oracle handelt. Die Indeximplementierung kann damit umgehen, siehe -> http://en.wikipedia.org/wiki/B-tree –

+0

Die Idee ist, einen Algorithmus zu verwenden, der * sequentielle * Guids erzeugt, anstatt der standardisierten randomisierten Version. – Eyvind

1

Wenn ein Indexblock, zu voll 'für einen weiteren Eintrag, es geteilt wird.

Oracle verfügt über zwei Pfade, einen für "sequenzielle" Stilwerte und einen für "zufällige" Typwerte. Wenn der neue Eintrag am rechten Ende des Indexes erscheint, erhalten Sie einen 90-10 Split. Wenn es irgendwo in der Mitte ist, bekommt man 50-50. Wenn Sie möchten, dass "neue" Werte im Index zusammen gruppiert werden, ist ein sequenzieller Wert nützlich. Wenn Sie sie streuen möchten (z. B. um Konflikte bei "heißen" Blöcken zu vermeiden), dann sind zufällige Werte nützlich.

Ob die Technik für Oracle "gut" ist, hängt davon ab, welches Problem Sie lösen möchten.

Verwandte Themen