Lo es un asignador en caché que divide el espacio de teclas en grandes fragmentos, generalmente basado en el tamaño de algunas palabras de máquina, en lugar de los rangos de tamaño significativo (por ejemplo, obtener 200 teclas a la vez) que un humano podría elegir con sensatez.
El uso de Hi-Lo tiende a desperdiciar grandes cantidades de claves en el reinicio del servidor y genera grandes valores de clave hostiles para los humanos.
Mejor que el asignador Hi-Lo, es el asignador "Linear Chunk". Esto utiliza un principio similar basado en tablas, pero asigna pequeños trozos de tamaño conveniente y genera buenos valores amigables para los humanos.
create table KEY_ALLOC (
SEQ varchar(32) not null,
NEXT bigint not null,
primary key (SEQ)
);
Para asignar la siguiente, digamos, 200 teclas (que luego se mantienen como un rango en el servidor y se usan según sea necesario):
select NEXT from KEY_ALLOC where SEQ=?;
update KEY_ALLOC set NEXT=(old value+200) where SEQ=? and NEXT=(old value);
Siempre que pueda confirmar esta transacción (usar reintentos para manejar la contención), ha asignado 200 claves y puede dispensarlas según sea necesario.
Con un tamaño de fragmento de solo 20, este esquema es 10 veces más rápido que la asignación de una secuencia de Oracle, y es 100% portátil entre todas las bases de datos. El rendimiento de la asignación es equivalente a hi-lo.
A diferencia de la idea de Ambler, trata el espacio de teclas como una línea numérica lineal contigua.
Esto evita el impulso de las claves compuestas (que nunca fueron realmente una buena idea) y evita desperdiciar palabras bajas completas cuando se reinicia el servidor. Genera valores clave "amigables" a escala humana.
La idea del Sr. Ambler, en comparación, asigna los altos 16 o 32 bits, y genera grandes valores clave hostiles a los humanos a medida que aumentan las palabras hi.
Comparación de claves asignadas:
Linear_Chunk Hi_Lo
100 65536
101 65537
102 65538
.. server restart
120 131072
121 131073
122 131073
.. server restart
140 196608
En cuanto al diseño, su solución es fundamentalmente más compleja en la línea numérica (teclas compuestas, productos grandes de alta palabra) que Linear_Chunk sin lograr ningún beneficio comparativo.
El diseño Hi-Lo surgió temprano en el mapeo OO y la persistencia. En la actualidad, los marcos de persistencia, como Hibernate, ofrecen asignadores más simples y mejores por defecto.