开发清单
以下清单,结合自管理部署的操作清单,提供了一些建议,以帮助您避免在生产 MongoDB 部署中出现问题。
数据持久性
模式设计
MongoDB中的数据具有动态模式。 集合不强制执行文档结构。这有助于迭代开发和多态性。尽管如此,集合通常包含具有高度同构结构的文档。有关更多信息,请参阅数据建模。
复制
分片
确保您的分片键在分片上均匀分配负载。更多信息请参阅:分片键。
使用目标操作来应对需要与分片数量一起扩展的工作负载。
- 除非使用读关注
"available"
(这是在不关联因果一致性会话的情况下读取副本的默认读关注),否则从副本不再返回孤立数据。分片副本集的所有成员都维护数据块元数据,允许它们在不使用"available"
时过滤孤立数据。因此,不使用"available"
的目标查询或广播查询可以在任何成员上安全运行,而不会返回孤立数据。"available"
读关注可能会从副本成员返回孤立文档,因为它不会检查更新的数据块元数据。然而,如果孤立文档的返回对应用程序来说无关紧要,则"available"
读关注在所有读关注中提供了最低的延迟读取。 在将大数据集插入新的非散列分片集合时,先预分割并手动平衡数据块。预分割和手动平衡可以使插入负载在分片之间分配,从而提高初始负载的性能。
驱动程序
利用连接池。大多数MongoDB驱动程序支持连接池。根据您的使用情况调整连接池大小,初始大小从典型并发数据库请求数量的110-115%开始。
确保您的应用程序在副本集选举期间处理瞬态写和读错误。
确保您的应用程序处理失败的请求,并在适用的情况下重试它们。驱动程序不会自动重试失败的请求。
对数据库请求重试使用指数退避逻辑。
如果需要限制数据库操作执行时间,请使用
cursor.maxTimeMS()
进行读取和wtimeout
进行写入。