- MongoDB官方文档中文版
- MongoDB中文手册说明
- MongoDB简介
- 安装 MongoDB
- The mongo Shell
- MongoDB CRUD 操作
- 聚合
- 数据模型
- 事务
- 索引
- 安全
- 安全检查列表
- 启用访问控制
- 身份验证
- 基于角色的访问控制
- TLS / SSL(传输加密)
- 静态加密
- 客户端字段级加密
- 审计
- 网络和配置强化
- 实现字段级别修订
- 安全参考
- 附录
- 变更流
- 复制
- 分片
- 分片键
- 哈希分片
- 范围分片
- 区
- 管理分片区
- 按位置细分数据
- 用于更改SLA或SLO的分层硬件
- 按应用或客户细分数据
- 仅插入工作负载的分布式本地写入
- 管理分片区
- 使用块进行数据分区
- 在分片集群中拆分数据块
- 管理
- 存储
- 存储引擎
- 日志记录
- 管理日志记录
- GridFS
- FAQ:MongoDB 存储
- 存储引擎
- 参考
- 运算符
- 查询与映射运算符
- 更新运算符
- 聚合管道阶段
- 聚合管道操作符
- $abs (aggregation)
- $acos (aggregation)
- $acosh (aggregation)
- $add (aggregation)
- $addToSet (aggregation)
- $allElementsTrue (aggregation)
- $and (aggregation)
- $anyElementTrue (aggregation)
- $arrayElemAt (aggregation)
- $arrayToObject (aggregation)
- $asin (aggregation)
- $asinh (aggregation)
- $atan (aggregation)
- $atan2 (aggregation)
- $atanh (aggregation)
- $avg (aggregation)
- $ceil (aggregation)
- $cmp (aggregation)
- $concat (aggregation)
- $concatArrays (aggregation)
- $cond (aggregation)
- $convert (aggregation)
- $cos (aggregation)
- $dateFromParts (aggregation)
- $dateToParts (aggregation)
- $dateFromString (aggregation)
- $literal (aggregation)
- 查询修饰符
- 数据库命令
- 聚合命令
- 地理空间命令
- 查询和写操作命令
- 查询计划缓存命令
- 认证命令
- 用户管理命令
- 角色管理命令
- 复制命令
- 分片命令
- 会话命令
- 管理命令
- 诊断命令
- 免费监控命令
- 系统事件审计命令
- mongo Shell 方法
- 集合方法
- db.collection.aggregate()
- db.collection.bulkWrite()
- db.collection.copyTo()
- db.collection.count()
- db.collection.countDocuments()
- db.collection.estimatedDocumentCount()
- db.collection.createIndex()
- db.collection.createIndexes()
- db.collection.dataSize()
- db.collection.deleteOne()
- db.collection.deleteMany()
- db.collection.distinct()
- db.collection.drop()
- db.collection.dropIndex()
- db.collection.dropIndexes()
- db.collection.ensureIndex()
- db.collection.explain()
- db.collection.find()
- db.collection.findAndModify()
- db.collection.findOne()
- db.collection.findOneAndDelete()
- db.collection.findOneAndReplace()
- db.collection.findOneAndUpdate()
- db.collection.getIndexes()
- db.collection.getShardDistribution()
- db.collection.getShardVersion()
- db.collection.insert()
- db.collection.insertOne()
- db.collection.insertMany()
- db.collection.isCapped()
- db.collection.latencyStats()
- db.collection.mapReduce()
- db.collection.reIndex()
- db.collection.remove()
- db.collection.renameCollection()
- db.collection.replaceOne()
- db.collection.save()
- db.collection.stats()
- db.collection.storageSize()
- db.collection.totalIndexSize()
- db.collection.totalSize()
- db.collection.update()
- db.collection.updateOne()
- db.collection.updateMany()
- db.collection.watch()
- db.collection.validate()
- 词汇表
- 默认的MongoDB端口
- 默认的MongoDB读/写关注
- 服务器会话
- MongoDB驱动
- FAQ
- 联系我们
- 更多资料
- [快学Mongo]
- [Mongo问题讨论区]
- [Mongo 驱动使用手册]
- 本书使用 GitBook 发布
开发检查列表
开发检查表
下面的清单以及操作清单列表提供了一些建议,帮助我们在生产环境下,避免MongoDB部署出现中的问题。
数据持久性
架构设计
MongoDB中的数据有一个动态设计。集合强制执行文档结构。这有助于迭代开发和多态性。然而,集合通常保存具有高度同质结构的文档。 有关详细信息,请参阅数据建模概念。
- 确定支持查询所需的集合集和所需的索引。除了
_id
索引之外,您必须显式地创建所有索引:MongoDB不会自动创建除_id
之外的任何索引。 - 确保架构设计支持您的部署类型:如果您计划使用分片集群进行水平扩展,请设计您的架构以包含一个强健的片键。片键通过确定MongoDB如何划分数据来影响读写性能。请参见:片键对集群操作的影响以获取有关片键应具有哪些质量的信息。一旦设置了片键,就不能更改它。
- 请确保您的架构设计不依赖长度不受限制的索引数组。通常,当这种索引数组的元素少于1000个时,可以获得最佳性能。
- 设计架构时请考虑文档大小限制。BSON文档大小限制为每个文档16MB。如果需要更大的文档,请使用GridFS。
复制
- 使用奇数个有投票权的成员来确保选举顺利进行。最多可以有7个有投票权的成员。如果您有偶数个投票成员,并且限制条件(如成本)禁止添加另一个辅助成员作为投票成员,则可以添加仲裁节点以确保票数为奇数。有关对3成员副本集(P-S-a)使用仲裁节点时的其他注意事项,请参阅副本集仲裁节点。
注意
对于以下MongoDB版本,对于具有仲裁器的副本集,与pv0
(MongoDB 4.0+中不再支持)相比, pv1
增加了 w:1
回滚的可能性:
- MongoDB 3.4.1
- MongoDB 3.4.1
- MongoDB 3.4.0
- MongoDB 3.4.0
- MongoDB 3.2.11 or earlier
- MongoDB 3.2.11 或者更早的版本
参见副本集协议版本。
- 通过使用监视工具 和指定适当的写入机制,,确保您的辅助文件保持最新。
- 不要使用辅助读取来扩展总体读吞吐量。请参阅:是否可以使用更多副本节点进行扩展,以了解读取扩展的概述。有关辅助读取的信息,请参阅:读取偏好 。
分片
确保片键将负载均匀地分配到分片上。请参见:片键以获取更多信息。
对需要根据切片数量进行扩展的工作负载使用目标操作。
对于MongoDB 3.6和更高版本,辅助设备不再返回孤立数据,除非使用可用的读策略(这是与因果一致会话不关联时针对辅助设备读取的默认读取策略)。
从 MongoDB 3.6 开始,分片副本集的所有成员都维护块元数据,允许它们在不使用“可用”时过滤出孤立的数据。因此,不使用“可用”的非目标或广播查询可以安全地在任何成员上运行,并且不会返回孤立的数据。
"可用"的读取策略可以从辅助成员返回孤立文档,因为它不检查更新的块元数据。但是如果孤立文档的返回对于应用程序来说无关紧要,那么"可用"的读取策略提供了各种读取关注点中可能的最低延迟读取。
- 在将大数据集插入新的非哈希分片集合时需要预分割并手动平衡块。预分割和手动平衡使插入负载能够在分片之间分布,从而提高初始负载的性能。
驱动
- 利用连接池。大多数MongoDB驱动程序支持连接池。调整连接池大小以适合您的用例,从典型并发数据库请求数的110-115%开始。
- 请确保您的应用程序在副本集选择期间处理短暂的写入和读取错误。
- 请确保应用程序处理失败的请求,并在适用的情况下重试。驱动程序不会自动重试失败的请求。
- 对数据库请求重试使用指数退避逻辑。
- 如果需要限制数据库操作的执行时间。使用
cursor.maxTimeMS()
读取和 wtimeout 写入。
原文链接:https://docs.mongodb.com/v4.2/administration/production-checklist-development/
译者:孔令升
校对:徐扬
Copyright © 上海锦木信息技术有限公司 all right reserved,由 MongoDB汉化小组 提供技术支持文件修订时间: 2020-10-11 20:53:05