O PolarDB for MySQL oferece suporte a dois algoritmos de compactação para In-Memory Columnar Indexes (IMCIs): LZ4 e ZSTD. Definir o algoritmo adequado permite equilibrar o desempenho das consultas e o custo de armazenamento de cada tabela ou coluna.
Algoritmos compatíveis
|
Algoritmo |
Velocidade de compactação |
|
LZ4 |
Superior a 500 MB/s por núcleo. Consulte LZ4 GitHub. |
|
ZSTD (Zstandard) |
Semelhante ao LZ4. Consulte Zstandard GitHub. |
O ZSTD é o algoritmo padrão (imci_default_codec = ZSTD).
Defina a compactação ao criar uma tabela
Especifique o parâmetro codec_opt no campo COMMENT da instrução CREATE TABLE.
Sintaxe:
COMMENT 'COLUMNAR=1 codec_opt={LZ4}'
Valores válidos: LZ4, ZSTD e NONE (sem compactação).
Regras de precedência:
|
Configuração |
Escopo |
Precedência |
|
Parâmetro |
Sessão |
Mais baixa |
|
|
Tabela |
Intermediária |
|
|
Coluna |
Mais alta |
Um valor de codec_opt no nível da coluna substitui tanto o valor no nível da tabela quanto o parâmetro imci_default_codec. Para alterar o algoritmo padrão no nível da sessão, execute:
SET imci_default_codec="{LZ4}";
Exemplo:
-- Table-level: all columns use LZ4
CREATE TABLE t12(
col1 INT,
col2 DATETIME,
col3 VARCHAR(200)
) ENGINE InnoDB COMMENT 'COLUMNAR=1 codec_opt={LZ4}';
-- Mixed: column-level overrides session default
SET imci_default_codec="{LZ4}";
CREATE TABLE t13(
col1 INT COMMENT 'codec_opt={NONE}', -- No compression
col2 DATETIME, -- Inherits imci_default_codec (LZ4)
col3 VARCHAR(200) COMMENT 'codec_opt={ZSTD}' -- Column-level overrides default
) ENGINE InnoDB COMMENT 'COLUMNAR=1';
Neste exemplo:
t12: As três colunas usam LZ4 porque essa configuração foi definida no nível da tabela.t13: Acol1não tem compactação (NONE). Acol2herda o padrão do nível da sessão (LZ4 definido porSET imci_default_codec). Acol3usa ZSTD porque o valor no nível da coluna tem precedência.
Atualize o algoritmo de compactação de uma coluna
A instrução ALTER TABLE não reconstrói os dados do IMCI. Portanto, um novo valor de codec_opt definido via ALTER TABLE não entra em vigor imediatamente.
-- Original table: col1 and col2 use ZSTD
CREATE TABLE t14(
col1 INT COMMENT 'COLUMNAR=1 codec_opt={ZSTD}',
col2 DATETIME COMMENT 'COLUMNAR=1 codec_opt={ZSTD}',
col3 VARCHAR(200)
) ENGINE InnoDB;
-- Attempt to switch col2 to LZ4
ALTER TABLE t14 COMMENT 'COLUMNAR=1', MODIFY COLUMN col2 DATETIME COMMENT 'codec_opt={LZ4}';
Após a execução dessa instrução ALTER TABLE:
|
Estado |
Dados existentes |
Dados recém-inseridos |
|
Antes da reconstrução dos dados |
Usa o algoritmo original (ZSTD) |
Usa o algoritmo original (ZSTD) |
|
Após a reconstrução dos dados |
Usa o novo algoritmo (LZ4) |
Usa o novo algoritmo (LZ4) |
Para aplicar o novo algoritmo imediatamente, exclua os dados originais da coluna e recrie a tabela com o valor atualizado de codec_opt.
Uma versão futura oferecerá suporte à modificação direta da compactação do IMCI sem necessidade de reconstrução dos dados.