亚马逊AWS官方博客

Amazon Aurora PostgreSQL Limitless Database 现已正式推出



今天,我们宣布 Amazon Aurora PostgreSQL Limitless Database 正式上线,它是 Amazon Aurora 的一项新的无服务器水平扩缩(分片)功能。借助 Aurora PostgreSQL Limitless Database,您可以将数据库工作负载分配到多个 Aurora 编写器实例上,同时保持将其用作单个数据库的能力,从而扩展到现有的 Aurora 写入吞吐量和存储限制之外。

当我们在 AWS re:Invent 2023 上预览 Aurora PostgreSQL Limitless Database 时,我解释说它使用由数据库分片组中的多个数据库节点组成的两层架构,要么是路由器,要么是分片,从而根据工作负载进行扩展。

  • 路由器 – 此类节点接受来自客户端的 SQL 连接、向分片发送 SQL 命令、维护系统一致性以及将结果返回给客户端。
  • 分片 – 此类节点存储表的子集和完整数据副本,接受来自路由器的查询。

将有三种类型的表格包含您的数据:分片表、参考表和标准表。

  • 分片表 – 此类表将跨多个分片分布。数据根据表中指定列的值(称为分片键)分布到不同的分片。它们对于扩展应用程序中最大、I/O 密集度最高的表非常有用。
  • 参考表 – 此类表在每个分片上完整复制数据,从而通过消除不必要的数据移动,提高联接查询的运行速度。此类表通常用于不会频繁修改的参考数据,例如产品目录和邮政编码等。
  • 标准表 – 此类表类似于普通的 Aurora PostgreSQL 表。标准表全部放在一个分片上,因此通过消除不必要的数据移动,联接查询可以更快地工作。可以根据标准表创建分片表和参考表。

创建数据库分片组以及分片表和参考表后,可以将大量数据加载到 Aurora PostgreSQL Limitless Database,并使用标准 PostgreSQL 查询在这些表中查询数据。要了解更多信息,请访问 Amazon Aurora 用户指南中的无限数据库架构

Aurora PostgreSQL Limitless Database 入门
您可以开始在 AWS 管理控制台AWS 命令行界面(AWS CLI)中创建使用 Aurora PostgreSQL Limitless Database 的新数据库集群,向集群添加数据库分片组并查询您的数据。

1.创建 Aurora PostgreSQL Limitless Database 集群
打开 Amazon Relational Database Service(Amazon RDS)控制台并选择创建数据库。对于引擎选项,请选择 Aurora(兼容 PostgreSQL)带无限数据库的 Aurora PostgreSQL(与 PostgreSQL 16.4 兼容)

对于 Aurora Limitless Database,请输入数据库分片组的名称以及以所有路由器和分片的 Aurora 容量单位(ACU)衡量的最小和最大容量值。数据库分片组中路由器和分片的初始数量由此最大容量决定。当节点的当前利用率太低而无法处理负载时,Aurora PostgreSQL Limitless Database 会将该节点扩展到更高的容量。当节点的当前容量高于所需容量时,它会将节点向下扩展到较低的容量。

对于数据库分片组部署,请选择是否为数据库分片组创建备用组:无计算冗余,在不同可用区中创建一个计算备用组,或者在两个不同可用区中创建两个计算备用组。

可以将剩余的数据库设置设置为自己所需,然后选择创建数据库。创建数据库分片组后,它们将显示在数据库页面上。

可以连接、重新启动或删除数据库分片组,也可以更改容量、拆分分片或在数据库分片组中添加路由器。要了解更多信息,请访问 Amazon Aurora 用户指南中的使用数据库分片组

2.创建 Aurora PostgreSQL Limitless Database 表
如前所述,Aurora PostgreSQL Limitless Database 有三种表类型:分片、参考和标准。可以将标准表转换为分片表或参考表,以分发或复制现有标准表或创建新的分片表和参考表。

通过设置表创建模式,可以使用变量来创建分片表和参考表。在设置其他模式之前,您创建的表将使用此模式。以下示例说明如何使用这些变量来创建分片表和参考表。

例如,使用由 item_iditem_cat 列组成的分片键创建一个名为 items 的分片表。

SET rds_aurora.limitless_create_table_mode='sharded';
SET rds_aurora.limitless_create_table_shard_key='{"item_id", "item_cat"}';
CREATE TABLE items(item_id int, item_cat varchar, val int, item text);

现在,使用由 item_iditem_cat 列组成的分片键创建一个名为 items 的分片表,并将其与 items 表搭配使用。

SET rds_aurora.limitless_create_table_collocate_with='items';
CREATE TABLE item_description(item_id int, item_cat varchar, color_id int, ...);

也可以创建名为 colors 的参考表。

SET rds_aurora.limitless_create_table_mode='reference';
CREATE TABLE colors(color_id int primary key, color varchar);

可以使用 rds_aurora.limitless_tables 视图查找有关无限数据库表的信息,该视图包含有关表及其类型的信息。

postgres_limitless=> SELECT * FROM rds_aurora.limitless_tables;

 table_gid | local_oid | schema_name | table_name  | table_status | table_type  | distribution_key
