原博客地址:http://www.cnblogs.com/phpfans/p/4852808.html
MongoDB的写安全机制
写入安全(Write Concern)是一种由客户端设置的,用于控制写入安全级别的机制,通过使用写入安全机制可以提高数据的可靠性。
MongoDB提供四种写入级别,分别是:
- (Unacknowledged)非确认式写入
- (Acknowledged)确认式写入
- (Journaled)日志写入
- (Replica Acknowledged)复制集确认式写入
1. 非确认式写入
2. 确认式写入
3. journal日志写入
64位机器上,MongoDB 2.0以上版本默认情况下是开启journal
journal文件位于journal目录中,只能以追加方式添加数据,文件名以j._开头
数据库正常关闭时(例如:db.shutdownServer()来关闭数据库),数据库服务会清空journal目录下的所有文件
MongoDB数据库每隔100ms或30ms向journal文件中flush一次数据
journal日志和data数据在一个磁盘上时每隔100ms刷新一次,不在一个磁盘上时30ms刷新一次,建议把journal日志和data数据放在不同的磁盘上,提高数据的可靠性
4. 复制集确认式写入
5.写入安全级别的使用
W选项
0:非确认式写入
1:确认式写入
说明:这个级别下,对副本级只对主库做确认写入
2:副本级确认式写入
说明:这个级别下,副本级第一个slave写入成功后就响应给client
majority:复制级更多slave写入成功后,在响应给client
示例代码
//连接数据库 dbService = connect("localhost:27017"); //选择插入集合 db = dbService.getSiblingDB("jike"); //创建bluk对象用于批量插入 db.write_concern.drop(); //测试数据 var doc1 = { name:"xiaoli", age:20, address: { province:"GuangDong", city:"ShenZhen" } } print("======writeConcern的使用 - 非确认式写入======") var result = db.wirte_concern.insert(doc1,{writeConcern:{w:0}}) printjson(result) print("======writeConcern的使用 - 确认式写入======") var result = db.wirte_concern.insert(doc1,{writeConcern:{w:1}}) printjson(result) print("======writeConcern的使用 - 确认式写入 + journaled + wtimeout======") var result = db.wirte_concern.insert(doc1,{writeConcern:{w:1,j:true,wtimeout:5}}) printjson(result)