Confronto dei comportamenti delle API dati di Amazon RDS per i cluster Aurora Serverless v2 e con provisioning con i cluster Aurora Serverless v1 - Amazon Aurora

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Confronto dei comportamenti delle API dati di Amazon RDS per i cluster Aurora Serverless v2 e con provisioning con i cluster Aurora Serverless v1

I miglioramenti più recenti apportati alle API dati di Amazon RDS rendono le API dati disponibili per i cluster che utilizzano versioni recenti dei motori PostgreSQL o MySQL. Questi cluster possono essere configurati per utilizzare Aurora Serverless v2 oppure classi di istanza con provisioning, come db.r6g o db.r6i.

Le sezioni seguenti descrivono le differenze delle API dati di Amazon RDS tra cluster Aurora Serverless v2 e cluster di database con provisioning e cluster di database Aurora Serverless v1. Aurora Serverless v1 I cluster di database utilizzano la modalità motore serverless. I cluster di database con provisioning utilizzano la modalità motore provisioned. Un cluster di database Aurora Serverless v2 utilizza anch’esso la modalità motore provisioned e contiene una o più istanze database Aurora Serverless v2 con la classe di istanza db.serverless.

Numero massimo di richieste al secondo

Aurora Serverless v1

Le API dati possono eseguire fino a 1.000 richieste al secondo.

Aurora Serverless v2

Le API dati possono eseguire un numero illimitato di richieste al secondo.

Abilitazione o disabilitazione dell’API dati di Amazon RDS su un database esistente

Aurora Serverless v1
  • Con l’API Amazon RDS: utilizza l’operazione ModifyCluster e specifica True o False, a seconda dei casi, per il parametro EnableHttpEndpoint.

  • Con la AWS CLI: utilizza l’operazione modify-db-cluster con l’opzione --enable-http-endpoint o --no-enable-http-endpoint, a seconda dei casi.

Aurora Serverless v2
  • Con l’API Amazon RDS: utilizza le operazioni EnableHttpEndpoint e DisableHttpEndpoint.

  • Con la AWS CLI: utilizza le operazioni enable-http-endpoint e disable-http-endpoint.

Eventi CloudTrail

Aurora Serverless v1

Gli eventi derivanti dalle chiamate API dati sono eventi di gestione. Questi eventi vengono automaticamente inclusi in un trail per impostazione predefinita. Per ulteriori informazioni, consulta Esclusione di eventi API dati da un trail AWS CloudTrail (solo Aurora Serverless v1).

Aurora Serverless v2

Gli eventi derivanti dalle chiamate API dati sono eventi di dati. Questi eventi vengono automaticamente esclusi da un trail per impostazione predefinita. Per ulteriori informazioni, consulta Inclusione di eventi API dati in un trail AWS CloudTrail.

Supporto per istruzioni multiple

Aurora Serverless v1
  • Per Aurora MySQL, le istruzioni multiple non sono supportate.

  • Per Aurora PostgreSQL, le istruzioni multiple restituiscono solo la risposta della prima query.

Aurora Serverless v2

Le istruzioni multiple non sono supportate. Il tentativo di eseguire più istruzioni in una singola chiamata API restituisce “An error occurred (ValidationException) when calling the ExecuteStatement operation: Multistatements aren't supported.”. Per eseguire più istruzioni, effettua chiamate API ExecuteStatement separate oppure utilizza BatchExecuteStatement per l’elaborazione in batch.

L’esempio seguente mostra il messaggio di errore risultante da una chiamata API che tenta di eseguire più istruzioni.

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.

L’esempio seguente mostra l’esecuzione di più istruzioni tramite chiamate API ExecuteStatement separate.

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;"

Richieste simultanee per lo stesso ID transazione

Aurora Serverless v1

Le richieste successive attendono fino al completamento della richiesta corrente. L’applicazione deve gestire gli errori di timeout se il periodo di attesa è troppo lungo.

Aurora Serverless v2

Quando l’API dati riceve più richieste con lo stesso ID transazione, restituisce immediatamente questo errore:

DatabaseErrorException: Transaction is still running a query

Questo errore si verifica in due situazioni:

  • L’applicazione effettua richieste asincrone (ad esempio con promesse JavaScript) utilizzando lo stesso ID transazione.

  • Una richiesta precedente con tale ID transazione è ancora in elaborazione.

L’esempio seguente mostra tutte le richieste eseguite in parallelo 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);

Per risolvere questo errore, attendi il completamento della richiesta corrente prima di inviare un’altra richiesta con lo stesso ID transazione o rimuovi l’ID transazione per consentire le richieste parallele.

L’esempio seguente mostra una chiamata API che utilizza l’esecuzione sequenziale con lo stesso ID transazione.

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

Comportamento di BatchExecuteStatement

Per ulteriori informazioni su BatchExecuteStatement, consulta BatchExecuteStatement.

Aurora Serverless v1

L’oggetto dei campi generati nel risultato dell’aggiornamento include i valori inseriti.

Aurora Serverless v2
  • Per Aurora MySQL, l’oggetto campi generati nel risultato dell’aggiornamento include i valori inseriti.

  • Per Aurora PostgreSQL, l’oggetto campi generati è vuoto.

Comportamento di ExecuteSQL

Per ulteriori informazioni su ExecuteSQL, consulta ExecuteSQL.

Aurora Serverless v1

L’operazione ExecuteSQL è obsoleta.

Aurora Serverless v2

L’operazione ExecuteSQL non è supportata.

Comportamento di ExecuteStatement

Per ulteriori informazioni su ExecuteStatement, consulta ExecuteStatement.

Aurora Serverless v1

Il parametro ExecuteStatement supporta lo strumento di recupero di colonne di array multidimensionali e di tutti i tipi di dati avanzati.

Aurora Serverless v2

Il parametro ExecuteStatement non supporta di colonne di array multidimensionali. Non supporta inoltre alcuni tipi di dati PostgreSQL, inclusi i tipi geometrici e monetari. Quando l’API dati rileva un tipo di dato non supportato, restituisce l’errore: UnsupportedResultException: The result contains the unsupported data type data_type.

Per risolvere il problema, esegui il casting del tipo di dati non supportato su TEXT. L’esempio seguente mostra come eseguire il casting di un tipo di dati non supportato su TEXT.

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

Per un elenco dei tipi di dati supportati per ciascun motore di database Aurora, consulta il riferimento alle operazioni dell’API dati.

Comportamento del parametro Schema

Aurora Serverless v1

Il parametro Schema non è supportato. Quando includi il parametro Schema in una chiamata API, l’API dati ignora il parametro.

Aurora Serverless v2

Il parametro Schema è obsoleto. Quando includi il parametro Schema in una chiamata API, l’API dati restituisce l’errore: ValidationException: The schema parameter isn't supported. L’esempio seguente mostra una chiamata API dati che restituisce l’errore 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"

Per risolvere questo problema, rimuovi il parametro Schema dalla chiamata API.

L’esempio seguente mostra una chiamata API dati con il parametro Schema rimosso.

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"