Я пытаюсь написать много данных в MongoDB в цикле Java. Я получаю ошибки, основанные на количестве открытых подключений.
Моя теория заключается в том, что поскольку 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 я получаю эту ошибку:
ПРЕДУПРЕЖДЕНИЕ: Исключение, определяющее размер maxBSON с использованием 0 java.net.SocketException: Соединение reset
И mongodb дает эту ошибку:
Вт Окт 25 22:31:39 [initandlisten] connection отказано, потому что слишком много открытых соединений: 204 из 204
Каким будет самый элегантный способ справиться с этой проблемой?