[database] Quel est l'algorithme Hi / Lo?


Answers

En plus de la réponse de Jon:

Il est utilisé pour pouvoir travailler déconnecté. Un client peut alors demander au serveur un nombre élevé et créer des objets en augmentant lui-même le nombre de lo. Il n'a pas besoin de contacter le serveur tant que la plage n'est pas utilisée.

Question

Quel est l'algorithme Hi / Lo?

J'ai trouvé ceci dans la documentation de NHibernate (c'est une méthode pour générer des clés uniques, section 5.1.4.2), mais je n'ai pas trouvé une bonne explication de comment cela fonctionne.

Je sais que Nhibernate le gère, et je n'ai pas besoin de connaître l'intérieur, mais je suis juste curieux.




Les algorithmes hi / lo divisent le domaine des séquences en groupes "salut". Une valeur "hi" est attribuée de manière synchrone. Chaque groupe "hi" reçoit un nombre maximum d'entrées "lo", qui peuvent être assignées hors ligne sans se soucier des entrées dupliquées simultanées.

  1. Le jeton "salut" est attribué par la base de données, et deux appels simultanés sont garantis pour voir des valeurs consécutives uniques
  2. Une fois qu'un jeton "hi" est récupéré, nous avons seulement besoin de "incrementSize" (le nombre d'entrées "lo")
  3. La plage d'identifiants est donnée par la formule suivante:

    [(hi -1) * incrementSize) + 1, (hi * incrementSize) + 1)
    

    et la valeur "lo" sera dans la gamme:

    [0, incrementSize)
    

    étant appliqué à partir de la valeur de départ de:

    [(hi -1) * incrementSize) + 1)
    
  4. Lorsque toutes les valeurs «lo» sont utilisées, une nouvelle valeur «hi» est récupérée et le cycle continue

Vous pouvez trouver une explication plus détaillée dans cet article :

Et cette présentation visuelle est également facile à suivre:

Bien que l'optimiseur hi / lo soit parfait pour optimiser la génération d'identifiants, il ne fonctionne pas bien avec d'autres systèmes insérant des lignes dans notre base de données, sans rien savoir de notre stratégie d'identificateur.

Hibernate propose l'optimiseur pooled-lo , qui combine une stratégie de générateur hi / lo avec un mécanisme d'allocation de séquence d'interopérabilité. Cet optimiseur est à la fois efficace et interopérable avec d'autres systèmes, étant un meilleur candidat que la précédente stratégie d'identifiant hi / lo.




Related