文档菜单
文档首页
/
MongoDB 手册
/

开发清单

在本页

  • 数据持久性
  • 模式设计
  • 复制
  • 分片
  • 驱动程序

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

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

  • 确保所有实例使用 日志记录。

MongoDB中的数据具有动态模式集合不强制执行文档结构。这有助于迭代开发和多态性。尽管如此,集合通常包含具有高度同构结构的文档。有关更多信息,请参阅数据建模。

  • 确定您需要的集合集合和所需的索引来支持您的查询。除了_id索引之外,您必须显式创建所有索引:MongoDB不会自动创建除_id以外的任何索引。

  • 确保您的模式设计支持您的部署类型:如果您计划使用分片集群进行水平扩展,请设计您的模式以包含强大的分片键。虽然您可以在以后更改您的分片键,但仔细考虑您的分片键选择对于避免可扩展性和性能问题非常重要。

  • 确保您的模式设计不依赖于无界增长长度的索引数组。通常,当这样的索引数组少于1000个元素时,可以获得最佳性能。

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

  • 使用奇数个投票成员以确保选举成功。您可以有最多7个投票成员。如果您有偶数个投票成员,并且成本等限制因素阻止您添加另一个成员作为投票成员,您可以通过添加一个仲裁员来确保奇数个投票。有关使用仲裁员为3个成员副本集(P-S-A)的附加考虑事项,请参阅副本集仲裁员。

  • 通过使用监控工具并指定适当的写入关注,确保您的次要副本保持最新。

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

  • 确保您的分片键在分片上均匀分配负载。更多信息请参阅:分片键

  • 使用目标操作来应对需要与分片数量一起扩展的工作负载。

  • 除非使用读关注"available"(这是在不关联因果一致性会话的情况下读取副本的默认读关注),否则从副本不再返回孤立数据。
    分片副本集的所有成员都维护数据块元数据,允许它们在不使用"available"时过滤孤立数据。因此,不使用"available"的目标查询或广播查询可以在任何成员上安全运行,而不会返回孤立数据。
    "available"读关注可能会从副本成员返回孤立文档,因为它不会检查更新的数据块元数据。然而,如果孤立文档的返回对应用程序来说无关紧要,则"available"读关注在所有读关注中提供了最低的延迟读取。
  • 在将大数据集插入新的非散列分片集合时,先预分割并手动平衡数据块。预分割和手动平衡可以使插入负载在分片之间分配,从而提高初始负载的性能。

  • 利用连接池。大多数MongoDB驱动程序支持连接池。根据您的使用情况调整连接池大小,初始大小从典型并发数据库请求数量的110-115%开始。

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

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

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

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

返回

管理