MongoDB提供了一个配置参数:write concern 来让用户自己衡量性能和写安全。分布式数据库中这样的参数比较常见,记得Cassandra中也有一个类似参数,不过那个好像是要写入几个节点返回成功。其实道理都一样分布式的集群环境考虑到性能因素不能确保每个成员都写入后在返回成功,所以只能交给用户根据实际场景去衡。
Mongodb提供了以下几个可选设置:Errors Ignored(不推荐),Unacknowledged,Acknowledged,Journaled。列出的级别分别是安全性一次增强的。解释一下每一个选项的特点。
Errors Ignored [-1]
一个比较不靠谱级别,发出谢写令后就不再理会,即使现在有网络问题也不会发出异常。其实这个官方已经明确给出了警告,闲着没事别用这个。
Unacknowledged [0]
这个级别也属于比较低的级别,以前这个级别是驱动配置的默认级别,不过后来调整成Acknowledged级别。在这个级别下,这个驱动会根据当前系统的网络配置进行网络问题的检测,不等待Mongd的返回。代码测试:本地网络问题是否有异常?本地网络无问题是远程server问题是否异常?
Acknowledged [1]
这个级别算是中等级别的配置,这个级别能够拿到mongod的返回信息:dupkey Error,以及一些其他的问题。现在这个级别是驱动的默认级别,估计是10gen公司发现好多人评价Mongodb不靠谱后改的。一般系统这个级别也就够用了。由于默认级别是Acknowledged,内部用getLastError方法检查是否写入成功的时候是也不用设置任何参数,对与Replset来说可以在配置中进行getLastErrorDefaults的配置,如果没有的话默认则是Master收到就ok。
Journaled [1, journal=true ]
等到操作记录到Journal Log中才返回操作结果,也就是下一次JournaledLog提交。这种情况可以容忍服务器突然宕机,断电等意外的恢复。出去上边的配置还要在启动mongod的时候加上journaling 参数确保可以使用。commitlog提交间隔时间是可以配置的,单磁盘设备(physical volume, RAID device, or LVM volume)每100ms提交一次,和数据文件刷出相同频率,日志和数据分开磁盘设备的30ms提交一次。在插入数据是如果使用{j:true}则会缩短到已配置的默认设置1/3的时间。
Replica Acknowledged [>1 or majority]
在副本集中如果w设置为2的话则至少已经吸入到一个secondary中,我猜测写入secondary这个级别是Acknowledged级别,majority是多个secondary已经写入。如果手贱设置w参数大于replset中需要复制的secondarys的话,操作就一直等待直到达到已写入数据的服务器数量符合要求,也可以设置timeout值来指明最长等待时间。{ getLastError: 1, w: 2, wtimeout:5000 }
相关推荐
MongoDB Community Server(mongodb-src-r5.0.4.tar.gz)源代码 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非...
MongoDB Community Server(mongodb-src-r5.0.4.zip)源代码 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系...
其中,MongoTemplate的配置涉及了写结果检查策略、Write Concern以及Write Concern解析器等高级特性。 通过这些内容,可以看出SpringData MongoDB API文档是一个功能全面且内容丰富的资源,它不仅包括了API的使用,...
本文档对 MongoDB 应用优化与脱坑实践进行了深入的探讨,涵盖了 MongoDB 应用的优化方法、DBA 角色、实例增长趋势图、部署架构、写策略 Write Concern、mongos 的chunk、shard key、ZONES 分片、mongos 使用限制等多...
- **设置写入模式**:为了保证数据的安全性和一致性,可以通过设置`write_concern`参数来控制写入行为。 ```python from pymongo.write_concern import WriteConcern collection = db['collection_name'].with_...
此外,还介绍了MongoTemplate的创建、使用策略和写关注(Write Concern)的概念。 具体到 "Saving, Updating, and Removing Documents" 的部分,文档解释了如何在映射层处理文档中的_id字段,提供了保存和插入文档...
例如,改进的write concern(写关注)机制可以确保数据的持久化。 8. **聚合框架**: MongoDB的聚合框架允许用户在服务器端进行复杂的数据处理,包括统计分析、数据转换等。3.6.3版本可能会增强聚合管道的性能和灵活...
9. **Write Concern和Read Concern**:Write Concern定义了写操作的确认级别,确保数据在写入时的可靠性;Read Concern则控制了读取数据的一致性级别,允许在性能和一致性之间做出权衡。 10. **MongoDB驱动**:...
6. **Write Concern**:MongoDB提供了多种Write Concern级别,确保写入操作的持久性和一致性,根据应用需求可以选择不同的确认级别。 7. **监控和诊断工具**:MongoDB提供了丰富的监控和诊断工具,如`mongostat`、`...
- 事务中的操作使用事务级别的读关注(read concern)、写关注(write concern)和读取偏好(read preference)。 - 自MongoDB 4.4版本开始,可以在事务中隐式或显式创建集合,但需要使用针对4.4更新的驱动程序。 `...
**写入关注(Write Concern)** 应用程序也可以使用写入关注来控制写入操作的行为。特别是对于部署了复制集的应用程序,写入关注语义允许客户端指定MongoDB报告写入操作成功时提供的保证。 **聚合(Aggregation)**...
用户可以通过调整写关注(Write Concern)设置,如{w:0}(无确认)、{w:1}(主节点确认)或{w:2}(多数节点确认),来决定数据写入的确认级别,以提高系统的可靠性和性能。 在应用场景方面,MongoDB特别适合高写入负载的...
8. **写入一致性**:MongoDB提供多种写入一致性选项,如强一致性的majority write concern和最终一致性的replicaAcknowledged write concern,可以根据业务需求选择适合的策略。 9. **TTL索引**:MongoDB的TTL...
写关注点(write concern)是MongoDB用于指定写操作后的确认级别。 在查询文档方面,教程讲述了如何使用`findOne()`方法获取集合中的第一个文档、添加多个文档、统计集合中文档数量、使用游标遍历获取所有文档、...
- **同步策略**: 可以通过配置写入策略(write concern)来控制journal和oplog之间的同步。 **1.4.2 MongoDB Oplog保证顺序的方法** - **单线程写入**: oplog由主节点单线程写入,确保了操作的日志顺序。 - **同步...
此外,eBay 还利用 MongoDB 的 majority write concern 功能来确保跨数据中心的写入持久化。这意味着写操作只有在大多数副本集节点确认后才被视为成功,增强了数据一致性。这对于确保在分布式环境中的数据完整性至关...
4. **读写权限控制**:通过读取偏好(Read Concern)和写入确认(Write Concern)增强了数据一致性和可用性。 5. **自动备份和恢复**:MongoDB 3.6 提供了更好的备份工具和策略,简化了灾难恢复流程。 在部署和使用...
- **Write Concern**:确保写入操作的持久性和一致性。 - **Oplog Replication**:用于复制集的oplog日志,保证数据在多个节点间的同步。 - **Sharding**:通过自动分片功能实现水平扩展,提高处理大量数据的能力。 ...