1

将 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 和批量 API 的发布吗?

谢谢,本

4

1 回答 1

3

我的目标是尽可能快地执行前 99 次更新,无需确认,然后在最后一次请求确认,这样我就知道所有 100 次更新都发生了

这里有一个逻辑缺陷:你只会知道最后一次Acknowledged更新的成功与否,而不能对前 99次Unacknowledged更新做出太多推断,除非它们不会引发明显的网络异常。

上面的代码有意义还是有效?如果没有,是否有更好的方法来实现这一目标?

在 MongoDB 2.4 及更早版本中,如果您需要Acknowledged更新,则必须单独发送它们。

如果做不到这一点,我应该等待 MongoDB 2.6 和批量 API 的发布吗?

对于您的用例,新的批量写入 API 肯定会更合适。您可以使用 C# 1.9 驱动程序和 MongoDB 2.6 的候选版本试用 BulkWrite API。

仅供参考,如果您想做批量插入(而不是批量更新),MongoDB 2.4 及更早版本已经支持这些。

于 2014-03-18T23:37:29.117 回答