Lo est un allocateur mis en cache qui divise l'espace de clés en gros morceaux, généralement basés sur une certaine taille de mot machine, plutôt que sur des plages de taille significative (par exemple, l'obtention de 200 clés à la fois) qu'un humain pourrait raisonnablement choisir.
L'utilisation de Hi-Lo a tendance à gaspiller un grand nombre de clés au redémarrage du serveur et à générer de grandes valeurs de clé peu conviviales.
Mieux que l'allocateur Hi-Lo, l'allocateur "Linear Chunk". Cela utilise un principe similaire basé sur une table mais alloue de petits morceaux de taille pratique et génère de belles valeurs conviviales.
create table KEY_ALLOC (
SEQ varchar(32) not null,
NEXT bigint not null,
primary key (SEQ)
);
Pour allouer les 200 clés suivantes, disons (qui sont ensuite conservées en tant que plage dans le serveur et utilisées selon les besoins):
select NEXT from KEY_ALLOC where SEQ=?;
update KEY_ALLOC set NEXT=(old value+200) where SEQ=? and NEXT=(old value);
À condition que vous puissiez valider cette transaction (utilisez des tentatives pour gérer les conflits), vous avez alloué 200 clés et pouvez les distribuer au besoin.
Avec une taille de bloc de seulement 20, ce schéma est 10 fois plus rapide que l'allocation à partir d'une séquence Oracle et est 100% portable dans toutes les bases de données. Les performances d'allocation sont équivalentes à hi-lo.
Contrairement à l'idée d'Ambler, il traite l'espace de clés comme une ligne de nombre linéaire contiguë.
Cela évite l'impulsion pour les clés composites (qui n'ont jamais vraiment été une bonne idée) et évite de gaspiller des mots entiers au redémarrage du serveur. Il génère des valeurs clés «conviviales» à taille humaine.
L'idée de M. Ambler, par comparaison, alloue les 16 ou 32 bits les plus élevés et génère de grandes valeurs de clé peu conviviales en tant qu'incrément des mots forts.
Comparaison des clés allouées:
Linear_Chunk Hi_Lo
100 65536
101 65537
102 65538
.. server restart
120 131072
121 131073
122 131073
.. server restart
140 196608
Du point de vue de la conception, sa solution est fondamentalement plus complexe sur la ligne numérique (clés composites, grands produits hi_word) que Linear_Chunk sans aucun avantage comparatif.
La conception Hi-Lo est apparue au début de la cartographie et de la persistance OO. De nos jours, les frameworks de persistance tels que Hibernate offrent des allocateurs plus simples et meilleurs par défaut.