O AnalyticDB for PostgreSQL oferece três modelos de armazenamento: orientado a linhas, orientado a colunas e híbrido linha-coluna. Escolha o modelo adequado ao criar uma tabela.
Escolha um modelo de armazenamento
O modelo escolhido afeta o throughput de escrita, o desempenho das consultas e a taxa de compressão. Use os critérios abaixo para decidir.
|
Critério |
Orientado a linhas |
Orientado a colunas |
Híbrido linha-coluna |
|
Padrão de escrita |
Atualizações frequentes, INSERT em tempo real |
Carregamento em lote (COPY, INSERT INTO SELECT) |
Misto: combina escritas em tempo real e carregamentos em lote |
|
Padrão de consulta |
Consultas pontuais, acesso a linhas completas |
Agregações em poucas colunas, por exemplo, |
Ambos |
|
Compressão |
Padrão |
3 a 5 vezes superior à orientada a linhas |
Automática, conforme o método de escrita |
|
Requisito de versão |
Todas as versões |
Todas as versões |
Apenas V7.0 |
|
Compatibilidade com Data Transmission Service (DTS) |
Obrigatória (tabelas de destino devem ser orientadas a linhas) |
Não compatível |
Não compatível |
O armazenamento híbrido linha-coluna está disponível apenas no AnalyticDB for PostgreSQL V7.0.
Especifique o modelo de armazenamento
Use a cláusula WITH no comando CREATE TABLE para definir o modelo de armazenamento e configurar a compressão. Há suporte aos seguintes parâmetros.
|
Parâmetro |
Descrição |
Padrão |
Valores válidos |
|
|
Modelo de armazenamento. Não é possível definir o armazenamento híbrido linha-coluna aqui; use |
|
|
|
|
Ativa o armazenamento otimizado para anexação. Obrigatório para tabelas orientadas a colunas. |
|
|
|
|
Algoritmo de compressão. |
V4.3 e V6.0: |
Consulte Compressão de dados |
|
|
Nível de compressão. Valores mais altos proporcionam melhor compressão, mas reduzem a velocidade. |
|
|
Tabelas orientadas a linhas
Por padrão, o AnalyticDB for PostgreSQL cria tabelas orientadas a linhas usando o modelo de armazenamento heap do PostgreSQL. Esse tipo de tabela é otimizado para:
Escritas em tempo real via INSERT
Operações frequentes de UPDATE e DELETE
Consultas pontuais com índice B-tree
Tabela heap (padrão)
CREATE TABLE foo (a int, b text) DISTRIBUTED BY (a);
Tabela orientada a linhas otimizada para anexação (AORO)
CREATE TABLE bar (a int, b text)
WITH (appendonly=true, orientation=row)
DISTRIBUTED BY (a);
Ao usar o Data Transmission Service (DTS) para gravar dados no AnalyticDB for PostgreSQL, as tabelas de destino devem ser orientadas a linhas. O DTS oferece sincronização quase em tempo real para operações de INSERT, UPDATE e DELETE.
Tabelas orientadas a colunas
As tabelas orientadas a colunas armazenam dados por coluna e leem apenas aquelas referenciadas na consulta. Essa característica as torna ideais para cargas de trabalho de data warehouse, especialmente consultas que agregam poucas colunas, como:
SELECT SUM(revenue), AVG(cost) FROM orders WHERE region = 'us';
Essas tabelas oferecem uma taxa de compressão de 3 a 5 vezes superior à das tabelas orientadas a linhas. No entanto, são menos eficientes para inserções ou atualizações frequentes no nível da linha. Para obter o melhor desempenho, prefira métodos de carregamento em lote, como COPY.
Tabelas orientadas a colunas exigem otimização para anexação. Defina appendonly=true durante a criação.
CREATE TABLE bar (a int, b text)
WITH (appendonly=true, orientation=column)
DISTRIBUTED BY (a);
Tabelas com armazenamento híbrido linha-coluna
Há suporte ao armazenamento híbrido linha-coluna apenas em instâncias do AnalyticDB for PostgreSQL V7.0.
O modelo de armazenamento híbrido linha-coluna usa o mecanismo de armazenamento Beam, que combina duas camadas internas:
Armazenamento delta (orientado a linhas): gerencia escritas em streaming e em tempo real via
INSERT INTO ... VALUES. Oferece desempenho de escrita comparável ao de tabelas orientadas a linhas.Armazenamento base (baseado em PAX, orientado a colunas): processa escritas em lote por meio de
COPYouINSERT INTO ... SELECT. Proporciona maior throughput para grandes volumes de dados.
O Beam direciona automaticamente os dados recebidos para a camada apropriada, conforme o método de escrita.
Tabelas não particionadas
Crie uma tabela com o mecanismo de armazenamento beam
CREATE TABLE testtable (a int) USING beam;
Altere uma tabela existente para usar o mecanismo de armazenamento beam
ALTER TABLE testtable SET ACCESS METHOD beam;
Tabelas particionadas
Os exemplos a seguir usam uma tabela particionada base criada com armazenamento heap:
CREATE TABLE am_partitioned(x INT, y INT)
PARTITION BY HASH (x) USING heap;
Especifique o modelo de armazenamento ao criar uma partição
Crie uma partição com armazenamento orientado a colunas otimizado para anexação (AOCO):
CREATE TABLE am_partitioned_1 PARTITION OF am_partitioned
FOR VALUES WITH (MODULUS 3, REMAINDER 0) USING ao_column;
Crie uma partição com armazenamento híbrido linha-coluna (beam):
CREATE TABLE amm_partitioned_2 PARTITION OF amm_partitioned
FOR VALUES WITH (MODULUS 3, REMAINDER 1) USING beam;
Altere o modelo de armazenamento de uma partição existente
ALTER TABLE am_partitioned_1 SET ACCESS METHOD ao_row;
Compressão de dados
A compressão está disponível para tabelas orientadas a colunas e tabelas orientadas a linhas otimizadas para anexação (AORO) (appendonly=true). Há suporte a dois níveis de compressão:
Compressão no nível da tabela: aplica um único algoritmo a toda a tabela
Compressão no nível da coluna: aplica um algoritmo específico a cada coluna
Algoritmos compatíveis por versão
|
Algoritmo |
V4.3 |
V6.0 |
V7.0 |
Observações |
|
|
Não |
Sim |
Sim |
|
|
|
Sim |
Sim |
Não |
|
|
|
Não |
Sim |
Sim |
|
|
|
Sim |
Sim |
Não |
Apenas tabelas orientadas a colunas |
|
|
Sim |
Sim |
Sim |
Sem compressão |
|
|
Sim |
Sim |
Sim |
Padrão na V7.0; seleciona o algoritmo com base nos atributos dos dados |
Se você especificar o algoritmo QuickLZ, ele será substituído automaticamente pelo zlib. O algoritmo rle_type aplica-se exclusivamente a tabelas orientadas a colunas.
Exemplos
Crie uma tabela orientada a colunas com as configurações padrão de compressão:
CREATE TABLE am_testtable(x INT, y INT)
WITH (orientation=column);
Crie uma tabela orientada a colunas com compressão zlib no nível 5:
CREATE TABLE foo (a int, b text)
WITH (appendonly=true, orientation=column, compresstype=zlib, compresslevel=5);
Crie uma tabela orientada a colunas com compressão zstd no nível 9:
CREATE TABLE foo (a int, b text)
WITH (appendonly=true, orientation=column, compresstype=zstd, compresslevel=9);