Мы используем MongoDb
для сохранения и извлечения данных.
Все вызовы, которые помещают данные в коллекции, работают нормально и через общий метод.
Все вызовы, которые извлекают данные из коллекций, иногда работают нормально и выполняются с помощью общего метода.
Но иногда, только для одной из коллекции, вызовы застревают навсегда, потребляя ресурсы ЦП. Я должен вручную убивать потоки, иначе он потребляет весь мой процессор.
Соединение с Монго
MongoClient mongo = new MongoClient(hostName , Integer.valueOf(port));
DB mongoDb = mongo.getDB(dbName);
Код для загрузки
DBCollection collection = mongoDb.getCollection(collectionName);
DBObject dbObject = new BasicDBObject("_id" , key);
DBCursor cursor = collection.find(dbObject);
Хотя я выяснил коллекцию, для которой это вызывает проблемы, но как я могу улучшить это, поскольку это происходит для этой конкретной коллекции и иногда.
ИЗМЕНИТЬ
Код для сохранения
DBCollection collection = mongoDb.getCollection(collectionName);
DBObject query = new BasicDBObject("_id" , key);
DBObject update = new BasicDBObject();
update.put("$set" , JSON.parse(value));
collection.update(query , update , true , false);
Массовая запись/коллекция
DB mongoDb = controllerFactory.getMongoDB();
DBCollection collection = mongoDb.getCollection(collectionName);
BulkWriteOperation bulkWriteOperation = collection.initializeUnorderedBulkOperation();
Map<String, Object> dataMap = (Map<String, Object>) JSON.parse(value);
for (Entry<String, Object> entrySet : dataMap.entrySet()) {
BulkWriteRequestBuilder bulkWriteRequestBuilder = bulkWriteOperation.find(new BasicDBObject("_id" ,
entrySet.getKey()));
DBObject update = new BasicDBObject();
update.put("$set" , entrySet.getValue());
bulkWriteRequestBuilder.upsert().update(update);
}
Как я могу установить тайм-аут для вызовов выборки ..??
finally
, который закрывает клиент при подключении к базе данных, удалите его и поместите в блокcatch
. 18.05.2016insertToDB
, как вы просили. 18.05.2016