Migrar do PostgreSQL para o Aurora DSQL - Amazon Aurora DSQL

Migrar do PostgreSQL para o Aurora DSQL

O Aurora DSQL foi projetado para ser compatível com o PostgreSQL. Ele deve comportar recursos relacionais principais, como transações ACID, índices secundários, junções e operações DML padrão. A maioria das aplicações PostgreSQL existentes pode migrar para o Aurora DSQL com o mínimo de alterações.

Esta seção fornece orientação prática para migrar sua aplicação para o Aurora DSQL, incluindo compatibilidade de frameworks, padrões de migração e considerações arquitetônicas.

Compatibilidade com frameworks e ORM

O Aurora DSQL utiliza o protocolo de comunicação padrão do PostgreSQL, garantindo a compatibilidade com drivers PostgreSQL e frameworks. Os ORMs mais conhecidos funcionam com o Aurora DSQL com o mínimo ou nenhuma alteração. Consulte Adaptadores e dialetos do Aurora DSQL para acessar implementações de referência e integrações de ORM disponíveis.

Padrões comuns de migração

Ao migrar do PostgreSQL para o Aurora DSQL, alguns recursos funcionam de forma diferente ou têm sintaxe alternativa. Esta seção fornece orientação sobre cenários comuns de migração.

Alternativas de operações DDL

O Aurora DSQL fornece alternativas modernas às operações DDL tradicionais do PostgreSQL:

Compilação de índice

Use CREATE INDEX ASYNC em vez de CREATE INDEX para criação de índices sem bloqueio.

Benefício: criação de índice de tempo de inatividade zero em tabelas grandes.

Remoção de dados

Use DELETE FROM table_name em vez de TRUNCATE.

Alternativa: para a recriação completa da tabela, use DROP TABLE seguido de CREATE TABLE.

Configuração do sistema

Como o Aurora DSQL é totalmente gerenciado, a configuração é feita automaticamente com base nos padrões de workload. Use a API ou o Console de Gerenciamento da AWS para gerenciar configurações de cluster.

Benefício: não há necessidade de ajuste do banco de dados nem gerenciamento de parâmetros.

Padrões de projeto do esquema

Adapte estes padrões comuns do PostgreSQL para compatibilidade com o Aurora DSQL:

Padrões de integração referenciais

O Aurora DSQL comporta relações e operações JOIN de tabelas. Para obter integridade referencial, implemente a validação na camada da aplicação. Esse design se alinha aos padrões dos bancos de dados distribuídos modernos, nos quais a validação da camada da aplicação oferece maior flexibilidade e evita gargalos de desempenho das operações em cascata.

Padrão: implemente verificações de integridade referencial em sua camada de aplicação usando convenções de nomenclatura consistentes, lógica de validação e limites de transação. Muitas aplicações de alta escala preferem essa abordagem para melhor controle sobre o tratamento de erros e a performance.

Tratamento de dados temporários

Use CTEs, subconsultas ou tabelas regulares com lógica de limpeza em vez de tabelas temporárias.

Alternativa: crie tabelas com nomes específicos da sessão e limpe-as em sua aplicação.

Noções básicas sobre as diferenças de arquitetura

A arquitetura distribuída e sem servidor do Aurora DSQL difere intencionalmente do PostgreSQL tradicional em várias áreas. Essas diferenças possibilitam os principais benefícios de simplicidade e escala do Aurora DSQL.

Modelo de banco de dados simplificado

Único banco de dados por cluster

O Aurora DSQL fornece um banco de dados incorporado denominado postgres por cluster.

Dica de migração: se sua aplicação usa vários bancos de dados, crie clusters do Aurora DSQL separados para separação lógica ou use esquemas em um único cluster.

Sem tabelas temporárias

Para o tratamento temporário de dados, é NECESSÁRIO usar expressões de tabela comuns (CTEs) e subconsultas, que oferecem alternativas flexíveis para consultas complexas.

Alternativa: use CTEs com cláusulas WITH para conjuntos de resultados temporários ou tabelas regulares com nomenclatura exclusiva para dados específicos da sessão.

Gerenciamento automático de armazenamento

O Aurora DSQL elimina os espaços de tabela e o gerenciamento manual do armazenamento. O armazenamento escala e otimizado automaticamente com base em seus padrões de dados.

Benefício: não é necessário monitorar o espaço em disco, planejar a alocação de armazenamento nem gerenciar configurações de espaço de tabela.

Padrões de aplicação moderna

O Aurora DSQL incentiva padrões de desenvolvimento de aplicações modernas que melhoram a capacidade de manutenção e a performance:

Lógica em nível de aplicação em vez de gatilhos de banco de dados

Para ter uma funcionalidade semelhante a um acionador, implemente a lógica orientada a eventos na camada da aplicação.

Estratégia de migração: mova a lógica de gatilho para o código da aplicação, use arquiteturas orientadas por eventos com serviços da AWS, como o EventBridge, ou implemente trilhas de auditoria usando o registro em log de aplicações.

Funções SQL para processamento de dados

O Aurora DSQL comporta funções baseadas em SQL, mas não a linguagens processuais, como PL/pgSQL.

Alternativa: use funções SQL para transformações de dados ou mova uma lógica complexa para sua camada de aplicação ou funções do AWS Lambda.

Controle de simultaneidade otimista em vez de bloqueio pessimista

