O motor Atomic oferece suporte a consultas DROP TABLE e RENAME TABLE sem bloqueio e a consultas atômicas EXCHANGE TABLES. O motor de banco de dados Atomic é usado por padrão no ClickHouse de código aberto.
Criando um banco de dados
CREATE DATABASE test [ENGINE = Atomic] [SETTINGS disk=...];Detalhes e recomendações
UUID da tabela
Cada tabela no banco de dados Atomic tem um UUID persistente e armazena seus dados no seguinte diretório:
/clickhouse_path/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/Em que xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy é o UUID da tabela.
Por padrão, o UUID é gerado automaticamente. No entanto, os usuários podem especificá-lo ao criar uma tabela, embora isso não seja recomendado.
Por exemplo:
CREATE TABLE name UUID '28f1c61c-2970-457a-bffe-454156ddcfef' (n UInt64) ENGINE = ...;RENAME TABLE
As consultas RENAME não modificam o UUID nem movem os dados da tabela. Essas consultas são executadas imediatamente e não esperam a conclusão de outras consultas que estejam usando a tabela.
DROP/DETACH TABLE
Ao usar DROP TABLE, nenhum dado é excluído. O motor Atomic apenas marca a tabela como removida, movendo seus metadados para /clickhouse_path/metadata_dropped/ e notificando a thread em segundo plano. O atraso antes da exclusão definitiva dos dados da tabela é especificado pela configuração database_atomic_delay_before_drop_table_sec.
Você pode especificar o modo síncrono usando o modificador SYNC. Para isso, use a configuração database_atomic_wait_for_drop_and_detach_synchronously. Nesse caso, DROP espera que SELECT, INSERT e outras consultas em execução que estejam usando a tabela terminem. A tabela será removida quando não estiver mais em uso.
EXCHANGE TABLES/DICTIONARIES
A consulta EXCHANGE troca tabelas ou dicionários atomicamente. Por exemplo, em vez desta operação não atômica:
RENAME TABLE new_table TO tmp, old_table TO new_table, tmp TO old_table;você pode usar um banco de dados Atomic:
EXCHANGE TABLES new_table AND old_table;ReplicatedMergeTree em banco de dados Atomic
Para tabelas ReplicatedMergeTree, recomenda-se não especificar os parâmetros do motor para o caminho no ZooKeeper nem o nome da réplica. Nesse caso, serão usados os parâmetros de configuração default_replica_path e default_replica_name. Se quiser especificar explicitamente os parâmetros do motor, recomenda-se usar as macros {uuid}. Isso garante que caminhos exclusivos sejam gerados automaticamente para cada tabela no ZooKeeper.
Disco de metadados
Quando disk é especificado em SETTINGS, o disco é usado para armazenar os arquivos de metadados da tabela.
Por exemplo:
CREATE TABLE db (n UInt64) ENGINE = Atomic SETTINGS disk=disk(type='local', path='/var/lib/clickhouse-disks/db_disk');Se não for especificado, o disco definido em database_disk.disk será usado por padrão.
Veja também
- system.databases tabela do sistema