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

# Separação entre armazenamento e computação

> Este guia mostra como usar ClickHouse e S3 para implementar uma arquitetura com armazenamento e computação 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">
  ## Visão geral
</div>

Este guia mostra como usar ClickHouse e S3 para implementar uma arquitetura com armazenamento e computação separados.

A separação entre armazenamento e computação significa que os recursos de computação e de armazenamento são gerenciados de forma independente. No ClickHouse, isso proporciona melhor escalabilidade, eficiência de custos e flexibilidade. Você pode escalar os recursos de armazenamento e computação separadamente, conforme necessário, otimizando desempenho e custos.

Usar ClickHouse com S3 como backend é especialmente útil em casos de uso em que o desempenho de consulta sobre dados "frios" é menos crítico. O ClickHouse oferece suporte ao uso do S3 como armazenamento para a engine `MergeTree` por meio da `S3BackedMergeTree`. Esse mecanismo de tabela permite aproveitar a escalabilidade e os benefícios de custo do S3, mantendo o desempenho de inserção e consulta da engine `MergeTree`.

Observe que implementar e gerenciar uma arquitetura com separação entre armazenamento e computação é mais complexo do que em implantações padrão do ClickHouse. Embora o ClickHouse autogerenciado permita a separação entre armazenamento e computação, como discutido neste guia, recomendamos o uso do [ClickHouse Cloud](https://clickhouse.com/cloud), que permite usar o ClickHouse nessa arquitetura sem necessidade de configuração, por meio da [mecanismo de tabela `SharedMergeTree`](/docs/pt-BR/products/cloud/features/infrastructure/shared-merge-tree).

*Este guia pressupõe que você esteja usando o ClickHouse versão 22.8 ou superior.*

<Warning>
  Não configure nenhuma política de ciclo de vida no AWS/GCS. Isso não é suportado e pode resultar em tabelas corrompidas.
</Warning>

<Steps>
  <Step title="Use o S3 como disco do ClickHouse" id="1-use-s3-as-a-clickhouse-disk">
    ### Criando um disco

    Crie um novo arquivo no diretório `config.d` do ClickHouse para armazenar a configuração de storage:

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

    Copie o XML a seguir para o arquivo recém-criado, substituindo `BUCKET`, `ACCESS_KEY_ID`, `SECRET_ACCESS_KEY` pelas informações do bucket da AWS no qual você deseja armazenar seus dados:

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

    Se você precisar detalhar ainda mais as configurações do disco S3, por exemplo, para especificar uma `region` ou enviar um `header` HTTP personalizado, você pode encontrar a lista de configurações relevantes [aqui](/docs/pt-BR/reference/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-s3).

    Você também pode substituir `access_key_id` e `secret_access_key` pelo seguinte, que tentará obter credenciais das variáveis de ambiente e dos metadados do Amazon EC2:

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

    Depois de criar o arquivo de configuração, você precisa alterar o proprietário do arquivo para o usuário e o grupo clickhouse:

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

    Agora, você pode reiniciar o servidor ClickHouse para que as alterações entrem em vigor:

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

  <Step title="Criar uma tabela armazenada no S3" id="2-create-a-table-backed-by-s3">
    Para testar se o disco S3 foi configurado corretamente, podemos tentar criar e consultar uma tabela.

    Crie uma tabela especificando a nova política de armazenamento S3:

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

    Observe que não foi necessário especificar o engine como `S3BackedMergeTree`. O ClickHouse converte automaticamente o tipo de engine internamente se detectar que a tabela está usando S3 para armazenamento.

    Mostre que a tabela foi criada com a política correta:

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

    O resultado deverá ser o seguinte:

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

    Agora, vamos inserir algumas linhas na nossa nova tabela:

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

    Vamos verificar se as linhas foram inseridas:

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

    No console da AWS, se seus dados foram inseridos com sucesso no S3, você deverá ver que o ClickHouse criou novos arquivos no bucket especificado.

    Se tudo funcionou como esperado, agora você está usando o ClickHouse com storage e compute 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="Exemplo de bucket do S3 usando separação de compute e storage" border width="1208" height="736" data-path="images/guides/s3_bucket_example.webp" />
  </Step>

  <Step title="Implementação de replicação para tolerância a falhas (opcional)" id="3-implementing-replication-for-fault-tolerance-optional">
    <Warning>
      Não configure nenhuma política de ciclo de vida da AWS/GCS. Isso não é compatível e pode resultar em tabelas corrompidas.
    </Warning>

    Para tolerância a falhas, você pode usar vários nós do servidor ClickHouse distribuídos por várias regiões da AWS, com um bucket do S3 para cada nó.

    A replicação com disks S3 pode ser realizada usando o table engine `ReplicatedMergeTree`. Consulte o guia a seguir para obter detalhes:

    * [Replicando um único shard em duas regiões da AWS usando armazenamento de objetos do S3](/docs/pt-BR/integrations/connectors/data-ingestion/AWS/integrating-s3-with-clickhouse#s3-multi-region).
  </Step>
</Steps>

<div id="further-reading">
  ## Leitura adicional
</div>

* [Mecanismo de tabela SharedMergeTree](/docs/pt-BR/products/cloud/features/infrastructure/shared-merge-tree)
* [Post de anúncio do SharedMergeTree no blog](https://clickhouse.com/blog/clickhouse-cloud-boosts-performance-with-sharedmergetree-and-lightweight-updates)
