> ## 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.

# Separación del almacenamiento y el cómputo

> Esta guía explica cómo usar ClickHouse y S3 para implementar una arquitectura con almacenamiento y cómputo separados.

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">
  ## Descripción general
</div>

Esta guía explica cómo puede usar ClickHouse y S3 para implementar una arquitectura con almacenamiento y cómputo separados.

La separación de almacenamiento y cómputo significa que los recursos de cómputo y de almacenamiento se gestionan de forma independiente. En ClickHouse, esto permite una mayor escalabilidad, una mejor eficiencia de costos y más flexibilidad. Puede escalar por separado los recursos de almacenamiento y de cómputo según sea necesario, optimizando así el rendimiento y los costos.

Usar ClickHouse con S3 como almacenamiento subyacente es especialmente útil en casos de uso donde el rendimiento de las consultas sobre datos "fríos" es menos crítico. ClickHouse permite usar S3 como almacenamiento para el engine `MergeTree` mediante `S3BackedMergeTree`. Este motor de tabla le permite aprovechar la escalabilidad y las ventajas de costo de S3, al tiempo que mantiene el rendimiento de inserción y consulta del engine `MergeTree`.

Tenga en cuenta que implementar y gestionar una arquitectura con separación de almacenamiento y cómputo es más complejo que los despliegues estándar de ClickHouse. Aunque ClickHouse autogestionado permite separar almacenamiento y cómputo, como se explica en esta guía, recomendamos usar [ClickHouse Cloud](https://clickhouse.com/cloud), que le permite utilizar ClickHouse con esta arquitectura sin necesidad de configuración mediante el [motor de tabla `SharedMergeTree`](/docs/es/products/cloud/features/infrastructure/shared-merge-tree).

*Esta guía asume que está usando ClickHouse versión 22.8 o superior.*

<Warning>
  No configure ninguna política de ciclo de vida de AWS/GCS. No se admite y podría provocar tablas corruptas.
</Warning>

<Steps>
  <Step title="Usar S3 como disco de ClickHouse" id="1-use-s3-as-a-clickhouse-disk">
    ### Crear un disco

    Cree un nuevo archivo en el directorio `config.d` de ClickHouse para guardar la configuración de almacenamiento:

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

    Copia el siguiente XML en el archivo recién creado y reemplaza `BUCKET`, `ACCESS_KEY_ID` y `SECRET_ACCESS_KEY` por los datos del bucket de AWS donde quieras almacenar tus datos:

    ```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 necesita especificar aún más la configuración del disco S3, por ejemplo, para indicar una `región` o enviar una `cabecera` HTTP personalizada, puede consultar la lista de opciones de configuración pertinentes [aquí](/docs/es/reference/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-s3).

    También puede reemplazar `access_key_id` y `secret_access_key` por lo siguiente, que intentará obtener credenciales de las variables de entorno y de los metadatos de Amazon EC2:

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

    Después de crear el archivo de configuración, debes cambiar el propietario del archivo al usuario y grupo clickhouse:

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

    Ahora puede reiniciar el servidor de ClickHouse para que los cambios surtan efecto:

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

  <Step title="Crear una tabla con respaldo en S3" id="2-create-a-table-backed-by-s3">
    Para comprobar que hemos configurado correctamente el disco S3, podemos intentar crear una tabla y hacer una consulta sobre ella.

    Cree una tabla especificando la nueva política de almacenamiento de S3:

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

    Tenga en cuenta que no fue necesario especificar el engine como `S3BackedMergeTree`. ClickHouse convierte automáticamente el tipo de engine internamente si detecta que la tabla usa S3 como almacenamiento.

    Compruebe que la tabla se creó con la política correcta:

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

    Debería ver el siguiente resultado:

    ```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
    └──────────────────────────────────────────────────────────────
    ```

    Ahora, vamos a insertar algunas filas en nuestra nueva tabla:

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

    Verifiquemos que se hayan insertado nuestras filas:

    ```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.
    ```

    En la consola de AWS, si sus datos se insertaron correctamente en S3, debería ver que ClickHouse ha creado nuevos archivos en el bucket que especificó.

    Si todo funcionó correctamente, ahora está usando ClickHouse con almacenamiento y cómputo separados.

    <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="Ejemplo de bucket de S3 con separación de almacenamiento y cómputo" border width="1208" height="736" data-path="images/guides/s3_bucket_example.webp" />
  </Step>

  <Step title="Implementación de la replicación para tolerancia a fallos (opcional)" id="3-implementing-replication-for-fault-tolerance-optional">
    <Warning>
      No configure ninguna política de ciclo de vida de AWS/GCS. Esto no es compatible y podría hacer que las tablas dejen de funcionar.
    </Warning>

    Para la tolerancia a fallos, puede usar varios nodos de servidor de ClickHouse distribuidos en varias regiones de AWS, con un bucket de S3 para cada nodo.

    La replicación con discos S3 se puede lograr usando el motor de tabla `ReplicatedMergeTree`. Consulte la siguiente guía para obtener más detalles:

    * [Replicar un solo segmento en dos regiones de AWS usando almacenamiento de objetos de S3](/docs/es/integrations/connectors/data-ingestion/AWS/integrating-s3-with-clickhouse#s3-multi-region).
  </Step>
</Steps>

<div id="further-reading">
  ## Lecturas adicionales
</div>

* [Motor de tabla SharedMergeTree](/docs/es/products/cloud/features/infrastructure/shared-merge-tree)
* [Entrada de blog sobre el anuncio de SharedMergeTree](https://clickhouse.com/blog/clickhouse-cloud-boosts-performance-with-sharedmergetree-and-lightweight-updates)
