Comparación de los comportamientos de la API de datos de Amazon RDS para clústeres de Aurora Serverless v2 y aprovisionados con clústeres de Aurora Serverless v1 - Amazon Aurora

Comparación de los comportamientos de la API de datos de Amazon RDS para clústeres de Aurora Serverless v2 y aprovisionados con clústeres de Aurora Serverless v1

Las mejoras más recientes de las API de datos de Amazon RDS permiten que las API de datos estén disponibles para los clústeres que utilizan versiones recientes de los motores de PostgreSQL o MySQL. Estos clústeres se pueden configurar para el uso de Aurora Serverless v2 o de clases de instancias aprovisionadas, como db.r6g o db.r6i.

Las secciones siguientes describen las diferencias de la API de datos de Amazon RDS entre clústeres de bases de datos de Aurora Serverless v2 y aprovisionados y los clústeres de bases de datos de Aurora Serverless v1. Aurora Serverless v1 Los clústeres de bases de datos utilizan el modo de motor serverless. Los clústeres de bases de datos aprovisionados utilizan el modo de motor provisioned. Un clúster de base de datos de Aurora Serverless v2 también utiliza el modo de motor provisioned y contiene una o más instancias de base de datos de Aurora Serverless v2 con la clase de instancia db.serverless.

Número máximo de solicitudes por segundo

Aurora Serverless v1

Las API de datos pueden realizar hasta 1000 solicitudes por segundo.

Aurora Serverless v2

Las API de datos pueden realizar un número ilimitado de solicitudes por segundo.

Habilitación o desactivación de la API de datos de Amazon RDS en una base de datos existente

Aurora Serverless v1
  • Con la API de Amazon RDS: use la operación ModifyCluster y especifique True o False, según proceda, para el parámetro EnableHttpEndpoint.

  • Con la AWS CLI: use la operación modify-db-cluster con la opción --enable-http-endpoint o --no-enable-http-endpoint, según proceda.

Aurora Serverless v2
  • Con la API de Amazon RDS: utilice las operaciones EnableHttpEndpoint y DisableHttpEndpoint.

  • Con la AWS CLI: utilice las operaciones enable-http-endpoint y disable-http-endpoint.

Eventos de CloudTrail

Aurora Serverless v1

Los eventos de las llamadas a la API de datos son eventos de administración. De forma predeterminada, estos eventos se incluyen automáticamente de un registro. Para obtener más información, consulte Excluir eventos de la API de datos de un seguimiento de AWS CloudTrail (solo Aurora Serverless v1).

Aurora Serverless v2

Los eventos de las llamadas a la API de datos son eventos de datos. De forma predeterminada, estos eventos se excluyen automáticamente de un registro. Para obtener más información, consulte Inclusión de eventos de la API de datos en un seguimiento de AWS CloudTrail.

Compatibilidad con instrucciones múltiples

Aurora Serverless v1
  • Aurora MySQL no admite las instrucciones múltiples.

  • Para Aurora PostgreSQL, las instrucciones múltiples devuelven solo la primera respuesta a la consulta.

Aurora Serverless v2

Las instrucciones múltiples no son compatibles. Intentar ejecutar varias instrucciones en una sola llamada a la API devuelve “An error occurred (ValidationException) when calling the ExecuteStatement operation: Multistatements aren't supported.”. Para ejecutar varias instrucciones, realice llamadas a la API ExecuteStatement independientes o utilice BatchExecuteStatement para el procesamiento por lotes.

El siguiente ejemplo muestra el mensaje de error resultante de una llamada a la API que intenta ejecutar una instrucción múltiple.

aws rds-data execute-statement \ --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \ --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \ --database "your_database" \ --sql "SELECT * FROM your_table; Select * FROM next_table; "An error occurred (ValidationException) when calling the ExecuteStatement operation: Multistatements aren't supported.

El siguiente ejemplo ejecuta varias instrucciones con llamadas a la API ExecuteStatement independientes.

aws rds-data execute-statement \ --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \ --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \ --database "your_database" \ --sql "SELECT * FROM your_table;" aws rds-data execute-statement \ --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \ --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \ --database "your_database" \ --sql "SELECT * FROM next_table;"

