天天看點

mongodb-4.4.10版本的存儲引擎

mongo官方存儲引擎說明位址: Configuration File Options — MongoDB Manual   mongodb有兩種存儲引擎:wiredTiger、inMemory,後者在4.0版本中已經廢棄。

wiredTiger比inMemory多了journal buffer機制,也就是每次存儲資料到緩存時,同時将資料存儲到journal buffer,并且每100ms重新整理日志到journal檔案。這樣當“每60s或容量達到2G後送出一次到磁盤檔案“時,大大減少資料丢失的情況。

Journaling

類似于關系資料庫中的事務日志。Journaling能夠使MongoDB資料庫由于意外故障後快速恢複。MongoDB2.4版本後預設開啟了Journaling日志功能,mongod執行個體每次啟動時都會檢查journal日志檔案看是否需要恢複。由于送出journal日志會産生寫入阻塞,是以它對寫入的操作有性能影響,但對于讀沒有影響。在生産環境中開啟Journaling是很有必要的。

寫政策配置:{ w: <value>, j: <boolean>, wtimeout: <number> }

w:   資料寫入到number個節點才向用用戶端确認

        {w: 0} 對用戶端的寫入不需要發送任何确認,适用于性能要求高,但不關注正确性的場景

        {w: 1} 預設的writeConcern,資料寫入到Primary就向用戶端發送确認

        {w: “majority”} 資料寫入到副本集大多數成員後向用戶端發送确認,适用于對資料安全性要求比較高的場景,該選項會降低寫入性能

j:   寫入操作的journal持久化後才向用戶端确認

          預設為{j: false},如果要求寫入持久化了才向用戶端确認,則指定該選項為true

wtimeout: 寫入逾時時間,僅w的值大于1時有效。

當指定{w: }時,資料需要成功寫入number個節點才算成功,如果寫入過程中有節點故障,可能導緻這個條件一直不能滿足,進而一直不能向用戶端發送确認結果,針對這種情況,用戶端可設定wtimeout選項來指定逾時時間,當寫入過程持續超過該時間仍未結束,則認為寫入失敗。

java配置類及參數--com.mongodb.WriteConcern

UNACKNOWLEDGED:不等待伺服器傳回或确認,僅可以抛出網絡異常;

ACKNOWLEDGED:預設配置,等待伺服器傳回結果;

JOURNALED:等待伺服器完成journal持久化之後傳回;

W1 :等待叢集中一台伺服器傳回結果;

W2 :等待叢集中兩台伺服器傳回結果;

W3 :等待叢集中三台伺服器傳回結果;

MAJORITY:等待叢集中多數伺服器傳回結果;

end.

繼續閱讀