Java ループで大量のデータを MongoDB に書き込もうとしています。開いている接続の数に基づいてエラーが発生しています。
私の理論では、MongoDB はトランザクションに対応していないため、多数の接続を同時に開くことができるというものです。ただし、Java コードは非常に高速にループすることもできます。一定の時間が経過すると、ループの反復回数が利用可能な接続の数を追い越し始め、Mongo は壁にぶつかります。
私のコードは次のようになります。しないことをお勧めしm.close()
ますが、エラーがさらに速くなります。
public static void upsert(){
Mongo m = null;
DB db = null;
try {
m = new Mongo("localhost");
db = m.getDB("sempedia"); } catch (UnknownHostException e1) { e1.printStackTrace(); } catch (MongoException e1) { e1.printStackTrace(); }
// create documents
// I am doing an upsert - hence the doc, doc
DBCollection triples;
try {
triples = db.getCollection("triples");
triples.update(doc,doc,true,false);
} catch (MongoException e) { e.printStackTrace(); }
m.close();
}
私のJavaコンソールでは、次のエラーが表示されます:
警告: java.net.SocketException を使用して maxBSON サイズを決定する例外: 接続のリセット
そしてmongodbはこのエラーを出します:
Tue Oct 25 22:31:39 [initandlisten] 開いている接続が多すぎるため、接続が拒否されました: 204/204
この問題に対処する最もエレガントな方法は何でしょうか?