Solicitudes simultáneas para el mismo ID de transacción

Aurora Serverless v1

Las solicitudes subsiguientes esperan hasta que finalice la solicitud actual. Su aplicación debe gestionar los errores de tiempo de espera si el período de espera es demasiado largo.

Aurora Serverless v2

Cuando la API de datos recibe varias solicitudes con el mismo ID de transacción, devuelve inmediatamente este error:

DatabaseErrorException: Transaction is still running a query

Este error se produce en dos situaciones:

  • La aplicación realiza solicitudes asíncronas (como las promesas de JavaScript) con el mismo ID de transacción.

  • Aún se está procesando una solicitud anterior con ese ID de transacción.

El siguiente ejemplo muestra todas las solicitudes ejecutadas en paralelo con promise.all().

const api_calls = []; for (let i = 0; i < 10; i++) { api_calls.push( client.send( new ExecuteStatementCommand({ ...params, sql: `insert into table_name values (i);`, transactionId }) ) ); } await Promise.all(api_calls);

Para resolver este error, espere a que finalice la solicitud actual antes de enviar otra solicitud con el mismo ID de transacción o elimine el ID de transacción para permitir las solicitudes en paralelo.

El siguiente ejemplo muestra una llamada a la API que utiliza la ejecución secuencial con el mismo ID de transacción.

for (let i = 0; i < 10; i++) { await client.send( new ExecuteStatementCommand({ ...params, sql: `insert into table_name values (i);`, transactionId }) ).promise() ); }

Comportamiento de BatchExecuteStatement

Para obtener más información acerca de BatchExecuteStatement, consulte BatchExecuteStatement.

Aurora Serverless v1

El objeto de campos generado en el resultado de la actualización incluye los valores insertados.

Aurora Serverless v2
  • Para Aurora MySQL, el objeto de campos generado en el resultado de la actualización incluye los valores insertados.

  • En Aurora PostgreSQL, el objeto de campos generado está vacío.

Comportamiento de ExecuteSQL

Para obtener más información acerca de ExecuteSQL, consulte ExecuteSQL.

Aurora Serverless v1

La operación ExecuteSQL no está disponible.

Aurora Serverless v2

La operación ExecuteSQL no es compatible.

Comportamiento de ExecuteStatement

Para obtener más información acerca de ExecuteStatement, consulte ExecuteStatement.

Aurora Serverless v1

El parámetro ExecuteStatement admite la recuperación de columnas de matrices multidimensionales y todos los tipos de datos avanzados.

Aurora Serverless v2

El parámetro ExecuteStatement no admite columnas de matrices multidimensionales. Tampoco admite determinados tipos de datos de PostgreSQL, incluidos los tipos geométricos y monetarios. Cuando una API de datos encuentra un tipo de datos no compatible, devuelve este error: UnsupportedResultException: The result contains the unsupported data type data_type.

Para evitar este problema, convierta el tipo de datos no compatible a TEXT. El siguiente ejemplo convierte un tipo de datos no compatible en TEXT.

SELECT custom_type::TEXT FROM my_table;-- ORSELECT CAST(custom_type AS TEXT) FROM my_table;

Para obtener una lista de los tipos de datos admitidos para cada motor de base de datos de Aurora, consulte Referencia de operaciones de la API de datos.

Comportamiento del parámetro de esquema

Aurora Serverless v1

El parámetro Schema no es compatible. Cuando incluye el parámetro Schema en una llamada a la API, la API de datos lo ignora.

Aurora Serverless v2

El parámetro Schema no está disponible. Cuando incluye el parámetro Schema en una llamada a la API, la API de datos devuelve este error: ValidationException: The schema parameter isn't supported. El siguiente ejemplo muestra una llamada a la API de datos que devuelve el error ValidationException.

aws rds-data execute-statement \ --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \ --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \ --database "your_database" \ --schema "your_schema" \ --sql "SELECT * FROM your_table LIMIT 10"

Para solucionar este problema, elimine el parámetro Schema de la llamada a la API.

El siguiente ejemplo muestra una llamada a la API de datos con el parámetro Schema eliminado.

aws rds-data execute-statement \ --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \ --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \ --database "your_database" \ --sql "SELECT * FROM your_table LIMIT 10"