【问题标题】:Acknowledge a 'batch' of writes with MongoDB使用 MongoDB 确认“批量”写入
【发布时间】:2014-03-18 23:10:45
【问题描述】:

将 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 的发布吗?

谢谢, 本

【问题讨论】:

    标签: c# mongodb mongodb-update nosql


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 2019-04-17
      • 1970-01-01
      • 2016-09-19
      • 2013-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多