對于應(yīng)用程序客戶端角度來看,無論MongoDB實(shí)例是以單個服務(wù)還是副本集運(yùn)行都是透明的。但是MongoDB為副本集提供了額外的讀寫語義。
NOTE: 分片同樣是副本集的分片集群提供了關(guān)于讀寫操作相同的語義。
寫關(guān)注描述了對MongoDB寫操作的通知等級。
讀偏好定義了客戶段驅(qū)動應(yīng)該選擇哪個(副本集成員)進(jìn)行讀操作。
描述了讀偏好的機(jī)制。
對于副本集來說,默認(rèn)的寫關(guān)注只要求來自主節(jié)點(diǎn)的通知。你可以覆蓋默認(rèn)的寫關(guān)注,比如確認(rèn)副本集特定數(shù)量的通知。

為了覆蓋默認(rèn)的寫關(guān)注,可以為每個寫操作定義寫關(guān)注。比如,下面的方法包含了一個指定寫入傳播到主節(jié)點(diǎn)和至少一個從節(jié)點(diǎn)后返回,或超時5秒的方法。
db.PRoducts.insert( { item: "envelopes", qty : 100, type: "Clasp" }, { writeConcern: { w: 2, wtimeout: 5000 } })你可以為寫關(guān)注包含一個超時閾值。這防止了如果寫關(guān)注不可達(dá)時,寫操作無限的阻塞。比如如果寫關(guān)注需要副本集中4個成員的確認(rèn),但是副本集只有3個成員,這個操作將會阻塞到這些(4個)成員都上線。
你可以通過在副本集中設(shè)置settings.getLastErrorDefaults改變默認(rèn)的寫關(guān)注。下面一系列命令創(chuàng)建了一個配置,在返回前等待大多數(shù)投票成員完成寫操作:
cfg = rs.conf()cfg.settings = {}cfg.settings.getLastErrorDefaults = { w: "majority", wtimeout: 5000 }rs.reconfig(cfg)如果你以特定的寫關(guān)注發(fā)起了寫請求,這個寫操作會使用自己的寫關(guān)注而不是默認(rèn)的。
你可以為副本集成員打上tag并使用resulting tag集合還創(chuàng)建自定義寫關(guān)注。查看配置副本集tag集合來使用tag集合配置自定義寫關(guān)注。
新聞熱點(diǎn)
疑難解答