将Mongo 2.4.9与C#驱动程序1.8.3一起使用
使用以下示例:
WriteConcern concern = WriteConcern.Unacknowledged;
for(int i=0;i<100;i++){
if(i==99)concern=WriteConcern.Acknowledged;
collection.Update(Query.EQ("i",i),Update.Set("i2",i),concern);
}
// Can I assume that all writes in this loop have now been 'committed'?
我的目标是尽可能快地执行前99次更新,不做确认,然后在最后一次,请求确认,所以我知道发生了所有100次更新
上面的代码是否有意义或有效?如果没有,是否有更好的方法来实现这一目标?
如果不这样,我应该等待发布MongoDB 2.6和批量apis吗?
谢谢, 本
答案 0 :(得分:3)
我的目标是尽可能快地执行前99次更新,不做确认,然后在最后一次,请求确认,所以我知道发生了所有100次更新
这里存在一个逻辑缺陷:您只会知道上次Acknowledged
更新的成功,并且除了它们之外,不能对前99个Unacknowledged
更新做出太多推断没有引发明显的网络异常。
上面的代码是否有意义或有效?如果没有,是否有更好的方法来实现这一目标?
在MongoDB 2.4及更早版本中,如果您想要Acknowledged
更新,则必须单独发送。
如果不这样,我应该等待发布MongoDB 2.6和批量apis吗?
对于您的用例,新的批量写入API肯定会更合适。您可以使用C#1.9驱动程序和MongoDB 2.6的候选版本试用BulkWrite API。
仅供参考,如果您想进行Bulk Inserts(而不是批量更新),MongoDB 2.4及更早版本已经支持这些。