-----------+-----------+-------------+-------------+--------------+-------------+------------------
         1 |     18797 | public      | items       | active       | sharded     | HASH (item_id, item_cat)
         2 |     18641 | public      | colors      | active       | reference   | 

(2 rows)

可以将标准表转换为分片表或参考表。在转换过程中,数据从标准表移动到分布表,然后删除源标准表。要了解更多信息,请访问 Amazon Aurora 用户指南中的将标准表转换为无限表

3.查询 Aurora PostgreSQL Limitless Database 表
Aurora PostgreSQL Limitless Database 与 PostgreSQL 的查询语法兼容。可以使用 psql 或任何其他适用于 PostgreSQL 的连接实用程序来查询您的无限数据库。在查询表之前,可以使用 COPY 命令或使用数据加载实用程序将数据加载到 Aurora Limitless Database 表

要运行查询,请连接到集群终端节点,如连接您的 Aurora Limitless Database 集群中所示。所有 PostgreSQL SELECT 查询都是在客户端发送查询的路由器和数据所在的分片上执行的。

为了实现高度的并行处理,Aurora PostgreSQL Limitless Database 使用了两种查询方法:单分片查询和分布式查询,这两种方法可确定您的查询是单分片还是分布式查询,并相应地处理查询。

  • 单分片查询 – 对于此类查询,查询所需的所有数据都在一个分片上。整个操作可以在一个分片上执行,包括生成的任何结果集。当路由器上的查询规划程序遇到这样的查询时,规划程序会将整个 SQL 查询发送到相应的分片。
  • 分布式查询 – 此类查询在路由器和多个分片上运行。查询由其中一台路由器接收。路由器创建和管理分布式事务,该事务将发送到参与的分片。分片使用路由器提供的上下文创建本地事务,然后运行查询。

对于单分片查询的示例,可以使用以下参数来配置 EXPLAIN 命令的输出。

postgres_limitless=> SET rds_aurora.limitless_explain_options = shard_plans, single_shard_optimization;
SET

postgres_limitless=> EXPLAIN SELECT * FROM items WHERE item_id = 25;

                     QUERY PLAN
--------------------------------------------------------------
 Foreign Scan  (cost=100.00..101.00 rows=100 width=0)
   Remote Plans from Shard postgres_s4:
         Index Scan using items_ts00287_id_idx on items_ts00287 items_fs00003  (cost=0.14..8.16 rows=1 width=15)
           Index Cond: (id = 25)
 Single Shard Optimized
(5 rows) 

要了解有关 EXPLAIN 命令的更多信息,请参阅 PostgreSQL 文档中的 EXPLAIN

对于分布式查询的示例,可以在 items 表中插入名为 BookPen 的新项目。

postgres_limitless=> INSERT INTO items(item_name)VALUES ('Book'),('Pen')

这会在两个分片上进行分布式事务。当查询运行时,路由器会设置快照时间,并将语句传递给拥有 BookPen 的分片。路由器协调两个分片上的原子提交,并将结果返回给客户端。

可以使用分布式查询跟踪,该工具可以在 Aurora PostgreSQL Limitless Database 中跟踪和关联 PostgreSQL 日志中的查询。要了解更多信息,请访问 Amazon Aurora 用户指南中的查询无限数据库

不支持某些 SQL 命令。有关更多信息,请参阅 Amazon Aurora 用户指南中的 Aurora 无限数据库参考

注意事项
关于这项功能,下面的这些信息您应有所了解:

  • 计算 – 每个数据库集群仅可有一个数据库分片组,并且可以将数据库分片组的最大容量设置为 16–6144 个 ACU。如果您需要超过 6144 个 ACU,请联系我们。路由器和分片的初始数量由您在创建数据库分片组时设置的最大容量决定。修改数据库分片组的最大容量时,路由器和分片的数量不会改变。要了解更多信息,请参阅 Amazon Aurora 用户指南中的路由器和分片数量表
  • 存储 – Aurora PostgreSQL Limitless Database 仅支持 Amazon Aurora I/O 优化版数据库集群存储配置。每个分片的最大容量为 128 TiB。参考表对整个数据库分片组的大小限制为 32 TiB。要通过清理数据来回收存储空间,可以使用 PostgreSQL 中的清理实用程序
  • 监控 – 可以使用 Amazon CloudWatchAmazon CloudWatch LogsPerformance Insights 来监控 Aurora PostgreSQL Limitless Database。Aurora PostgreSQL Limitless Database 还有新的统计功能和视图以及等待事件,可用于监控和诊断。

现已推出
Amazon Aurora PostgreSQL Limitless Database 现已在 AWS 美国东部(弗吉尼亚州北部)、美国东部(俄亥俄州)、美国西部(俄勒冈州)、亚太地区(香港)、亚太地区(新加坡)、亚太地区(悉尼)、亚太地区(东京)、欧洲地区(法兰克福)、欧洲地区(爱尔兰)和欧洲地区(斯德哥尔摩)区域推出,与 PostgreSQL 16.4 兼容。

Amazon Aurora 控制台中试用 Aurora PostgreSQL Limitless Database。有关更多信息,请访问 Amazon Aurora 用户指南,向 AWS re:Post for Amazon Aurora 发送反馈,或通过您常用的 AWS Support 联系人发送反馈。

Channy


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。