承认批量'用MongoDB写的

时间:2014-03-18 23:10:46

标签: c# mongodb mongodb-update nosql

将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吗?

谢谢, 本

1 个答案:

答案 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及更早版本已经支持这些。