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)