> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-parallel-read-in-order-multi-part.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Types de layout de dictionnaire pour le stockage des dictionnaires en mémoire

# Layouts de dictionnaires

<div id="storing-dictionaries-in-memory">
  ## Types de layout de dictionnaire
</div>

Il existe plusieurs façons de stocker les dictionnaires en mémoire, chacune avec ses propres compromis en termes d’utilisation du CPU et de la RAM.

| Layout | Description |
| - | - |
| [flat](/fr/reference/statements/create/dictionary/layouts/flat) | Stocke les données dans des tableaux simples indexés par clé. C’est le layout le plus rapide, mais les clés doivent être de type `UInt64` et rester inférieures à `max_array_size`. |
| [hashed](/fr/reference/statements/create/dictionary/layouts/hashed) | Stocke les données dans une table de hachage. Aucune limite sur la taille des clés, et prend en charge n’importe quel nombre d’éléments. |
| [sparse\_hashed](/fr/reference/statements/create/dictionary/layouts/hashed#sparse_hashed) | Comme `hashed`, mais avec un compromis en faveur d’une utilisation mémoire plus faible au prix du CPU. |
| [complex\_key\_hashed](/fr/reference/statements/create/dictionary/layouts/hashed#complex_key_hashed) | Comme `hashed`, pour les clés composites. |
| [complex\_key\_sparse\_hashed](/fr/reference/statements/create/dictionary/layouts/hashed#complex_key_sparse_hashed) | Comme `sparse_hashed`, pour les clés composites. |
| [hashed\_array](/fr/reference/statements/create/dictionary/layouts/hashed-array) | Attributs stockés dans des tableaux, avec une table de hachage qui associe les clés aux indices des tableaux. Économe en mémoire lorsqu’il y a de nombreux attributs. |
| [complex\_key\_hashed\_array](/fr/reference/statements/create/dictionary/layouts/hashed-array#complex_key_hashed_array) | Comme `hashed_array`, pour les clés composites. |
| [range\_hashed](/fr/reference/statements/create/dictionary/layouts/range-hashed) | Table de hachage avec plages ordonnées. Prend en charge les recherches par clé + plage de dates/heures. |
| [complex\_key\_range\_hashed](/fr/reference/statements/create/dictionary/layouts/range-hashed#complex_key_range_hashed) | Comme `range_hashed`, pour les clés composites. |
| [cache](/fr/reference/statements/create/dictionary/layouts/cache) | Cache en mémoire de taille fixe. Seules les clés fréquemment consultées sont stockées. |
| [complex\_key\_cache](/fr/reference/statements/create/dictionary/layouts/hashed#complex_key_hashed) | Comme `cache`, pour les clés composites. |
| [ssd\_cache](/fr/reference/statements/create/dictionary/layouts/ssd-cache) | Comme `cache`, mais stocke les données sur SSD avec un index en mémoire. |
| [complex\_key\_ssd\_cache](/fr/reference/statements/create/dictionary/layouts/ssd-cache#complex_key_ssd_cache) | Comme `ssd_cache`, pour les clés composites. |
| [direct](/fr/reference/statements/create/dictionary/layouts/direct) | Aucun stockage en mémoire — interroge directement la source pour chaque requête. |
| [complex\_key\_direct](/fr/reference/statements/create/dictionary/layouts/direct#complex_key_direct) | Comme `direct`, pour les clés composites. |
| [ip\_trie](/fr/reference/statements/create/dictionary/layouts/ip-trie) | Structure en trie pour des recherches rapides de préfixes IP (basées sur CIDR). |
| [hierarchical](/fr/reference/statements/create/dictionary/layouts/hierarchical) | Prise en charge des hiérarchies avec une clé numérique décrivant les relations parent-enfant. |
| [polygon](/fr/reference/statements/create/dictionary/layouts/polygon) | Recherches point-dans-polygone efficaces (géocodage inversé). |
| [regexp\_tree](/fr/reference/statements/create/dictionary/layouts/regexp-tree) | Fait correspondre les clés à un arbre d’expressions régulières. |

<Tip>
  **Layouts recommandés**

  [flat](/fr/reference/statements/create/dictionary/layouts/flat), [hashed](/fr/reference/statements/create/dictionary/layouts/hashed) et [complex\_key\_hashed](/fr/reference/statements/create/dictionary/layouts/hashed#complex_key_hashed) offrent les meilleures performances de requête.
  Les layouts de cache ne sont pas recommandés en raison de performances potentiellement médiocres et de la difficulté à régler les paramètres — voir [cache](/fr/reference/statements/create/dictionary/layouts/cache) pour plus de détails.
</Tip>

<div id="specify-dictionary-layout">
  ## Spécifier le layout du dictionnaire
</div>

<Tip>
  Si vous utilisez un dictionary avec ClickHouse Cloud, utilisez l’option DDL query pour créer vos dictionaries, et créez votre dictionary en tant qu’utilisateur `default`.
  Vérifiez également la liste des dictionary sources prises en charge dans le [guide de compatibilité Cloud](/fr/products/cloud/guides/cloud-compatibility).
</Tip>

Vous pouvez configurer le layout d'un dictionnaire avec la clause `LAYOUT` (pour le DDL) ou le paramètre `layout` dans les définitions du fichier de configuration.

<Tabs>
  <Tab title="DDL">
    ```sql theme={null}
    CREATE DICTIONARY (...)
    ...
    LAYOUT(LAYOUT_TYPE(param value)) -- paramètres de layout
    ...
    ```
  </Tab>

  <Tab title="Fichier de configuration">
    ```xml theme={null}
    <clickhouse>
        <dictionary>
            ...
            <layout>
                <layout_type>
                    <!-- paramètres de layout -->
                </layout_type>
            </layout>
            ...
        </dictionary>
    </clickhouse>
    ```
  </Tab>
</Tabs>

<br />

Voir aussi [CREATE DICTIONARY](/fr/reference/statements/create/dictionary) pour la syntaxe DDL complète.

Les dictionnaires dont le layout ne contient pas `complex-key*` ont une clé de type [UInt64](/fr/reference/data-types/int-uint) ; les dictionnaires `complex-key*` ont une clé composite (complexe, avec des types arbitraires).

**Exemple de clé numérique** (la colonne key\_column est de type [UInt64](/fr/reference/data-types/int-uint)) :

<Tabs>
  <Tab title="DDL">
    ```sql theme={null}
    CREATE DICTIONARY dict_name (
        key_column UInt64,
        ...
    )
    PRIMARY KEY key_column
    ```
  </Tab>

  <Tab title="Fichier de configuration">
    ```xml theme={null}
    <structure>
        <id>
            <name>key_column</name>
        </id>
        ...
    </structure>
    ```
  </Tab>
</Tabs>

<br />

**Exemple de clé composite** (la clé comporte un élément de type [String](/fr/reference/data-types/string)) :

<Tabs>
  <Tab title="DDL">
    ```sql theme={null}
    CREATE DICTIONARY dict_name (
        country_code String,
        ...
    )
    PRIMARY KEY country_code
    ```
  </Tab>

  <Tab title="Fichier de configuration">
    ```xml theme={null}
    <structure>
        <key>
            <attribute>
                <name>country_code</name>
                <type>String</type>
            </attribute>
        </key>
        ...
    </structure>
    ```
  </Tab>
</Tabs>

<div id="improve-performance">
  ## Améliorer les performances des dictionnaires
</div>

Il existe plusieurs façons d'améliorer les performances des dictionnaires :

* Appeler la fonction de manipulation du dictionnaire après `GROUP BY`.
* Marquer comme injectifs les attributs à extraire.
  Un attribut est dit injectif si des clés différentes correspondent à des valeurs d'attribut différentes.
  Ainsi, lorsque `GROUP BY` utilise une fonction qui récupère une valeur d'attribut à partir de la clé, cette fonction est automatiquement retirée de `GROUP BY`.

ClickHouse génère une exception en cas d'erreur liée aux dictionnaires.
Voici quelques exemples d'erreurs :

* Le dictionnaire auquel l'accès est demandé n'a pas pu être chargé.
* Erreur lors d'une requête sur un dictionnaire `cached`.

Vous pouvez afficher la liste des dictionnaires et leur statut dans la table [system.dictionaries](/fr/reference/system-tables/dictionaries).
