MongoDB Write Concern整理
MongoDB提供了一個配置引數:write concern 來讓使用者自己衡量效能和寫安全。分散式資料庫中這樣的引數比較常見,記得Cassandra中也有一個類似引數,不過那個好像是要寫入幾個節點返回成功。其實道理都一樣分散式的叢集環境考慮到效能因素不能確保每個成員都寫入後在返回成功,所以只能交給使用者根據實際場景去衡。
Mongodb提供了以下幾個可選設定:Errors Ignored(不推薦),Unacknowledged,Acknowledged,Journaled。列出的級別分別是安全性一次增強的。解釋一下每一個選項的特點。
Errors Ignored [-1]
一個比較不靠譜級別,發出謝寫令後就不再理會,即使現在有網路問題也不會發出異常。其實這個官方已經明確給出了警告,閒著沒事別用這個。
Unacknowledged [0]
這個級別也屬於比較低的級別,以前這個級別是驅動配置的預設級別,不過後來調整成Acknowledged級別。在這個級別下,這個驅動會根據當前系統的網路配置進行網路問題的檢測,不等待Mongd的返回。程式碼測試:本地網路問題是否有異常?本地網路無問題是遠端server問題是否異常?
Acknowledged [1]
這個級別算是中等級別的配置,這個級別能夠拿到mongod的返回資訊:dupkey Error,以及一些其他的問題。現在這個級別是驅動的預設級別,估計是10gen公司發現好多人評價Mongodb不靠譜後改的。一般系統這個級別也就夠用了。由於預設級別是Acknowledged,內部用getLastError方法檢查是否寫入成功的時候是也不用設定任何引數,對與Replset來說可以在配置中進行getLastErrorDefaults的配置,如果沒有的話預設則是Master收到就ok。
Journaled [1, journal=true ]
等到操作記錄到Journal Log中才返回操作結果,也就是下一次JournaledLog提交。這種情況可以容忍伺服器突然當機,斷電等意外的恢復。出去上邊的配置還要在啟動mongod的時候加上journaling 引數確保可以使用。commitlog提交間隔時間是可以配置的,單磁碟裝置(physical volume, RAID device, or LVM volume)每100ms提交一次,和資料檔案刷出相同頻率,日誌和資料分開磁碟裝置的30ms提交一次。在插入資料是如果使用{j:true}則會縮短到已配置的預設設定1/3的時間。
Replica Acknowledged [>1 or majority]
在副本集中如果w設定為2的話則至少已經吸入到一個secondary中,我猜測寫入secondary這個級別是Acknowledged級別,majority是多個secondary已經寫入。如果手賤設定w引數大於replset中需要複製的secondarys的話,操作就一直等待直到達到已寫入資料的伺服器數量符合要求,也可以設定timeout值來指明最長等待時間。{ getLastError: 1, w: 2, wtimeout:5000 }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-1976423/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MongoDB 寫安全(Write Concern)MongoDB
- 用 MongoTemplate 操作 documentDB 與 用 Spring Data MongoDB 操作 documentDB 有什麼不同,write concern,transactionSpringMongoDB
- AWS DocumentDB 如何設定為預設 write concern
- mongodb批量操作, bulk_write,MongoDB
- Mongodb write寫(增、刪、改)模組原始碼實現MongoDB原始碼
- MongoDB:Read and write access to data and configuration is unrestricted.MongoDBREST
- mongodb核心原始碼實現及效能優化系列:Mongodb write寫(增、刪、改)模組原始碼實現MongoDB原始碼優化
- mongodb基礎整理篇————常規操作[二]MongoDB
- MongoDB 重新整理幾次就報錯MongoDB
- 關於Cache的write-through & write-back
- MySQL double writeMySql
- hio_write
- [Javascript] Write .call()JavaScript
- HDFS read and write
- document.write()方法
- db file parallel writeParallel
- commit_writeMIT
- storage儲存的cache快取相關機制write-though和write-back(write-caching)快取
- Oracle db file parallel write 和 log file parallel write 等待事件 說明OracleParallel事件
- How boltdb Write its Data?
- write&read&open
- Copy-On-Write技術
- 關於document.write
- ImageIO.write錯誤
- Write after the error occurs........Error
- MySQL double write存在意義MySql
- 【MySQL】八、double write 淺析.MySql
- 深入淺出Netty:writeNetty
- write_through 寫效能下降
- mysql之 double write 淺析MySql
- nodejs read/write fileNodeJS
- Write a simple HTTP server in PythonHTTPServerPython
- ORACLE等待事件:direct path writeOracle事件
- dbms_lob.write 測試
- control file parallel writeParallel
- commit_write引數MIT
- write picture to oracle using javaOracleJava
- NSSCTF Web 題解 Write upWeb