在 Azure Cosmos DB for PostgreSQL 中为高吞吐量事务应用建模
适用对象: Azure Cosmos DB for PostgreSQL(由 PostgreSQL 的 Citus 数据库扩展提供支持)
作为分片键的常用筛选器
若要为高吞吐量事务应用程序选取分片键,请遵循以下准则:
- 选择用于点查找并出现在大多数创建、读取、更新和删除操作中的列。
- 选择属于数据中的自然维度或属于应用程序的核心部分的列。 例如:
- 在 IOT 工作负载中,
device_id
是一个很好的分布列。
- 在 IOT 工作负载中,
选择良好的分片键有助于优化网络跃点,同时利用内存和计算来实现毫秒延迟。
高吞吐量应用的最优数据模型
下面是 IoT 应用的示例数据模型的一个示例,其从设备捕获遥测数据(时序数据)。 有两个用于捕获遥测数据的表:devices
和 events
。 可能还有其他表,但本示例中未涵盖这些表。
生成高吞吐量应用时,请记住一些优化。
- 将大型表分布到属于应用核心部分的常用列和应用主要查询的列上。 在上面的 IOT 应用示例中,
device_id
是该列,它归置事件和设备表。 - 其余小型表可以是引用表。
- 由于 IOT 应用具有时间维度,请根据时间分区分布式表。 可以使用本机 Azure Cosmos DB for PostgreSQL 时序功能来创建和维护分区。
- 分区有助于使用时间筛选器高效地筛选查询数据。
- 使用 DROP vs DELETE 命令,过期旧数据也很快。
- 示例中的事件表按月份进行分区。
- 使用 JSONB 数据类型存储半结构化数据。 设备遥测数据通常不是结构化的,每个设备都有其自己的指标。
- 在我们的示例中,事件表有一个
detail
列,即 JSONB。
- 在我们的示例中,事件表有一个
- 如果 IoT 应用需要地理空间功能,则可以使用 Azure Cosmos DB for PostgreSQL 本机支持的 PostGIS 扩展。
后续步骤
现在,我们已探讨完可缩放应用的数据建模。 下一步是使用所选的编程语言连接和查询数据库。