Migración de PostgreSQL a Aurora DSQL - Amazon Aurora DSQL

Migración de PostgreSQL a Aurora DSQL

Aurora DSQL se ha diseñado para ser compatible con PostgreSQL y admite características relacionales básicas como las transacciones ACID, los índices secundarios, las uniones y las operaciones DML estándar. La mayoría de las aplicaciones PostgreSQL existentes pueden migrar a Aurora DSQL con cambios mínimos.

En esta sección se proporcionan orientaciones prácticas para migrar la aplicación a Aurora DSQL, incluidos la compatibilidad con marcos, los patrones de migración y consideraciones de la arquitectura.

Compatibilidad con marcos y ORM

Aurora DSQL usa el protocolo de conexión estándar de PostgreSQL, lo que garantiza la compatibilidad con controladores y marcos de PostgreSQL. Las asignaciones relacionales de objetos (ORM) más populares funcionan con Aurora DSQL con cambios mínimos o sin cambios. Consulte Adaptadores y dialectos de Aurora DSQL para ver implementaciones de referencia e integraciones de ORM disponibles.

Patrones de migración comunes

Al migrar de PostgreSQL a Aurora DSQL, algunas características funcionan de forma diferente o tienen una sintaxis alternativa. En esta sección se proporciona orientación sobre escenarios de migración comunes.

Alternativas a las operaciones DDL

Aurora DSQL ofrece alternativas modernas a las operaciones de lenguaje de definición de datos (DDL) tradicionales de PostgreSQL:

Creación de índices

Utilice CREATE INDEX ASYNC en lugar de CREATE INDEX para la creación de índices sin bloqueo.

Ventaja: Creación de índices sin tiempo de inactividad en tablas grandes.

Eliminación de datos

Use DELETE FROM table_name en lugar de TRUNCATE.

Alternativa: Para una recreación completa de las tablas, utilice DROP TABLE y, a continuación, CREATE TABLE.

Configuración del sistema

Aurora DSQL está totalmente administrado, por lo que la configuración se gestiona automáticamente en función de los patrones de carga de trabajo. Use la consola de administración de AWS o la API para administrar la configuración del clúster.

Ventaja: No es necesario ajustar la base de datos ni administrar los parámetros.

Patrones de diseño de esquema

Adapte estos patrones comunes de PostgreSQL para que sean compatibles con Aurora DSQL:

Patrones de integridad referencial

Aurora DSQL admite relaciones de tabla y operaciones de JOIN. Para garantizar la integridad referencial, implemente la validación en la capa de aplicación. Este diseño se ajusta a los patrones modernos de bases de datos distribuidas, en los que la validación de la capa de aplicaciones proporciona más flexibilidad y evita cuellos de botella en el rendimiento derivados de las operaciones en cascada.

Patrón: Implemente comprobaciones de integridad referencial en la capa de aplicaciones mediante convenciones de nomenclatura, lógica de validación y límites de transacción coherentes. Muchas aplicaciones a gran escala prefieren este enfoque para controlar mejor la gestión de errores y el rendimiento.

Gestión de datos temporales

Utilice CTE, subconsultas o tablas normales con lógica de limpieza en lugar de tablas temporales.

Alternativa: Cree tablas con nombres específicos de cada sesión y límpielas en su aplicación.

Descripción de las diferencias arquitectónicas

La arquitectura distribuida y sin servidor de Aurora DSQL se diferencia de manera intencionada de PostgreSQL tradicional en varias áreas. Estas diferencias hacen posibles los beneficios clave de simplicidad y escala de Aurora DSQL.

Modelo simplificado de la base de datos

Base de datos única por clúster

Aurora DSQL proporciona una base de datos integrada denominada postgres por clúster.

Consejo de migración: Si la aplicación utiliza varias bases de datos, cree clústeres de Aurora DSQL independientes para una separación lógica o utilice esquemas dentro de un único clúster.

Ausencia de tablas temporales

Para la gestión temporal de datos, DEBERÍA utilizar expresiones de tabla comunes (CTE) y subconsultas, que ofrecen alternativas flexibles para consultas complejas.

Alternativa: Utilice CTE con cláusulas WITH para conjuntos de resultados temporales o tablas normales con nombres únicos para datos específicos de la sesión.

Administración de almacenamiento automática

Aurora DSQL elimina los espacios de tabla y la administración de almacenamiento manual. El almacenamiento se escala y se optimiza automáticamente en función de sus patrones de datos.

Ventaja: No es necesario supervisar el espacio en disco, planificar la asignación de almacenamiento ni administrar las configuraciones de los espacios de tabla.

Patrones de aplicación modernos

Aurora DSQL fomenta los patrones de desarrollo de aplicaciones modernos que mejoran la capacidad de mantenimiento y el rendimiento:

Lógica de nivel de aplicación en lugar de desencadenadores de bases de datos

Para obtener una funcionalidad similar a la de un activador, implemente una lógica basada en eventos en la capa de aplicación.

Estrategia de migración: Traslade la lógica de los desencadenadores al código de la aplicación, utilice arquitecturas basadas en eventos con servicios de AWS como EventBridge o implemente registros de auditoría mediante el registro de aplicaciones.

Funciones SQL para el procesamiento de datos

Aurora DSQL admite funciones basadas en SQL, pero no lenguajes procedurales como PL/pgSQL.

Alternativa: Utilice funciones SQL para las transformaciones de datos o traslade la lógica compleja a la capa de aplicación o a funciones de AWS Lambda.

Control de simultaneidad optimista en lugar de bloqueo pesimista

