0

我在我的应用程序中使用 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,这是最好的还是我需要处理任何问题?

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

4

1 回答 1

0

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

于 2013-12-18T05:41:05.840 回答