Mejor que el asignador Hi-Lo, es el asignador "Linear Chunk". Esto utiliza un principio similar basado en tablas pero asigna trozos pequeños, de tamaño conveniente. & 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 los próximos, digamos, 20 teclas (que se llevan a cabo a continuación, como un rango en el servidor & utilizados según sea necesario):
select NEXT from KEY_ALLOC where SEQ=?;
update KEY_ALLOC set NEXT=(old value+20) where SEQ=? and NEXT=(old value);
Siempre que puede cometer esta transacción (reintentos uso de manejar contención), ha asignado 20 claves & puede dispensarlas según sea necesario.
Con un tamaño de porción de solo 20, este esquema es 10 veces más rápido que la asignación desde una secuencia de Oracle, y es 100% portátil entre todas las bases de datos. El rendimiento de asignación es equivalente a hi-lo.
A diferencia de la idea de Ambler, trata el espacio de teclas como una recta numérica contigua.
Esto evita el impulso de las claves compuestas (que en realidad nunca fueron una buena idea) y evita el desperdicio de lo-palabras completas cuando se reinicia el servidor. Genera valores clave "amigables" a escala humana.
La idea de Mr Ambler, en comparación, asigna los 16 o 32 bits altos, y genera grandes valores de clave nocivos para el ser humano como el incremento de las palabras altas.
Comparación de teclas asignadas:
Linear_Chunk Hi_Lo
100 65536
101 65537
102 65538
.. server restart
120 131072
121 131073
122 131073
.. server restart
140 196608
realidad Me correspondió con el Sr. Ambler en los años 90 para sugerir este esquema mejorado para él, pero estaba demasiado pegado & reacio a reconocer las ventajas & simplicidad clara de la utilización de una recta numérica lineal.
En cuanto al diseño, su solución es fundamentalmente más compleja en la línea de números (claves compuestas, productos hi_word grandes) que Linear_Chunk sin obtener ningún beneficio comparativo. Su diseño está matemáticamente probado deficiente.
¿Está diciendo que los "rangos bajos" se coordinan dentro del cliente, mientras que la "secuencia alta" corresponde a una secuencia DB? –
Sí, eso es básicamente eso. –
¿Los valores de alta y baja normalmente se componen en un solo valor entero, o como una clave comercial de dos partes? –