這一週有事情,結尾用MONGODB 做爲結尾, 而本週開篇,仍是以MONGODB 做爲開始.
數據庫
MONGODB 的寫操做中包含一個特殊的功能,就是寫安全, 其餘數據庫在寫入數據後,若是你想確認你寫入的數據是否已經存在於數據庫中,一般開發的想法是在查詢一次. 實際上插入數據並確認的操做就須要兩個operations.
安全
MONGODB 自己帶有 W 屬性的操做,W 屬性的主要的意義是什麼,起源於那個版本. 在MONGODB 3.2.6 這個版本, W concern . W concern 這個功能主要解決的問題微信
1 保證單機,複製集合,分片 三種MONGODB 的數據庫形式中的數據寫入後的安全保證.性能
2 經過W concern的機制,讓數據的寫入達到某種級別的安全等級,並能夠控制多種兼容方式的安全數據寫入分級url
那麼咱們經過上面的一些解釋看看到底MONGODB 的 W concern 有怎樣的功能,幫助寫入數據達到必定的安全性和分級.
spa
首先咱們須要熟悉 w concern的初步的使用,
.net
w
日誌
j
blog
wtimeout
開發
這三個選項到底表明了什麼, w 表明了在一個複製集合中,寫入數據成功的回饋的條件, 當你有三個節點的MONGODB複製集合, 則 w 2 意味着,至少有兩個節點收到數據後,才能反饋寫入成功.
很多人對於MONGODB 有偏見,認爲NO SQL 數據庫寫入數據不穩定,容易丟失數據, 而且不安全,這是很是錯誤的觀念, MONGODB 在數據的安全性上有很是好的體驗.
舉例
我在插入一條數據的狀況下, 在插入的語句後面加入 (writeConcern:{w:2}) 這意味這,這條數據在插入的過程當中,除了主節點之外, 其中的一個從節點也講數據寫入了,這樣系統纔回饋你的數據插入了.
想一想這樣的設置在MYSQL 中是不大可能的, 一次插入數據會回饋你數據已經安全落入到複製集合中,這難道不是一個值得欣喜的事情.
事情遠遠沒有結束, 上面的方式 w:2 其實是數據寫入兩個節點耗費的性能後的回饋,這對於重要的數據是很是重要的,而w:0 則意味着.信息的寫入不會被回饋,那這樣數據插入的性能就會很高.
這裏小結一下,你在使用MONGODB 的複製集合的狀況下,對於重要的數據你可使用 w:2 或者更多來讓數據確認在複製集合的幾個位置上被"落袋爲安", 也能夠對一些不重要的數據,帶寫入量很大的數據,直接設置 w:0 讓數據寫入的"更快".
說完第一個w 那麼第二個j 是什麼意思
使用過MONGODB 的人對於journal log 不陌生,MONGODB 的數據也不是立刻寫入到數據文件,也是有咱們的日誌, 數據是先寫入到日誌中,而後在刷入到咱們的數據文件.
j 的意思是寫入到日誌後,系統才反饋你的數據被成功寫入到數據庫中.
這樣的好處是更加保證你的數據寫入必定是安全的,哪怕此時數據庫已經崩潰,但數據必定是在你的數據庫的日誌中有記錄的,丟失不了.
固然代價也是很明顯的,數據回饋寫入會比較慢,這與你日誌刷入磁盤的頻率和時間有關,因此通常對於極其重要的數據可使用這個選擇,不然能夠略過
最後wtimeout 意味着你的數據的寫入時,客戶端容忍的時間,若是你超過這個時間,客戶端就認爲你寫入失敗,而且回饋信息.
db.blogs.insert({name:"Austin",url:"https://cloud.tencent.com/developer/user/5669671"},{writeConcern:{w:2,j:true,wtimeout:1}})
上面的這句意味這若是你啓用了 J 特性,則這個寫入的語句會等待200毫秒,若是超過200毫秒,尚未回饋,則認爲寫入失敗. (默認日誌刷新是100毫秒)
上圖總結了上面文字的四種狀況, MONGODB 做爲NOSQL 的NO.1 的第一把交椅, 在數據安全方面是很是有保證的,而且對比一些比較流行的RDS數據庫,相關的數據的安全性保證也是不差,而且還不分仲伯, 因此錯誤的觀念要被糾正.
本文分享自微信公衆號 - AustinDatabases(AustinDatabases)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。