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)