Azure Cosmos DB for NoSQL 中 JavaScript SDK 的最佳做法

适用范围: NoSQL

本指南包含使用最新版本的适用于 Azure Cosmos DB for NoSQL 的 JavaScript SDK 构建的解决方案的最佳做法。 此处包含的最佳做法有助于改善延迟、提高可用性并提升解决方案的整体性能。

帐户配置

  • 确保在与 Azure Cosmos DB 帐户相同的 Azure 区域中运行应用程序,以尽可能减少延迟。 启用 2-4 个区域并在多个区域中复制帐户以获得最佳可用性。 对于生产工作负载,请启用服务托管故障转移。 如果没有此配置,则在写入区域服务中断的整个持续时间内,帐户会处于写入可用性缺失的状态,因为缺少区域连接时,手动故障转移无法成功。 若要详细了解如何使用 JavaScript SDK 添加多个区域,请参阅多区域分布教程

SDK 用法

  • 始终使用提供的最新版本 Azure Cosmos DB SDK,以便获取最佳性能。
  • 在应用程序的生存期内使用 CosmosClient单一实例,以获得更好的性能。
  • 使用 ConnectionPolicy 在 SDK 中设置 preferredRegions。 在故障转移期间,系统会将写入操作发送到当前写入区域,并将所有读取操作发送到首选区域列表中的第一个区域。 有关区域故障转移机制的详细信息,请参阅可用性故障排除
  • 暂时性错误是指根本原因很快就能自行解决的错误。 连接到你的数据库的应用程序应当构建为能预见这些暂时性错误。 为了处理这些错误,可在代码中实现重试逻辑,而不是将它们以应用程序错误的形式呈现给用户。 SDK 提供内置逻辑来处理可重试请求(如读取或查询操作)的这些暂时性故障。 由于写入操作不是幂等的,因此 SDK 无法针对暂时性故障重试写入。 SDK 允许用户为限制配置重试逻辑。 有关针对哪些错误进行重试的详细信息,请访问此处
  • 使用 SDK 日志记录来捕获其他诊断信息并排查延迟问题。

数据设计

  • 指定操作的请求费用与文档大小直接相关。 建议减小文档的大小,因为对大型文档执行操作比对小型文档执行操作成本更高。
  • 某些字符受到限制,不能在某些标识符中使用:“/”、“\”、“?”、“#”。 一般建议不要在像数据库名称、集合名称、项 ID 或分区键这样的标识符中使用任何特殊字符,以避免任何意外行为。
  • Azure Cosmos DB 的索引策略还允许使用索引路径(IndexingPolicy#getIncludedPaths()IndexingPolicy#getExcludedPaths())指定要在索引中包括或排除的文档路径。 确保从索引中排除未使用的路径以加快写入速度。 有关详细信息,请参阅使用 SDK 示例创建索引

主机特征

  • 由于客户端计算机上的资源不足,你可能会遇到连接/可用性问题。 监视运行 Azure Cosmos DB 客户端的节点上的 CPU 利用率,并在使用率非常高的情况下纵向/横向扩展。 此外,请考虑使用群集模块运行工作负载。
  • 对于生产工作负载的最常见情况,强烈建议尽可能使用至少 4 核和 8 GB 内存的 VM。
  • 如果使用虚拟机来运行应用程序,请在 VM 上启用加速网络,以帮助解决流量较大所致的瓶颈问题,并减少延迟或 CPU 抖动。 你可能还需要考虑使用最大 CPU 使用率低于 70% 的更高端虚拟机。
  • 默认情况下,以包括 100 个项的块或 4 MB 大小的块返回查询结果(以先达到的限制为准)。 如果查询返回超过 100 项,请增加页面大小以减少所需的往返次数。 内存消耗量会随着页面大小的增加而增大。

后续步骤