
从应用程序连接副本集
|
219
{ "acknowledged" : true, "insertedId" : 10 }
但在这个写操作被复制到副本集的大多数成员之前,服务器端不会发出响应。只有这样,
应用程序才会收到这个写操作成功的确认。如果在指定的超时时间之内没有写入成功,则
服务器端将回复一条错误消息:
WriteConcernError({
"code" : 64,
"errInfo" : {
"wtimeout" : true
},
"errmsg" : "waiting for replication timed out"
})
"majority"
写关注以及副本集选举协议确保了在主节点的选举中,只有那些拥有经过确认
的写操作的从节点才能被选为主节点。通过这种方式,可以保证不会发生回滚。还可以对
超时选项进行调节,以便在应用程序层检测并标记任何长时间运行的写操作。
"w"
的其他选项
"majority"
并不是唯一的
writeConcern
选项。
MongoDB
还允许将
"w"
指定为任意的数字,
如下所示:
db.products.insertOne(
{ "_id": 10, "item": "envelopes", "qty": 100, type: "Self-Sealing" },
{ writeConcern: { "w" : 2, "wtimeout" : 100 } }
);
这个命令会一直等待,直到写操作被复制到两个成员(主节点和一个从节点)中。
注意,
"w"
的值包含了主节点 ...