使用变量创建无限表 - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用变量创建无限表

通过设置表创建模式,您可以使用变量创建分片表和引用表。然后,您创建的表将使用此模式,直到您设置不同的模式。

使用以下变量创建分片表和引用表:

  • rds_aurora.limitless_create_table_mode – 将此会话变量设置为 shardedreference。该变量的默认值为 standard

  • rds_aurora.limitless_create_table_shard_key – 将此会话变量设置为列名数组以用作分片键。如果 rds_aurora.limitless_create_table_mode 不是 sharded,则忽略此变量。

    将值格式化为 untyped array literal,类似于在数组列中插入字面值。有关更多信息,请参阅 PostgreSQL 文档中的数组

  • rds_aurora.limitless_create_table_collocate_with – 将此会话变量设置为特定的表名,以将新创建的表与该表并置。

    如果使用相同的分片键对两个或多个表进行分片,则可以显式对齐(并置)这些表。当两个或多个表并置时,这些表中具有相同分片键值的行将放在同一个分片上。并置有助于将某些操作限制在单个分片上,从而提高性能。

注意

所有主键和唯一键都必须包含分片键。这意味着分片键是主键或唯一键的子集。

无限表有一些限制。有关更多信息,请参阅 Aurora PostgreSQL Limitless Database 的 DDL 限制和其他信息

使用变量创建无限表的示例

以下示例演示了如何使用这些变量创建分片表和引用表。

创建一个名为 items 的分片表,带有分片键 id

BEGIN; SET LOCAL rds_aurora.limitless_create_table_mode='sharded'; SET LOCAL rds_aurora.limitless_create_table_shard_key='{"id"}'; CREATE TABLE items(id int, val int, item text); COMMIT;

创建一个名为 items 的分片表,其分片键由 item_iditem_cat 列组成。

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

创建一个名为 item_description 的分片表,其分片键由 item_iditem_cat 列组成,并将其与上一个示例中的 items 表并置。

BEGIN; SET LOCAL rds_aurora.limitless_create_table_mode='sharded'; SET LOCAL rds_aurora.limitless_create_table_shard_key='{"item_id", "item_cat"}'; SET LOCAL rds_aurora.limitless_create_table_collocate_with='items'; CREATE TABLE item_description(item_id int, item_cat varchar, color_id int); COMMIT;

创建一个名为 colors 的引用表。

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

要将 rds_aurora.limitless_create_table_mode 会话变量重置为 standard,请使用以下语句:

RESET rds_aurora.limitless_create_table_mode;

重置此变量后,会默认将表创建为标准表。有关标准表的更多信息,请参阅将标准表转换为无限表

Aurora PostgreSQL Limitless Database 表视图

您可以使用以下视图查找有关 Limitless Database 表的信息。

rds_aurora.limitless_tables

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 -----------+-----------+-------------+-------------+--------------+-------------+------------------ 5 | 18635 | public | standard | active | standard | 6 | 18641 | public | ref | active | reference | 7 | 18797 | public | orders | active | sharded | HASH (order_id) 2 | 18579 | public | customer | active | sharded | HASH (cust_id) (4 rows)
rds_aurora.limitless_table_collocations

rds_aurora.limitless_table_collocations 视图包含有关并置的分片表的信息。例如,orderscustomers 表并置,它们具有相同的 collocation_idusersfollowers 表并置,它们具有相同的 collocation_id

postgres_limitless=> SELECT * FROM rds_aurora.limitless_table_collocations ORDER BY collocation_id; collocation_id | schema_name | table_name ----------------+-------------+------------ 16002 | public | orders 16002 | public | customers 16005 | public | users 16005 | public | followers (4 rows)
rds_aurora.limitless_table_collocation_distributions

rds_aurora.limitless_table_collocation_distributions 显示了每个并置的密钥分配几率。

postgres_limitless=> SELECT * FROM rds_aurora.limitless_table_collocation_distributions ORDER BY collocation_id, lower_bound; collocation_id | subcluster_id | lower_bound | upper_bound ----------------+---------------+----------------------+---------------------- 16002 | 6 | -9223372036854775808 | -4611686018427387904 16002 | 5 | -4611686018427387904 | 0 16002 | 4 | 0 | 4611686018427387904 16002 | 3 | 4611686018427387904 | 9223372036854775807 16005 | 6 | -9223372036854775808 | -4611686018427387904 16005 | 5 | -4611686018427387904 | 0 16005 | 4 | 0 | 4611686018427387904 16005 | 3 | 4611686018427387904 | 9223372036854775807 (8 rows)