你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

确定应用程序类型

适用于:Azure Database for PostgreSQL - 超大规模 (Citus)

针对超大规模 (Citus) 服务器组运行高效查询需要在服务器间正确地分布表。 建议的分布方式因应用程序的类型及其查询模式而异。

一般来说,有两种应用程序在超大规模 (Citus) 上运行良好。 数据建模中的第一步是确定其中哪些应用程序与你的应用程序更类似。

概览

多租户应用程序 实时应用程序
有时,架构中有数十个或数百个表 数量较少的表
与一次一个租户(公司/商店)相关的查询 具有聚合的较简单的分析查询
用于处理 Web 客户端的 OLTP 工作负载 通常不可变数据的高引入量
处理每个租户分析查询的 OLAP 工作负载 通常以大型事件表为中心

示例和特征

多租户应用程序

通常,这些是服务于其他公司、帐户或组织的 SaaS 应用程序。 大多数 SaaS 应用程序本质上是关系应用程序。 它们具有用于跨节点分布数据的自然维度:只需按 tenant_id 分片即可。

利用超大规模 (Citus),可以将数据库横向扩展到数百万个租户,而无需重新设计应用程序。 可以保留所需的关系语义,如联接、外键约束、事务、ACID 和一致性。

  • 示例:承载其他业务(如数字营销解决方案)或某个销售自动化工具的店面的网站。
  • 特征:与单个租户相关(而不是跨租户联接信息)的查询。 这包括为 Web 客户端提供服务的 OLTP 工作负荷,以及为单租户分析查询提供服务的 OLAP 工作负荷。 在数据库架构中具有数十或数百个表也是多租户数据模型的特征。

另外,使用超大规模 (Citus) 来缩放多租户应用,对于应用程序代码更改的需求也最小。 我们支持 Ruby on Rails 和 Django 等常用框架。

实时分析

需要大规模并行的应用程序,协调数百个核心以便快速生成数字查询、统计查询或计数查询。 利用超大规模 (Citus),通过在多个节点间对 SQL 查询进行分片和并行化操作,可以瞬间在数十亿条记录间执行实时查询。

实时分析数据模型中的表通常按列(如 user_id、host_id 或 device_id)分布。

  • 示例:面向客户的分析仪表板,需要亚秒级的响应时间。
  • 特征:表很少,通常以包含设备事件、站点事件或用户事件的大表为中心,并且需要大量引入通常是不可变的数据。 相对简单(但属于计算密集型)的分析查询,涉及多个聚合和 GROUP BY。

如果你的情况类似于上述任一情况,那么接下来就要决定如何对服务器组中的数据分片。 数据库管理员选择的分布列需要与典型查询的访问模式匹配,以确保性能。

后续步骤