在 Azure Cosmos DB for PostgreSQL 中为高吞吐量事务应用建模

适用对象: Azure Cosmos DB for PostgreSQL(由 PostgreSQL 的 Citus 数据库扩展提供支持)

作为分片键的常用筛选器

若要为高吞吐量事务应用程序选取分片键,请遵循以下准则:

  • 选择用于点查找并出现在大多数创建、读取、更新和删除操作中的列。
  • 选择属于数据中的自然维度或属于应用程序的核心部分的列。 例如:
    • 在 IOT 工作负载中,device_id 是一个很好的分布列。

选择良好的分片键有助于优化网络跃点,同时利用内存和计算来实现毫秒延迟。

高吞吐量应用的最优数据模型

下面是 IoT 应用的示例数据模型的一个示例,其从设备捕获遥测数据(时序数据)。 有两个用于捕获遥测数据的表:devicesevents。 可能还有其他表,但本示例中未涵盖这些表。

Diagram of events and devices tables, and partitions of events.

生成高吞吐量应用时,请记住一些优化。

  • 将大型表分布到属于应用核心部分的常用列和应用主要查询的列上。 在上面的 IOT 应用示例中,device_id 是该列,它归置事件和设备表。
  • 其余小型表可以是引用表。
  • 由于 IOT 应用具有时间维度,请根据时间分区分布式表。 可以使用本机 Azure Cosmos DB for PostgreSQL 时序功能来创建和维护分区。
    • 分区有助于使用时间筛选器高效地筛选查询数据。
    • 使用 DROP vs DELETE 命令,过期旧数据也很快。
    • 示例中的事件表按月份进行分区。
  • 使用 JSONB 数据类型存储半结构化数据。 设备遥测数据通常不是结构化的,每个设备都有其自己的指标。
    • 在我们的示例中,事件表有一个 detail 列,即 JSONB。
  • 如果 IoT 应用需要地理空间功能,则可以使用 Azure Cosmos DB for PostgreSQL 本机支持的 PostGIS 扩展。

后续步骤

现在,我们已探讨完可缩放应用的数据建模。 下一步是使用所选的编程语言连接和查询数据库。