MongoDB的写安全机制数据库
写入安全(Write Concern)是一种由客户端设置的,用于控制写入安全级别的机制,经过使用写入安全机制能够提升数据的可靠性。json
MongoDB提供四种写入级别,分别是:安全
1. 非确认式写入测试
2. 确认式写入spa
3. journal日志写入日志
64位机器上,MongoDB 2.0以上版本默认状况下是开启journalcode
journal文件位于journal目录中,只能以追加方式添加数据,文件名以j._开头对象
数据库正常关闭时(例如:db.shutdownServer()来关闭数据库),数据库服务会清空journal目录下的全部文件blog
MongoDB数据库每隔100ms或30ms向journal文件中flush一次数据ci
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)