对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

开发检查清单

以下清单以及自托管部署的操作清单提供了建议,可帮助您避免在生产MongoDB 部署中出现问题。

  • 确保您的副本集至少包含三个承载数据的投票节点,并且您的写入操作使用 w: majority 写关注。要实现副本集范围内的数据持久性,需要三个承载数据的有投票权节点。

  • 确保所有实例均使用日志

MongoDB中的数据具有动态模式集合不实施文档结构。这有利于迭代开发和多态性。然而,集合通常包含具有高度同质结构的文档。有关更多信息,请参阅MongoDB中的数据建模。

  • 确定所需的集合集以及支持查询所需的索引。除 _id 索引外,您必须明确创建所有索引:MongoDB 不会自动创建除 _id 以外的任何索引。

  • 确保您的模式设计支持部署类型:如果您计划使用分片集群进行水平扩展,请将模式设计为包含强分片键。虽然您可在后续更改分片键,但请务必仔细考虑分片键的选择,以免出现可扩展性与性能问题。

  • 确保您的模式设计不依赖于长度无限制增长的索引数组。通常情况下,当此类索引数组的元素少于 1000 时,性能最佳。

  • 在设计模式时,请考虑文档大小限制。BSON 文档大小限制为每个文档 16 MB。如果您需要更大的文档,请使用 GridFS

  • 使用奇数个投票节点,以确保选举成功进行。您最多可以有 7 个投票节点。如果您有偶数个投票节点,并且约束(如成本)禁止添加另一个从节点作为投票节点,则可以添加仲裁节点以确保投票数为奇数。有关对 3 节点副本集 (P-S-A) 使用仲裁节点时的其他注意事项,请参阅副本集仲裁节点。

  • 使用监控工具并指定适当的写关注,确保从节点保持最新状态。

  • 不要使用从节点读取来扩展整体读取吞吐量。请参阅:是否可以使用更多副本节点进行扩展,了解读取扩展的概述。有关从节点读取的信息,请参阅:读取偏好。

  • 确保您的分片键将负载均匀地分布在分片上。有关更多信息,请参阅:分片键

  • 对需要随分片数量扩展的工作负载使用定向操作

  • 除非使用读关注(read concern)"available" (这是与因果一致会话不关联时读取从节点的默认读关注(read concern)),否则从节点不再返回孤立数据。

    分片分片副本集的所有成员都维护数据数据块元数据,允许它们在不使用"available" 时过滤掉孤立的数据段。因此,未使用 "available"的非定向查询或广播查询可以在任何成员上安全地运行,并且不会返回孤立数据。

    "available" 读关注可能会自从节点返回孤立文档,因为它不会检查更新的数据块元数据。但是,如果孤立文档的返回对应用程序无关紧要,则 "available" 读关注可在各种读关注中提供尽可能低的读取延迟。

  • 在将大型数据集插入新的非散列分片集合时,预拆分并手动平衡数据块。预拆分和手动平衡使插入负载能够在分片之间分布,从而提高初始负载的性能。

  • 利用连接池化。大多数 MongoDB 驱动程序都支持连接池化。调整连接池大小以适合您的使用案例,从典型并发数据库请求数的 110-115% 开始。

  • 确保您的应用程序可以在副本集选举期间处理瞬时写入和读取错误。

  • 确保您的应用程序处理失败的请求,并在适用的情况下重试。驱动程序不会自动重试失败的请求。

  • 使用指数退避逻辑进行数据库请求重试。

  • 如果需要限制数据库操作的执行时间,读取时使用 cursor.maxTimeMS(),写入时使用 wtimeout