(轉)mongodb寫入安全級別

原博客地址: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)
複製代碼

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章