ClickHouse/docs/fr/query_language/dicts/external_dicts_dict_lifetime.md
2020-03-30 15:48:55 +03:00

3.1 KiB

machine_translated
true

Mises À Jour Du Dictionnaire

ClickHouse met périodiquement à jour les dictionnaires. L'intervalle de mise à jour pour les dictionnaires entièrement téléchargés et l'intervalle d'invalidation pour les dictionnaires <lifetime> tag en quelques secondes.

Les mises à jour du dictionnaire (autres que le chargement pour la première utilisation) ne bloquent pas les requêtes. Lors des mises à jour, l'ancienne version d'un dictionnaire est utilisée. Si une erreur se produit pendant une mise à jour, l'erreur est écrite dans le journal du serveur et les requêtes continuent d'utiliser l'ancienne version des dictionnaires.

Exemple de paramètres:

<dictionary>
    ...
    <lifetime>300</lifetime>
    ...
</dictionary>
CREATE DICTIONARY (...)
...
LIFETIME(300)
...

Paramètre <lifetime>0</lifetime> (LIFETIME(0)) empêche la mise à jour des dictionnaires.

Vous pouvez définir un intervalle de temps pour les mises à niveau, et ClickHouse choisira un temps uniformément aléatoire dans cette plage. Ceci est nécessaire pour répartir la charge sur la source du dictionnaire lors de la mise à niveau sur un grand nombre de serveurs.

Exemple de paramètres:

<dictionary>
    ...
    <lifetime>
        <min>300</min>
        <max>360</max>
    </lifetime>
    ...
</dictionary>

ou

LIFETIME(MIN 300 MAX 360)

Lors de la mise à niveau des dictionnaires, le serveur ClickHouse applique une logique différente selon le type de source:

  • Pour un fichier texte, il vérifie l'heure de la modification. Si l'heure diffère de l'heure enregistrée précédemment, le dictionnaire est mis à jour.
  • Pour les tables MyISAM, l'Heure de modification est vérifiée à l'aide d'un SHOW TABLE STATUS requête.
  • Les dictionnaires d'autres sources sont mis à jour à chaque fois par défaut.

Pour les sources MySQL (InnoDB), ODBC et ClickHouse, vous pouvez configurer une requête qui mettra à jour les dictionnaires uniquement s'ils ont vraiment changé, plutôt que chaque fois. Pour ce faire, suivez ces étapes:

  • La table de dictionnaire doit avoir un champ qui change toujours lorsque les données source sont mises à jour.
  • Les paramètres de la source doivent spécifier une requête qui récupère le champ de modification. Le serveur ClickHouse interprète le résultat de la requête comme une ligne, et si cette ligne a changé par rapport à son état précédent, le dictionnaire est mis à jour. Spécifier la requête dans le <invalidate_query> champ dans les paramètres pour le source.

Exemple de paramètres:

<dictionary>
    ...
    <odbc>
      ...
      <invalidate_query>SELECT update_time FROM dictionary_source where id = 1</invalidate_query>
    </odbc>
    ...
</dictionary>

ou

...
SOURCE(ODBC(... invalidate_query 'SELECT update_time FROM dictionary_source where id = 1'))
...

Article Original