> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Séparation du stockage et du calcul

> Ce guide explique comment utiliser ClickHouse et S3 pour mettre en place une architecture dissociant le stockage et le calcul.

export const Image = ({img, alt, size = "lg"}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} />
      </Frame>
    </div>;
};

<div id="overview">
  ## Vue d’ensemble
</div>

Ce guide explique comment utiliser ClickHouse et S3 pour mettre en place une architecture dissociant stockage et calcul.

La séparation du stockage et du calcul signifie que les ressources de calcul et de stockage sont gérées indépendamment. Dans ClickHouse, cela permet d’améliorer l’évolutivité, de mieux maîtriser les coûts et de gagner en flexibilité. Vous pouvez dimensionner séparément les ressources de stockage et de calcul selon les besoins, afin d’optimiser les performances et les coûts.

L’utilisation de ClickHouse adossé à S3 est particulièrement utile dans les cas d’usage où les performances des requêtes sur des données « froides » sont moins critiques. ClickHouse prend en charge l’utilisation de S3 comme stockage pour le moteur `MergeTree` via `S3BackedMergeTree`. Ce moteur de table vous permet de tirer parti de l’évolutivité et des avantages économiques de S3 tout en conservant les performances d’insertion et de requête du moteur `MergeTree`.

Veuillez noter que la mise en place et la gestion d’une architecture dissociant stockage et calcul sont plus complexes que celles de déploiements ClickHouse standard. Bien que ClickHouse autogéré permette de séparer le stockage et le calcul comme décrit dans ce guide, nous recommandons d’utiliser [ClickHouse Cloud](https://clickhouse.com/cloud), qui vous permet d’exploiter cette architecture avec ClickHouse sans configuration grâce au [moteur de table `SharedMergeTree`](/docs/fr/products/cloud/features/infrastructure/shared-merge-tree).

*Ce guide suppose que vous utilisez ClickHouse version 22.8 ou ultérieure.*

<Warning>
  Ne configurez aucune politique de cycle de vie AWS/GCS. Ce n’est pas pris en charge et cela pourrait entraîner une corruption des tables.
</Warning>

<Steps>
  <Step title="Utiliser S3 comme disque pour ClickHouse" id="1-use-s3-as-a-clickhouse-disk">
    ### Créer un disque

    Créez un nouveau fichier dans le répertoire `config.d` de ClickHouse pour y stocker la configuration du stockage :

    ```bash theme={null}
    vim /etc/clickhouse-server/config.d/storage_config.xml
    ```

    Copiez le XML suivant dans le fichier nouvellement créé, en remplaçant `BUCKET`, `ACCESS_KEY_ID` et `SECRET_ACCESS_KEY` par les informations du bucket AWS dans lequel vous souhaitez stocker vos données :

    ```xml theme={null}
    <clickhouse>
      <storage_configuration>
        <disks>
          <s3_disk>
            <type>s3</type>
            <endpoint>$BUCKET</endpoint>
            <access_key_id>$ACCESS_KEY_ID</access_key_id>
            <secret_access_key>$SECRET_ACCESS_KEY</secret_access_key>
            <metadata_path>/var/lib/clickhouse/disks/s3_disk/</metadata_path>
          </s3_disk>
          <s3_cache>
            <type>cache</type>
            <disk>s3_disk</disk>
            <path>/var/lib/clickhouse/disks/s3_cache/</path>
            <max_size>10Gi</max_size>
          </s3_cache>
        </disks>
        <policies>
          <s3_main>
            <volumes>
              <main>
                <disk>s3_disk</disk>
              </main>
            </volumes>
          </s3_main>
        </policies>
      </storage_configuration>
    </clickhouse>
    ```

    Si vous devez définir plus précisément les paramètres du disque S3, par exemple pour spécifier une `region` ou envoyer un `header` HTTP personnalisé, vous trouverez la liste des paramètres correspondants [ici](/docs/fr/reference/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-s3).

    Vous pouvez également remplacer `access_key_id` et `secret_access_key` par ce qui suit, afin de tenter d’obtenir les identifiants à partir des variables d’environnement et des métadonnées Amazon EC2 :

    ```bash theme={null}
    <use_environment_credentials>true</use_environment_credentials>
    ```

    Après avoir créé votre fichier de configuration, vous devez attribuer le fichier à l’utilisateur et au groupe clickhouse :

    ```bash theme={null}
    chown clickhouse:clickhouse /etc/clickhouse-server/config.d/storage_config.xml
    ```

    Vous pouvez maintenant redémarrer le serveur ClickHouse pour que les modifications soient prises en compte :

    ```bash theme={null}
    service clickhouse-server restart
    ```
  </Step>

  <Step title="Créer une table basée sur S3" id="2-create-a-table-backed-by-s3">
    Pour vérifier que le disque S3 est correctement configuré, nous pouvons essayer de créer une table et de l’interroger.

    Créez une table en spécifiant la nouvelle politique de stockage S3 :

    ```sql theme={null}
    CREATE TABLE my_s3_table
      (
        `id` UInt64,
        `column1` String
      )
    ENGINE = MergeTree
    ORDER BY id
    SETTINGS storage_policy = 's3_main';
    ```

    Notez que nous n’avons pas eu besoin d’indiquer le moteur comme étant `S3BackedMergeTree`. ClickHouse convertit automatiquement le type de moteur en interne s’il détecte que la table utilise S3 pour le stockage.

    Vérifiez que la table a été créée avec la bonne policy :

    ```sql theme={null}
    SHOW CREATE TABLE my_s3_table;
    ```

    Vous devriez voir le résultat suivant :

    ```response theme={null}
    ┌─statement────────────────────────────────────────────────────
    │ CREATE TABLE default.my_s3_table
    (
      `id` UInt64,
      `column1` String
    )
    ENGINE = MergeTree
    ORDER BY id
    SETTINGS storage_policy = 's3_main', index_granularity = 8192
    └──────────────────────────────────────────────────────────────
    ```

    Insérons maintenant quelques lignes dans notre nouvelle table :

    ```sql theme={null}
    INSERT INTO my_s3_table (id, column1)
      VALUES (1, 'abc'), (2, 'xyz');
    ```

    Vérifions que nos lignes ont bien été insérées :

    ```sql theme={null}
    SELECT * FROM my_s3_table;
    ```

    ```response theme={null}
    ┌─id─┬─column1─┐
    │  1 │ abc     │
    │  2 │ xyz     │
    └────┴─────────┘

    2 rows in set. Elapsed: 0.284 sec.
    ```

    Dans la console AWS, si vos données ont bien été insérées dans S3, vous devriez voir que ClickHouse a créé de nouveaux fichiers dans le bucket que vous avez spécifié.

    Si tout a fonctionné correctement, vous utilisez maintenant ClickHouse avec un stockage et un calcul séparés !

    <Image img="https://mintcdn.com/private-7c7dfe99/k4wNHsd_gyvah7Fr/images/guides/s3_bucket_example.webp?fit=max&auto=format&n=k4wNHsd_gyvah7Fr&q=85&s=5125bc42e40bfb41790536f985463ff6" size="md" alt="Exemple de bucket S3 avec séparation du calcul et du stockage" border width="1208" height="736" data-path="images/guides/s3_bucket_example.webp" />
  </Step>

  <Step title="Mise en place de la réplication pour la tolérance aux pannes (facultatif)" id="3-implementing-replication-for-fault-tolerance-optional">
    <Warning>
      Ne configurez aucune politique de cycle de vie AWS/GCS. Cela n’est pas pris en charge et pourrait entraîner des tables corrompues.
    </Warning>

    Pour la tolérance aux pannes, vous pouvez utiliser plusieurs nœuds de serveur ClickHouse répartis sur plusieurs régions AWS, avec un bucket S3 pour chaque nœud.

    La réplication avec des disques S3 peut être réalisée à l’aide du moteur de table `ReplicatedMergeTree`. Consultez le guide suivant pour plus de détails :

    * [Réplication d’un seul shard sur deux régions AWS à l’aide du stockage d’objets S3](/docs/fr/integrations/connectors/data-ingestion/AWS/integrating-s3-with-clickhouse#s3-multi-region).
  </Step>
</Steps>

<div id="further-reading">
  ## Pour aller plus loin
</div>

* [Moteur de table SharedMergeTree](/docs/fr/products/cloud/features/infrastructure/shared-merge-tree)
* [Billet de blog annonçant SharedMergeTree](https://clickhouse.com/blog/clickhouse-cloud-boosts-performance-with-sharedmergetree-and-lightweight-updates)
