Aurora Serverless v2、预置集群与 Aurora Serverless v1 集群的 Amazon RDS 数据 API 行为比较 - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Aurora Serverless v2、预置集群与 Aurora Serverless v1 集群的 Amazon RDS 数据 API 行为比较

Amazon RDS 数据 API 的最新增强功能,使得数据 API 可用于使用最新版本 PostgreSQL 或 MySQL 引擎的集群。这些集群可以配置为使用 Aurora Serverless v2 或预置实例类,例如 db.r6gdb.r6i

以下部分描述了在 Aurora Serverless v2、预置数据库集群和 Aurora Serverless v1 数据库集群上 Amazon RDS 数据 API 的区别。Aurora Serverless v1数据库集群使用 serverless 引擎模式。预置数据库集群使用 provisioned 引擎模式。Aurora Serverless v2 数据库集群还使用 provisioned 引擎模式,并包含一个或多个使用 db.serverless 实例类的 Aurora Serverless v2 数据库实例。

每秒最大请求数

Aurora Serverless v1

数据 API 每秒最多可以发出 1000 个请求。

Aurora Serverless v2

数据 API 每秒可以发出的请求数量没有限制。

在现有数据库上启用或禁用 Amazon RDS 数据 API

Aurora Serverless v1
  • 使用 Amazon RDS API– 使用 ModifyCluster 操作,并为 EnableHttpEndpoint 参数指定 TrueFalse(如果适用)。

  • 使用 Amazon CLI – 使用带有 --enable-http-endpoint--no-enable-http-endpoint 选项的 modify-db-cluster 操作(如果适用)。

Aurora Serverless v2
  • 使用 Amazon RDS API – 使用 EnableHttpEndpointDisableHttpEndpoint 操作。

  • 使用 Amazon CLI:使用 enable-http-endpointdisable-http-endpoint 操作。

CloudTrail 事件

Aurora Serverless v1

来自数据 API 调用的事件是管理事件。默认情况下,这些事件会自动包含在跟踪记录中。有关更多信息,请参阅 从 Amazon CloudTrail 跟踪记录中排除数据 API 事件(仅限 Aurora Serverless v1)

Aurora Serverless v2

来自数据 API 调用的事件是数据事件。默认情况下,这些事件会自动排除在跟踪记录之外。有关更多信息,请参阅 在 Amazon CloudTrail 跟踪记录中包含数据 API 事件

多语句支持

Aurora Serverless v1
  • 对于 Aurora MySQL,不支持多语句。

  • 对于 Aurora PostgreSQL,多语句仅返回第一个查询响应。

Aurora Serverless v2

不支持多语句。尝试在单个 API 调用中执行多条语句会返回 “An error occurred (ValidationException) when calling the ExecuteStatement operation: Multistatements aren't supported.”。要执行多条语句,请使用单独的 ExecuteStatement API 调用或使用 BatchExecuteStatement API 进行批处理。

以下示例显示了 API 调用在尝试执行多条语句时产生的错误消息。

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.

以下示例使用单独 ExecuteStatement API 调用执行多条语句。

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

对于同一事务 ID 的并发请求

Aurora Serverless v1

后续请求将等到当前请求完成。如果等待时间过长,应用程序需要处理超时错误。

Aurora Serverless v2

数据 API 收到多个具有相同事务 ID 的请求时,会立即返回以下错误:

DatabaseErrorException: Transaction is still running a query

此错误会在两种情况下发生:

  • 您的应用程序使用相同的事务 ID 发出异步请求(如 JavaScript promise)。

  • 之前使用相同事务 ID 的请求仍在处理中。

以下示例显示与 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);

要解决此错误,请等待当前请求完成,然后再发送具有相同事务 ID 的另一个请求,或者删除事务 ID 以允许并行请求。

以下示例显示的 API 调用使用了具有相同事务 ID 的顺序执行。

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

BatchExecuteStatement 行为

有关 BatchExecuteStatement 的更多信息,请参阅 BatchExecuteStatement

Aurora Serverless v1

更新结果中生成的字段对象包括插入的值。

Aurora Serverless v2
  • 对于 Aurora MySQL,更新结果中生成的字段对象包括插入的值。

  • 对于 Aurora PostgreSQL,生成的字段对象为空。

ExecuteSQL 行为

有关 ExecuteSQL 的更多信息,请参阅 ExecuteSQL

Aurora Serverless v1

ExecuteSQL 操作已弃用。

Aurora Serverless v2

不支持 ExecuteSQL 操作。

ExecuteStatement 行为

有关 ExecuteStatement 的更多信息,请参阅 ExecuteStatement

Aurora Serverless v1

ExecuteStatement 参数支持检索多维数组列和所有高级数据类型。

Aurora Serverless v2

ExecuteStatement 参数不支持多维数组列。它也不支持某些 PostgreSQL 数据类型,包括几何类型和货币类型。数据 API 在遇到不支持的数据类型时,会返回以下错误:UnsupportedResultException: The result contains the unsupported data type data_type

要解决此问题,请将不支持的数据类型强制转换为 TEXT。以下示例将不支持的数据类型转换为 TEXT

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

有关各个 Aurora 数据库引擎支持的数据类型的列表,请参阅数据 API 操作参考

Schema 参数行为

Aurora Serverless v1

不支持 Schema 参数。当您在 API 调用中时包含 Schema 参数时,数据 API 会忽略该参数。

Aurora Serverless v2

Schema 参数已弃用。当您在 API 调用中时包含 Schema 参数时,数据 API 会返回以下错误:ValidationException: The schema parameter isn't supported。以下示例显示返回 ValidationException 错误的数据 API 调用。

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"

要解决此问题,请删除 API 调用中的 Schema 参数。

以下示例显示删除了 Schema 参数的数据 API 调用。

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"