Lo é um alocador em cache que divide o espaço de chaves em grandes pedaços, normalmente com base em algum tamanho de palavra da máquina, em vez dos intervalos de tamanho significativo (por exemplo, obtendo 200 chaves de cada vez) que um ser humano pode escolher sensatamente.
O uso de Hi-Lo tende a desperdiçar um grande número de chaves na reinicialização do servidor e gera grandes valores de chave que não são amigáveis ao ser humano.
Melhor que o alocador Hi-Lo, é o alocador "Linear Chunk". Isso usa um princípio semelhante à tabela, mas aloca pequenos pedaços de tamanho conveniente e gera bons valores amigáveis ao ser humano.
create table KEY_ALLOC (
SEQ varchar(32) not null,
NEXT bigint not null,
primary key (SEQ)
);
Para alocar as próximas, digamos, 200 chaves (que são mantidas como um intervalo no servidor e usadas conforme necessário):
select NEXT from KEY_ALLOC where SEQ=?;
update KEY_ALLOC set NEXT=(old value+200) where SEQ=? and NEXT=(old value);
Desde que você possa confirmar esta transação (use novas tentativas para lidar com a contenção), você alocou 200 chaves e pode distribuí-las conforme necessário.
Com um tamanho de bloco de apenas 20, esse esquema é 10 vezes mais rápido do que alocado a partir de uma sequência Oracle e é 100% portátil entre todos os bancos de dados. O desempenho da alocação é equivalente a hi-lo.
Diferentemente da idéia de Ambler, ele trata o espaço das teclas como uma linha numérica linear contígua.
Isso evita o ímpeto das chaves compostas (que nunca foram realmente uma boa idéia) e evita desperdiçar palavras-chave inteiras quando o servidor é reiniciado. Ele gera valores-chave "amigáveis" em escala humana.
A idéia de Ambler, em comparação, aloca os altos 16 ou 32 bits e gera grandes valores de chave que não são amigáveis aos seres humanos à medida que as palavras-chave aumentam.
Comparação de chaves alocadas:
Linear_Chunk Hi_Lo
100 65536
101 65537
102 65538
.. server restart
120 131072
121 131073
122 131073
.. server restart
140 196608
Em termos de design, sua solução é fundamentalmente mais complexa na linha de números (chaves compostas, grandes produtos hi_word) do que Linear_Chunk, sem obter benefícios comparativos.
O design Hi-Lo surgiu no início do mapeamento e persistência de OO. Atualmente, estruturas de persistência como o Hibernate oferecem alocadores mais simples e melhores como padrão.