Lo è un allocatore memorizzato nella cache che suddivide lo spazio delle chiavi in grossi blocchi, in genere basato su alcune dimensioni di parole macchina, piuttosto che su intervalli di dimensioni significative (ad esempio, ottenendo 200 chiavi alla volta) che un essere umano potrebbe ragionevolmente scegliere.
L'utilizzo di Hi-Lo tende a sprecare un gran numero di chiavi al riavvio del server e a generare grandi valori di chiavi non amichevoli per l'uomo.
Meglio dell'allocatore Hi-Lo, è l'allocatore "Linear Chunk". Questo utilizza un principio simile basato su una tabella, ma alloca piccoli blocchi di dimensioni convenienti e genera piacevoli valori a misura d'uomo.
create table KEY_ALLOC (
SEQ varchar(32) not null,
NEXT bigint not null,
primary key (SEQ)
);
Per allocare il prossimo, diciamo, 200 chiavi (che vengono quindi mantenute come intervallo nel server e utilizzate secondo necessità):
select NEXT from KEY_ALLOC where SEQ=?;
update KEY_ALLOC set NEXT=(old value+200) where SEQ=? and NEXT=(old value);
A condizione che sia possibile eseguire il commit di questa transazione (utilizzare i tentativi per gestire la contesa), sono state allocate 200 chiavi e è possibile distribuirle secondo necessità.
Con una dimensione di soli 20 pezzi, questo schema è 10 volte più veloce dell'allocazione da una sequenza Oracle ed è portatile al 100% tra tutti i database. Le prestazioni di allocazione sono equivalenti a hi-lo.
A differenza dell'idea di Ambler, considera lo spazio delle chiavi come una linea numerica lineare contigua.
Questo evita l'impulso per le chiavi composite (che non sono mai state una buona idea) ed evita di sprecare intere lo-word al riavvio del server. Genera valori chiave "amichevoli", a misura d'uomo.
L'idea di Mr Ambler, al confronto, alloca gli alti 16 o 32 bit e genera grandi valori chiave poco amichevoli per l'uomo come incremento delle parole alte.
Confronto di chiavi assegnate:
Linear_Chunk Hi_Lo
100 65536
101 65537
102 65538
.. server restart
120 131072
121 131073
122 131073
.. server restart
140 196608
Dal punto di vista del design, la sua soluzione è fondamentalmente più complessa sulla linea numerica (chiavi composite, grandi prodotti hi_word) rispetto a Linear_Chunk senza ottenere vantaggi comparativi.
Il design Hi-Lo è nato nelle fasi iniziali della mappatura e della persistenza OO. Oggigiorno i framework di persistenza come Hibernate offrono allocatori più semplici e migliori come impostazione predefinita.