Citus Sharding 和 PostgreSQL table 在同一列上进行分区

Citus Sharding and PostgreSQL table partitioning on the same column

我们正在使用 PostgreSQL 启动一个项目,并且在不久的将来需要将 Citus 用于多租户应用程序,因此我们的目标是适当地准备我们的 PostgreSQL 数据库模式 轻松升级到 Citus。我正在阅读以下页面 https://docs.microsoft.com/en-us/azure/postgresql/hyperscale/concepts-choose-distribution-column#best-practices,其中说明如下:

"按公共 tenant_id 列分布 table 的分区。例如,在租户为公司的 SaaS 应用程序中,tenant_id 可能成为 company_id."

问题是上面语句中的术语“分区”是指 PostgreSQL table 分区 (https://www.postgresql.org/docs/14/ddl-partitioning.html) 还是指 Citus 按键分片? PostgreSQL table 按 tenant_id 分区是否有意义或在 Citus 中使用与用于分区 table 相同的分片键在 Citus 中分片 table 时提供任何好处(tenant_id)?

免责声明:Ex-Citus 团队成员(但不再隶属于 Citus 或 Microsoft)

我相当确定文档引用的是分区,就像 Citus 集群中的分片一样。我见过的大多数 Citus 设置主要使用 Citus 分片,而不是 Postgres table 分区。

您可以将 Postgres table 分区与 Citus 结合使用,例如,如果您有 time-based 个分区,您希望在保留时间到期后删除这些分区。在 Citus 系统中,每个 time-based 分区都可以是一个单独的分布式 table,因此您可以获得两个世界的好处(Citus 跨节点分布,Postgres 分区用于有效删除并避免 autovacuum 问题)。请注意,您不会在同一列上进行分区 - 根据我的经验,这没有任何意义。