2014-08-04 3 views
6

Примечание: Я понимаю there is a similar question on SO, но он говорит о старой версии Casbah, плюс, поведение, объясняемое в ответе, не то, что я вижу!Как использовать соединения Cashbah MongoDB?

У меня создалось впечатление, что MongoClient Casbah обрабатывает пул соединений. Однако, выполняя мой процесс, я вижу большое и растущее число соединений mongodb, что заставляет меня сомневаться в том, что этот пул фактически существует.

В принципе, это то, что я делаю:

class MongodbDataStore { 
    val mongoClient = MongoClient("host",27017)("database") 

    var getObject1(): Object1 = { 
    val collection = mongoClient("object1Collection") 
    ... 
    } 

    var getObject2(): Object2 = { 
    val collection = mongoClient("object2Collection") 
    ... 
    } 
} 

Таким образом, я никогда близко MongoClient.

Должен ли я закрывать его после каждого запроса? Реализовать мой собственный пул? Что тогда?

Спасибо

+0

Итак, вы пытались использовать «MongoOptions», как было предложено в этом вопросе? Любой пример кода, чтобы воспроизвести тот факт, что пул соединений не работает [с этой настройкой]? –

+0

Пожалуйста, не продолжайте [удалить предыдущие вопросы] (http://stackoverflow.com/questions/25081647/usage-pattern-of-casbah-mongodb-connections), а затем снова спросите их. –

ответ

7

Касба обертка вокруг клиента MongoDB Java, так что соединение фактически управляется этим.

Согласно документации Java драйвера (http://docs.mongodb.org/ecosystem/drivers/java-concurrency/):

Если вы используете в обслуживающем среде веб, например, вы должны создать один экземпляр MongoClient, и вы можете использовать его в каждом запрос. Объект MongoClient поддерживает внутренний пул из соединений с базой данных (максимальный размер пула по умолчанию - 100). Для каждый запрос в БД (найти, вставить и т. Д.) Поток Java будет получить соединение из пула, выполнить операцию и освободить соединение . Это означает, что используемое соединение (гнездо) может быть разным .

Кстати, это то, что я испытал в производстве. Я не видел никаких проблем с этим.

+0

У вас есть какие-либо объяснения относительно того, почему я получаю «SocketException: Слишком много открытых файлов» после того, как мое приложение работает некоторое время. И делать то, что я вижу больше, чем 100 связей ...? – user1491915

+1

Вы уверены, что используете один и тот же объект MongoClient? Может быть, вы создаете несколько? –

Смежные вопросы