Aurora DSQL utiliza el control de simultaneidad optimista (OCC), un enfoque sin bloqueos diferente a los mecanismos de bloqueo de bases de datos tradicionales. En lugar de adquirir bloqueos que afecten a otras transacciones, Aurora DSQL permite que las transacciones continúen sin bloquearse y detecta los conflictos en el momento de la confirmación. De este modo, se eliminan los interbloqueos y se impide que las transacciones lentas bloqueen otras operaciones.

Diferencia clave: Cuando se producen conflictos, Aurora DSQL devuelve un error de serialización en lugar de hacer que las transacciones esperen bloqueos. Esto requiere que las aplicaciones implementen una lógica de reintento, similar a la gestión de tiempos de espera de bloqueo en las bases de datos tradicionales, pero los conflictos se resuelven de forma inmediata en lugar de provocar esperas de bloqueo.

Patrón de diseño: Implemente lógica de transacción idempotente con mecanismos de reintento. Diseñe esquemas para minimizar la contención mediante claves principales aleatorias y la distribución de actualizaciones en todo su intervalo de claves. Para obtener más información, consulte Control de simultaneidad en Aurora DSQL.

Relaciones e integridad referencial

Aurora DSQL admite relaciones de claves externas entre tablas, incluidas las operaciones JOIN . Para garantizar la integridad referencial, implemente la validación en la capa de aplicación. Si bien aplicar la integridad referencial puede resultar útil, las operaciones en cascada (como las eliminaciones en cascada) pueden provocar problemas de rendimiento inesperados; por ejemplo, eliminar un pedido con mil partidas se convierte en una transacción de mil y una filas. Por este motivo, muchos clientes evitan las restricciones de clave externa.

Patrón de diseño: Implemente comprobaciones de integridad referencial en la capa de aplicaciones, utilice patrones de coherencia final o aproveche los servicios de AWS para la validación de datos.

Simplificaciones operativas

Aurora DSQL elimina muchas de las tareas tradicionales de mantenimiento de bases de datos, lo que reduce la sobrecarga operativa:

No se requiere mantenimiento manual

Aurora DSQL administra automáticamente la optimización del almacenamiento, la recopilación de estadísticas y el ajuste del rendimiento. Los comandos de mantenimiento tradicionales como VACUUM son gestionados por el sistema.

Ventaja: Elimina la necesidad de ventanas de mantenimiento de base de datos, la programación del vaciado y la afinación de los parámetros del sistema.

Particionamiento y escalado automáticos

Aurora DSQL particiona y distribuye sus datos de forma automática en función de los patrones de acceso. Utilice UUID o ID generados por la aplicación para una distribución óptima.

Consejo de migración: Elimine la lógica de particionamiento manual y deje que Aurora DSQL se encargue de la distribución de datos. Utilice UUID o ID generados por la aplicación para una distribución óptima. Si su aplicación requiere identificadores secuenciales, consulte Secuencias y columnas de identidad.

Consideraciones de Aurora DSQL para la compatibilidad de PostgreSQL

Aurora DSQL presenta diferencias en la compatibilidad de las características con respecto a la instancia de PostgreSQL autoadministrada, las cuales permiten su arquitectura distribuida, funcionamiento sin servidor y escalado automático. La mayoría de las aplicaciones funcionan dentro de estas diferencias sin hacer ninguna modificación.

Para obtener información general, consulte Consideraciones para trabajar con Amazon Aurora DSQL. Para obtener información acerca de las cuotas y los límites, consulte Cuotas de clúster y límites de base de datos en Amazon Aurora DSQL.

  • Aurora DSQL utiliza una única base de datos integrada denominada postgres por clúster. Para una separación lógica, cree clústeres de Aurora DSQL independientes o utilice esquemas dentro de un único clúster.

  • La base de datos postgres utiliza la codificación de caracteres UTF-8, que ofrece una amplia compatibilidad con caracteres internacionales.

  • La base de datos usa solo la intercalación de C.

  • Aurora DSQL utiliza UTC como la zona horaria del sistema. Postgres almacena internamente todas las fechas y horas que tienen en cuenta las zonas horarias en UTC. Puede configurar el parámetro de configuración TimeZone para convertir la forma en que se muestra en el cliente y que sirva como valor predeterminado para las entradas del cliente que el servidor utilizará para convertir internamente a UTC.

  • El nivel de aislamiento de las transacciones se fija en PostgreSQL Repeatable Read.

  • Las transacciones tienen las siguientes restricciones:

    • Las operaciones DDL y DML requieren transacciones separadas.

    • Una transacción solo puede incluir 1 instrucción DDL

    • Una transacción puede modificar hasta 3000 filas, independientemente del número de índices secundarios

    • El límite de 3000 filas se aplica a todas las instrucciones DML (INSERT, UPDATE, DELETE)

  • Las conexiones a la base de datos caducan después de 1 hora.

  • Aurora DSQL administra los permisos a través de concesiones a nivel de esquema. Los usuarios administradores crean esquemas utilizando CREATE SCHEMA y conceden acceso utilizando GRANT USAGE ON SCHEMA. Los usuarios administradores gestionan objetos en el esquema público, mientras que los usuarios no administradores crean objetos en esquemas creados por usuarios para establecer límites claros de propiedad. Para obtener más información, consulte Autorización de roles de base de datos para utilizar SQL en la base de datos.

Si encuentra características que son fundamentales para la migración pero que actualmente no son compatibles con Aurora DSQL, consulte Aportación de comentarios sobre Amazon Aurora DSQL para obtener información sobre cómo compartir comentarios con AWS.