PolarDB for MySQL es compatible con dos algoritmos de compresión para In-Memory Columnar Indexes (IMCIs): LZ4 y ZSTD. El algoritmo adecuado le permite equilibrar el rendimiento de las consultas y el costo de almacenamiento por tabla o columna.
Algoritmos compatibles
|
Algoritmo |
Velocidad de compresión |
|
LZ4 |
Superior a 500 MB/s por núcleo. Consulte LZ4 GitHub. |
|
ZSTD (Zstandard) |
Similar a LZ4. Consulte Zstandard GitHub. |
ZSTD es el algoritmo predeterminado (imci_default_codec = ZSTD).
Establezca la compresión cuando cree una tabla
Especifique el parámetro codec_opt en el campo COMMENT de una instrucción CREATE TABLE.
Sintaxis:
COMMENT 'COLUMNAR=1 codec_opt={LZ4}'
Valores válidos: LZ4, ZSTD y NONE (sin compresión).
Reglas de precedencia:
|
Configuración |
Ámbito |
Precedencia |
|
Parámetro |
Sesión |
Más baja |
|
|
Tabla |
Media |
|
|
Columna |
Más alta |
Un valor de codec_opt en el nivel de columna anula tanto el valor del nivel de tabla como imci_default_codec. Para cambiar el algoritmo predeterminado en el nivel de sesión, ejecute:
SET imci_default_codec="{LZ4}";
Ejemplo:
-- 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';
En este ejemplo:
t12: las tres columnas usan LZ4 porque se establece en el nivel de tabla.t13:col1no tiene compresión (NONE).col2hereda el valor predeterminado del nivel de sesión (LZ4 deSET imci_default_codec).col3usa ZSTD porque el valor del nivel de columna tiene precedencia.
Actualice el algoritmo de compresión de una columna
ALTER TABLE no reconstruye los datos de IMCI, por lo que un nuevo valor de codec_opt establecido mediante ALTER TABLE no surte efecto de inmediato.
-- 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}';
Después de esta instrucción ALTER TABLE:
|
Estado |
Datos existentes |
Datos recién insertados |
|
Antes de una reconstrucción de datos |
Usa el algoritmo original (ZSTD) |
Usa el algoritmo original (ZSTD) |
|
Después de una reconstrucción de datos |
Usa el nuevo algoritmo (LZ4) |
Usa el nuevo algoritmo (LZ4) |
Para aplicar el nuevo algoritmo de inmediato, elimine los datos originales de la columna y cree nuevamente la tabla con el valor actualizado de codec_opt.
La modificación directa de la compresión de IMCI sin una reconstrucción de datos será compatible en una versión futura.