O Aurora DSQL usa o controle otimista (OCC), uma abordagem sem bloqueio que difere de sistemas tradicionais baseados em bloqueios. Em vez de adquirir bloqueios que impedem outras transações, o Aurora DSQL permite que as transações prossigam sem bloqueio e detecta conflitos no momento da confirmação. Isso elimina deadlocks e impede que transações lentas bloqueiem outras operações.

Diferença fundamental: quando ocorrem conflitos, o Aurora DSQL exibe um erro de serialização em vez de fazer as transações aguardarem bloqueios. Isso exige que as aplicações implementem uma lógica de repetição, semelhante à manipulação de tempos limite de bloqueio em bancos de dados tradicionais, mas os conflitos são resolvidos imediatamente, em vez de causar esperas de bloqueio.

Padrão de projeto: implemente uma lógica de transação idempotente com mecanismos de repetição. Crie esquemas para minimizar a contenção usando chaves primárias aleatórias e distribuindo atualizações por todo o intervalo de chaves. Para obter detalhes, consulte Controle de simultaneidade no Aurora DSQL.

Relacionamentos e integridade referencial

O Aurora DSQL aceita relações de chave externa entre tabelas, como operações JOIN . Para obter integridade referencial, implemente a validação na camada da aplicação. Embora impor a integridade referencial possa ser valioso, operações em cascata (como exclusões em cascata) podem criar problemas de performance inesperados, por exemplo, excluir um pedido com mil itens de linha se torna uma transação de 1.001 linhas. Muitos clientes evitam restrições de chave externa por esse motivo.

Padrão de projeto: implemente verificações de integridade referencial em sua camada de aplicação, use padrões de consistência eventual ou utilize serviços da AWS para validação de dados.

Simplificações operacionais

O Aurora DSQL elimina muitas tarefas tradicionais de manutenção de banco de dados, reduzindo a sobrecarga operacional:

Não é necessária manutenção manual

O Aurora DSQL gerencia automaticamente a otimização do armazenamento, a coleta de estatísticas e o ajuste de desempenho. Os comandos de manutenção tradicionais, como VACUUM, são gerenciados pelo sistema.

Benefício: elimina a necessidade de janelas de manutenção do banco de dados, agendamento de vácuo e ajuste dos parâmetros do sistema.

Escalabilidade e particionamento automático

O Aurora DSQL particiona e distribui automaticamente seus dados com base nos padrões de acesso. Use UUIDs ou IDs gerados pela aplicação para ter uma distribuição ideal.

Dica de migração: remova a lógica de particionamento manual e deixe o Aurora DSQL lidar com a distribuição de dados. Use UUIDs ou IDs gerados pela aplicação para ter uma distribuição ideal. Se a aplicação exigir identificadores sequenciais, consulte Sequências e colunas de identidade.

Considerações sobre o Aurora DSQL para compatibilidade com o PostgreSQL

O Aurora DSQL tem diferenças de suporte a recursos em relação ao PostgreSQL autogerenciado, que permitem sua arquitetura distribuída, operação sem servidor e escalabilidade automática. A maioria das aplicações funciona dentro dessas diferenças sem modificações.

Com relação a considerações gerais, consulte Considerações para trabalhar com Amazon Aurora DSQL. Com relação a cotas e limites, consulte Cotas de cluster e limites de banco de dados no Amazon Aurora DSQL.

  • O Aurora DSQL usa um único banco de dados integrado por cluster, chamado postgres. Para separação lógica, crie clusters do Aurora DSQL separados ou use esquemas em um único cluster.

  • O banco de dados postgres usa a codificação de caracteres UTF-8, que oferece amplo suporte a caracteres internacionais.

  • O banco de dados usa somente o agrupamento C.

  • O Aurora DSQL usa UTC como fuso horário do sistema. O Postgres armazena todas as datas e horários com reconhecimento de fuso horário internamente em UTC. Você pode definir o parâmetro de configuração TimeZone para converter a forma como ele é exibido para o cliente e servir como padrão para a entrada do cliente que o servidor usará para converter em UTC internamente.

  • O nível de isolamento de transação é fixo em no PostgreSQL Repeatable Read.

  • As transações têm as seguintes restrições:

    • As operações de DDL e DML requerem transações separadas.

    • Uma transação pode incluir apenas uma instrução de DDL.

    • Uma transação pode modificar até 3 mil linhas, independentemente do número de índices secundários.

    • O limite de 3 mil linhas se aplica a todas as instruções de DML (INSERT, UPDATE e DELETE).

  • As conexões de banco de dados atingem o tempo limite após uma hora.

  • O Aurora DSQL gerencia permissões por meio de concessões em nível de esquema. Os usuários administradores criam esquemas usando CREATE SCHEMA e concedem acesso usando GRANT USAGE ON SCHEMA. Os usuários administradores gerenciam objetos no esquema público, enquanto os usuários não administradores criam objetos em esquemas criados pelo usuário para definir limites claros de propriedade. Para obter mais informações, consulte Autorizar perfis de banco de dados a usar SQL no banco de dados.

Se você encontrar recursos essenciais para sua migração, mas que atualmente não são aceitos no Aurora DSQL, consulte Fornecer feedback sobre o Amazon Aurora DSQL para acessar informações sobre como compartilhar feedback com a AWS.