分布式 PostgreSQL 集群(Citus)官方教程 - 迁移现有应用程序

本文档详细介绍了如何将现有应用程序迁移到Citus分布式PostgreSQL集群,包括确定分布策略、为迁移准备源表、建立开发集群、迁移生产数据等步骤。涉及的关键操作包括选择分布键、回填新创建的列、启用安全连接和逻辑复制。在迁移过程中,需谨慎处理数据分布、查询优化和停机时间,确保平滑过渡。
摘要由CSDN通过智能技术生成

将现有应用程序迁移到 Citus 有时需要调整 schema 和查询以获得最佳性能。 Citus 扩展了 PostgreSQL 的分布式功能,但它不是扩展所有工作负载的直接替代品。高性能 Citus 集群需要考虑数据模型、工具和所使用的 SQL 功能的选择。

第一步是优化现有的数据库模式,以便它可以在多台计算机上高效工作。

  • 确定分布策略
    • 选择分布键(distribution key)
    • 识别表的类型
  • 为迁移准备源表
    • 添加分布键
    • 回填新创建的列

接下来,更新应用程序代码和查询以处理 schema 更改。

  • 准备申请 Citus
    • 建立开发 Citus 集群
    • 向查询添加分布键
    • 启用安全连接
    • 检查跨节点流量

在开发环境中测试更改后,最后一步是将生产数据迁移到 Citus 集群并切换生产应用程序。我们有技术可以最大限度地减少此步骤的停机时间。

  • 迁移生产数据
    • 小型数据库迁移
    • 大数据库迁移

确定分布策略

选择分布键

迁移到 Citus 的第一步是确定合适的distribution key 并相应地规划表分布。 在多租户应用程序中,这通常是租户的内部标识符。我们通常将其称为“租户 ID(tenant ID)”。用例可能会有所不同,因此我们建议您在此步骤中进行彻底检查。

如需指导,请阅读以下部分:

  1. 确定应用程序类型
  2. 选择分布列

我们很乐意帮助您检查您的环境,以确保选择了理想的 distribution key。 为此,我们通常会检查 schema 布局、更大的表、长时间运行和/或有问题的查询、标准用例等。

确定表的类型

一旦确定了 distribution key,请查看 schema 以确定如何处理每个表以及是否需要对表布局进行任何修改。我们通常建议使用电子表格进行跟踪,并创建了您可以使用的模板

表格通常属于以下类别之一:

  1. 准备分发。 这些表已经包含 distribution key,并准备好分发。
  2. 需要回填。 这些表可以按所选 key 进行逻辑分布,但不包含直接引用它的列。稍后将修改这些表以添加该列。
  3. 参考表。 这些表通常很小,不包含 distribution key,通常由分布式表连接,和/或在租户之间共享。这些表中的每一个的副本将在所有节点上维护。常见示例包括国家代码查找、产品类别等。
  4. 本地表。 这些通常不连接到其他表,并且不包含 distribution key。 它们仅在 coordinator 节点上维护。常见示例包括管理员用户查找和其他实用程序表。

考虑一个类似于 EtsyShopify 的示例多租户应用程序,其中每个租户都是商店。这是简化 schema 的一部分:

(带下划线的项目是主键,斜体项目是外键。)

在此示例中,商店是自然租户。在这种情况下,租户 IDstore_id。 在集群中分布表之后,我们希望与同一存储相关的行一起驻留在同一节点上。

为迁移准备源表

一旦确定了所需数据库更改的范围,下一个主要步骤就是修改应用程序现有数据库的数据结构。首先,修改需要回填的表,为 distribution key 添加一列。

添加分布键

在我们的店面示例中,storesproducts 表有一个 store_id 并准备好分布。规范化后,line_items 表缺少商店 ID。如果我们想通过 store_id 分布,表需要这个列。

-- denormalize line_items by including store_id

ALTER TABLE line_items ADD COLUMN store_id uuid;

请务必检查所有表中的分布列是否具有相同的类型,例如:不要混合 intbigint。列类型必须匹配以确保正确的数据托管。

回填新创建的列

更新 schema 后,在添加该列的表中回填 tena

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值