集群包含五种类型的表。 每种类型在节点上以不同的方式存储数据,并用于不同的目的。
分布式表
第一种类型是分布式表,也是最常见的类型。 对于 SQL 语句来说,它们看起来像普通表,但实际上它们在各个工作节点之间进行了水平分区。 此分区意味着表的行存储在称为分片的片段表中的不同节点上。
弹性群集不仅运行 SQL,而且在整个群集中运行 DDL (数据定义语言) 语句。 当你更改分布式表的表结构时,该更改会级联到各个工作节点上的该表所有分片,并更新它们。 需要通过端口 5432 建立连接来执行此类操作。
分布式列
弹性群集使用分片算法将行分配到分片。 基于表列(称为分布列)的值执行分配,此分配具有确定性。 群集管理员在分布表时必须指定此列。 做出正确的选择,这一点对于性能和功能有重要影响。
引用表
引用表是一种分布式表,其整个内容都驻留在单个分片中。 群集会在每个工作节点上复制该分片。 针对任何工作器的查询都可以在本地访问引用信息,无需从另一个节点请求行,因此也不会产生此类网络开销。 参考表没有分布列,因为无需区分每一行所属的独立分片。
引用表通常很小,并且存储与任何工作节点上运行的查询相关的数据。 例如,订单状态或产品类别等枚举值。
本地表
使用弹性群集时,每个节点都是常规 PostgreSQL 数据库。 可对其创建普通表,并选择不对其进行分片。
小型且不参与连接查询的管理表是本地表的良好候选。 例如,用于执行应用程序登录和身份验证的 users 表。 仅当不打算使用端口 7432 或 8432 在弹性群集之间对连接进行负载均衡时,这种类型的表才有用。
本地托管表
如果本地表和引用表之间存在外键引用,弹性群集可能会自动将本地表添加到元数据。 此外,还可以通过在常规本地表上执行 citus_add_local_table_to_metadata 函数来手动创建本地托管表。 元数据中存在的表被视为托管表,可从任何节点进行查询。 Citus 知道要路由到节点,以从本地托管表获取数据。 此类表在 citus_tables 视图中显示为本地表。
架构表
使用 基于架构的分片时,系统会自动将分布式架构与单个归置组相关联。 在这些架构中创建表时,系统会自动将它们转换为没有分片键的并置分布式表。 这些表是 schema 表,并在 citus_tables 视图中显示为 schema。