适合 Azure Cosmos DB for NoSQL 中 Python SDK 的最佳做法
适用范围: NoSQL
本指南包含使用 Azure Cosmos DB for NoSQL 的 Python SDK 最新版本构建的解决方案的最佳做法。 此处包含的最佳做法有助于改善延迟、提高可用性并提升解决方案的整体性能。
帐户配置
- 确保在与 Azure Cosmos DB 帐户相同的 Azure 区域中运行应用程序,以尽可能减少延迟。 在帐户中的 2 个以上的区域中启用复制,以实现最佳可用性。 对于生产工作负载,请启用服务托管故障转移。 如果没有此配置,则在写入区域服务中断的整个持续时间内,帐户会处于写入可用性缺失的状态,因为缺少区域连接时,手动故障转移无法成功。 若要详细了解如何使用 Python SDK 添加多个区域,请参阅多区域分布教程。
SDK 用法
- 始终使用提供的最新版本 Azure Cosmos DB SDK,以便获取最佳性能。
- 在应用程序的生存期内使用
CosmosClient
的单个实例,以获得更好的性能。 - 在 cosmos 客户端上,设置
preferred_locations
配置。 在故障转移期间,系统会将写入操作发送到当前写入区域,并将所有读取操作发送到首选位置列表中的第一个区域。 有关区域故障转移机制的详细信息,请参阅可用性故障排除。 - 暂时性错误是指根本原因很快就能自行解决的错误。 连接到你的数据库的应用程序应当构建为能预见这些暂时性错误。 为了处理这些错误,可在代码中实现重试逻辑,而不是将它们以应用程序错误的形式呈现给用户。 SDK 提供内置逻辑来处理可重试请求(如读取或查询操作)的这些暂时性故障。 由于写入操作不是幂等的,因此 SDK 无法针对暂时性故障重试写入。 SDK 允许用户为限制配置重试逻辑。 有关针对哪些错误进行重试的详细信息,请访问此处。
- 使用 SDK 日志记录来捕获诊断信息并排查延迟问题。
数据设计
- 指定操作的请求费用与文档大小直接相关。 建议减小文档的大小,因为对大型文档执行操作比对小型文档执行操作成本更高。
- 某些字符受到限制,不能在某些标识符中使用:“/”、“\”、“?”、“#”。 一般建议不要在像数据库名称、集合名称、项 ID 或分区键这样的标识符中使用任何特殊字符,以避免任何意外行为。
- Azure Cosmos DB 的索引策略还允许使用索引路径指定要在索引中包括或排除的文档路径。 确保从索引中排除未使用的路径以加快写入速度。 有关详细信息,请参阅使用 SDK 示例创建索引。
主机特征
- 由于客户端计算机上的资源不足,你可能会遇到连接/可用性问题。 监视运行 Azure Cosmos DB 客户端的节点上的 CPU 利用率,并在使用率非常高的情况下纵向/横向扩展。
- 如果使用虚拟机来运行应用程序,请在 VM 上启用加速网络,以帮助解决流量较大所致的瓶颈问题,并减少延迟或 CPU 抖动。 你可能还需要考虑使用最大 CPU 使用率低于 70% 的更高端虚拟机。
- 默认情况下,以包括 100 个项的块或 4 MB 大小的块返回查询结果(以先达到的限制为准)。 如果查询返回超过 100 项,请增加页面大小以减少所需的往返次数。 内存消耗量会随着页面大小的增加而增大。
后续步骤
若要详细了解有关 Java Python 的性能提示,请参阅有关 Azure Cosmos DB Python SDK 的性能提示。
若要深入了解如何设计应用程序以实现缩放和高性能,请参阅 Azure Cosmos DB 中的分区和缩放。
尝试为迁移到 Azure Cosmos DB 进行容量计划? 可以使用有关现有数据库群集的信息进行容量规划。
- 如果你只知道现有数据库群集中的 vCore 和服务器数量,请阅读根据 vCore 或 vCPU 数量估算请求单位数
- 若知道当前数据库工作负载的典型请求速率,请阅读使用 Azure Cosmos DB 容量计划工具估算请求单位