Lo ist ein zwischengespeicherter Allokator, der den Schlüsselbereich in große Teile aufteilt, die normalerweise auf einer bestimmten Maschinenwortgröße basieren, und nicht auf den Bereichen mit sinnvoller Größe (z. B. 200 Schlüssel gleichzeitig), die ein Mensch möglicherweise sinnvoll auswählt.
Die Verwendung von Hi-Lo verschwendet beim Neustart des Servers in der Regel eine große Anzahl von Schlüsseln und generiert große, für den Menschen unfreundliche Schlüsselwerte.
Besser als der Hi-Lo-Allokator ist der Allokator "Linear Chunk". Dies verwendet ein ähnliches tabellenbasiertes Prinzip, weist jedoch kleine, zweckmäßig große Blöcke zu und generiert nette, menschenfreundliche Werte.
create table KEY_ALLOC (
SEQ varchar(32) not null,
NEXT bigint not null,
primary key (SEQ)
);
So weisen Sie beispielsweise die nächsten 200 Schlüssel zu (die dann als Bereich auf dem Server gespeichert und bei Bedarf verwendet werden):
select NEXT from KEY_ALLOC where SEQ=?;
update KEY_ALLOC set NEXT=(old value+200) where SEQ=? and NEXT=(old value);
Vorausgesetzt, Sie können diese Transaktion festschreiben (verwenden Sie Wiederholungsversuche, um Konflikte zu behandeln), haben Sie 200 Schlüssel zugewiesen und können diese nach Bedarf ausgeben.
Mit einer Blockgröße von nur 20 ist dieses Schema 10-mal schneller als die Zuweisung aus einer Oracle-Sequenz und zu 100% auf alle Datenbanken portierbar. Die Zuordnungsleistung entspricht Hi-Lo.
Im Gegensatz zu Amblers Idee wird der Schlüsselraum als zusammenhängende lineare Zahlenlinie behandelt.
Dies vermeidet den Anstoß für zusammengesetzte Schlüssel (die nie wirklich eine gute Idee waren) und vermeidet die Verschwendung ganzer Wörter beim Neustart des Servers. Es generiert "freundliche" Schlüsselwerte auf menschlicher Ebene.
Im Vergleich dazu weist die Idee von Herrn Ambler die hohen 16- oder 32-Bit-Werte zu und generiert große, für den Menschen unfreundliche Schlüsselwerte als Inkrement der Hi-Words.
Vergleich der zugewiesenen Schlüssel:
Linear_Chunk Hi_Lo
100 65536
101 65537
102 65538
.. server restart
120 131072
121 131073
122 131073
.. server restart
140 196608
In Bezug auf das Design ist seine Lösung in der Zahlenreihe (zusammengesetzte Schlüssel, große Hi_word-Produkte) wesentlich komplexer als die von Linear_Chunk, ohne dass ein komparativer Vorteil erzielt wird.
Das Hi-Lo-Design entstand früh in der OO-Zuordnung und -Persistenz. Heutzutage bieten Persistenz-Frameworks wie Hibernate standardmäßig einfachere und bessere Allokatoren.