AnalyticDB for PostgreSQL admite tres modelos de almacenamiento: orientado a filas, orientado a columnas e híbrido fila-columna. Elija el modelo adecuado cuando cree una tabla.
Elegir un modelo de almacenamiento
El modelo que elija afecta el rendimiento de escritura, el rendimiento de las consultas y la tasa de compresión. Utilice los siguientes criterios para decidir.
|
Criteria |
Row-oriented |
Column-oriented |
Hybrid row-column |
|
Patrón de escritura |
Actualizaciones frecuentes, INSERT en tiempo real |
Carga por lotes (COPY, INSERT INTO SELECT) |
Mixto: escrituras en tiempo real y cargas por lotes |
|
Patrón de consulta |
Consultas puntuales, acceso a filas completas |
Agregaciones en pocas columnas, por ejemplo, |
Ambos |
|
Compresión |
Estándar |
De 3 a 5 veces mayor que el orientado a filas |
Automática según el método de escritura |
|
Requisito de versión |
Todas las versiones |
Todas las versiones |
Solo V7.0 |
|
Compatibilidad con Data Transmission Service (DTS) |
Obligatorio (las tablas de destino deben estar orientadas a filas) |
No compatible |
No compatible |
El almacenamiento híbrido fila-columna solo está disponible en AnalyticDB for PostgreSQL V7.0.
Especificar el modelo de almacenamiento
Utilice la cláusula WITH en CREATE TABLE para establecer el modelo de almacenamiento y configurar la compresión. Se admiten los siguientes parámetros.
|
Parameter |
Description |
Default |
Valid values |
|
|
Modelo de almacenamiento. El almacenamiento híbrido fila-columna no se puede configurar aquí; use |
|
|
|
|
Habilita el almacenamiento optimizado para anexiones. Obligatorio para tablas orientadas a columnas. |
|
|
|
|
Algoritmo de compresión. |
V4.3 y V6.0: |
Consulte Data compression |
|
|
Nivel de compresión. Los valores más altos logran una mejor compresión a menor velocidad. |
|
|
Tablas orientadas a filas
De forma predeterminada, AnalyticDB for PostgreSQL crea tablas orientadas a filas mediante el modelo de almacenamiento heap de PostgreSQL. Las tablas orientadas a filas están optimizadas para:
Escrituras en tiempo real mediante INSERT
Operaciones UPDATE y DELETE frecuentes
Consultas puntuales con un índice B-tree
Tabla heap (predeterminada)
CREATE TABLE foo (a int, b text) DISTRIBUTED BY (a);
Tabla orientada a filas optimizada para anexiones (AORO)
CREATE TABLE bar (a int, b text)
WITH (appendonly=true, orientation=row)
DISTRIBUTED BY (a);
Al utilizar Data Transmission Service (DTS) para escribir datos en AnalyticDB for PostgreSQL, las tablas de destino deben estar orientadas a filas. DTS admite sincronización casi en tiempo real para operaciones INSERT, UPDATE y DELETE.
Tablas orientadas a columnas
Las tablas orientadas a columnas almacenan datos por columna y leen únicamente las columnas a las que se hace referencia en una consulta. Esto las hace ideales para cargas de trabajo de almacén de datos, especialmente para consultas que agregan un número reducido de columnas, como:
SELECT SUM(revenue), AVG(cost) FROM orders WHERE region = 'us';
Las tablas orientadas a columnas ofrecen una tasa de compresión de 3 a 5 veces superior a la de las tablas orientadas a filas. Son menos eficientes para inserciones o actualizaciones frecuentes a nivel de fila; utilice métodos de carga por lotes como COPY para obtener el mejor rendimiento.
Las tablas orientadas a columnas deben estar optimizadas para anexiones. Establezca appendonly=true al crear una.
CREATE TABLE bar (a int, b text)
WITH (appendonly=true, orientation=column)
DISTRIBUTED BY (a);
Tablas con almacenamiento híbrido fila-columna
El almacenamiento híbrido fila-columna solo es compatible con instancias de AnalyticDB for PostgreSQL V7.0.
El modelo de almacenamiento híbrido fila-columna utiliza el motor de almacenamiento Beam, que combina dos capas de almacenamiento internas:
Almacenamiento delta (orientado a filas): gestiona escrituras de streaming en tiempo real mediante
INSERT INTO ... VALUES. Ofrece un rendimiento de escritura comparable al de las tablas orientadas a filas.Almacenamiento base (basado en PAX, orientado a columnas): gestiona escrituras por lotes mediante
COPYoINSERT INTO ... SELECT. Proporciona un mayor rendimiento para datos masivos.
Beam enruta automáticamente los datos entrantes a la capa adecuada según el método de escritura.
Tablas sin particionar
Crear una tabla con el motor de almacenamiento beam
CREATE TABLE testtable (a int) USING beam;
Cambiar una tabla existente para usar el motor de almacenamiento beam
ALTER TABLE testtable SET ACCESS METHOD beam;
Tablas particionadas
Los siguientes ejemplos utilizan una tabla base particionada creada con almacenamiento heap:
CREATE TABLE am_partitioned(x INT, y INT)
PARTITION BY HASH (x) USING heap;
Especificar el modelo de almacenamiento al crear una partición
Cree una partición con almacenamiento orientado a columnas optimizado para anexiones (AOCO):
CREATE TABLE am_partitioned_1 PARTITION OF am_partitioned
FOR VALUES WITH (MODULUS 3, REMAINDER 0) USING ao_column;
Cree una partición con almacenamiento híbrido fila-columna (beam):
CREATE TABLE amm_partitioned_2 PARTITION OF amm_partitioned
FOR VALUES WITH (MODULUS 3, REMAINDER 1) USING beam;
Cambiar el modelo de almacenamiento de una partición existente
ALTER TABLE am_partitioned_1 SET ACCESS METHOD ao_row;
Compresión de datos
La compresión está disponible para tablas orientadas a columnas y tablas orientadas a filas optimizadas para anexiones (AORO) (appendonly=true). Se admiten dos niveles de compresión:
Compresión a nivel de tabla: aplica un único algoritmo a toda la tabla
Compresión a nivel de columna: aplica un algoritmo de compresión único a cada columna
Algoritmos compatibles por versión
|
Algorithm |
V4.3 |
V6.0 |
V7.0 |
Notes |
|
|
No |
Sí |
Sí |
|
|
|
Sí |
Sí |
No |
|
|
|
No |
Sí |
Sí |
|
|
|
Sí |
Sí |
No |
Solo tablas orientadas a columnas |
|
|
Sí |
Sí |
Sí |
Sin compresión |
|
|
Sí |
Sí |
Sí |
Predeterminado para V7.0; selecciona el algoritmo según los atributos de los datos |
Si especifica el algoritmo QuickLZ, se reemplaza automáticamente por zlib. El algoritmo rle_type solo se aplica a tablas orientadas a columnas.
Ejemplos
Cree una tabla orientada a columnas con la configuración de compresión predeterminada:
CREATE TABLE am_testtable(x INT, y INT)
WITH (orientation=column);
Cree una tabla orientada a columnas con compresión zlib en el nivel 5:
CREATE TABLE foo (a int, b text)
WITH (appendonly=true, orientation=column, compresstype=zlib, compresslevel=5);
Cree una tabla orientada a columnas con compresión zstd en el nivel 9:
CREATE TABLE foo (a int, b text)
WITH (appendonly=true, orientation=column, compresstype=zstd, compresslevel=9);