【问题标题】:What DBCollection WriteConcern suits for this operation什么 DBCollection WriteConcern 适合这个操作
【发布时间】:2013-08-08 18:04:58
【问题描述】:

我在我的应用程序中使用 MonogoDB。

我正在对数组列表中存在的所有符号执行大插入操作,如下所示

我担心虽然这个插入很大,它可能会阻塞另一个操作,无论如何我可以告诉 MongoDB 在后台执行这个插入操作(即异步)意味着不要让其他执行为此停止。

这样可以吗?

public void insert(ArrayList<QuoteReportBean> quotelist) 
    {
     BasicDBList totalrecords = new BasicDBList();
     for (QuoteReportBean reportbean: quotelist) {
     BasicDBObject dbrecord = new BasicDBObject();
     dbrecord.append("custid", reportbean.getCustomerId());
     dbrecord.append("symbol", reportbean.getUniqueSymbol());
     dbrecord.append("exch", reportbean.getExchange());
     totalrecords.add(dbrecord);
     }
     WriteResult result = coll.insert(totalrecords);
     logger.error(" - " + result.toString());   
    }

我的要求是这个操作应该完成,但同时这不应该阻塞其他操作。 我已经看到 WriteConcern 在这种情况下可以提高性能。

WriteConcern.NONE   No exceptions are raised, even for network issues.
WriteConcern.NORMAL   Write operations that use this write concern will return as soon as the message is written to the socket.
WriteConcern.UNACKNOWLEDGED Write operations that use this write concern will return as soon as the message is written to the socket.

收集自

http://api.mongodb.org/java/current/com/mongodb/WriteConcern.html

我打算使用WriteConcern.UNACKNOWLEDGED,这是最好的还是我需要处理任何问题?

或者有没有其他方法可以异步完成?

【问题讨论】:

  • 如果您正在使用多线程,那么您不必担心这一点。当一个线程正在等待任何 ack 时,系统资源(cpu)将被分配给下一个线程,即这个线程不会阻塞其他线程的插入。为了安全写入,您至少必须使用ACKNOWLEDGED
  • @AbhishekKumar,非常感谢。

标签: mongodb


【解决方案1】:

writeConcern 与您插入数据的方式无关,它与您如何获得有关插入结果的通知有关。从客户端的角度来看,您的脚本似乎运行得更快,但最终您会在 mongo 端获得堆积的数据,等待持久化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多