나는 casbah scala 클라이언트를 사용하여 MongoDb에 여러 데이터베이스 연결을 관리해야한다. 나는 근사치가 이지만 수백 개의 연결을 열었습니다.왜 Casbah와 여러 개의 mongodb 연결이 필요합니까?
키가되는 각 데이터베이스에 대한 연결을 저장하는 Map [String, MongoDB]을 저장하려고합니다. 두 개의 노드 클러스터가 포함 된 Spark Streaming에서 이것을 사용하고 있습니다. 따라서 라고 생각합니다. 직렬화 문제가 있지만.
내 클래스에 봐. 그것을를 해결하는 방법을abstract class AbstractMongoDAO(@transient val config: Config) extends Closeable with Serializable {
@transient private val mongoConfig = config.getConfig(CONFIG_KEY)
private val host = mongoConfig.getString(CONFIG_KEY_HOST)
@transient private var _mongoClient: MongoClient = MongoClient(host)
private var _dbs: mutable.HashMap[String, MongoDB] = mutable.HashMap()
protected def dbs(): mutable.HashMap[String, MongoDB] ={
if(_dbs == null)
_dbs = mutable.HashMap()
_dbs
}
def mongoClient: MongoClient = {
if (_mongoClient == null) {
_mongoClient = MongoClient(host)
}
_mongoClient
}
def db(dbName: String):MongoDB = {
if (dbs.get(dbName) == None) {
_dbs += (dbName -> mongoClient.getDB(dbName))
}
_dbs.get(dbName).get
}
override def close() = {
Option(_mongoClient).foreach(_.close())
}
}
private object AbstractMongoDAO {
val CONFIG_KEY = "mongo"
val CONFIG_KEY_HOST = "host"
}
을 모른다 그리고 나는
class MongoDAO (override val config : Config)
extends AbstractMongoDAO(config) with Serializable
AbstractMongoDao를 확장하는 다른 클래스를
그리고이 간단한 코드로 db 연결을 얻습니다. appName은 변수 데이터베이스입니다.
val _db = db(appName)
내가 뭘 잘못하고있어?
나는 당신이 말한대로했지만 여전히 여러 개의 연결을 만듭니다 ... 나는 당신의 mongoclientoptions와 함께 동반자 개체에 연결을 넣었고 이제는 올바르게 작동합니다. 고맙습니다. – gasparms