2017-04-25 80 views
2

我使用OrientDB v2.2.16和C# driver v0.1.12.0。我找不到有关如何使用此驱动程序的新迭代创建连接池的任何文档。 ODatabase构造函数有一个connectionPool参数:C中的OrientDB连接池#

ODatabase db=new ODatabase("localhost", 2424, "testDb", ODatabaseType.Graph, "USER", "PASSWORD", "Pool"); 

但是没有办法创建“Pool”。该驱动程序的旧版本包含OClient类中的CreateDatabasePool函数:

OClient.CreateDatabasePool("localhost", 2424, "testDb", ODatabaseType.Graph, "USER", "PASSWORD", 10, "Pool"); 

新的不支持。第一次调用ODatabase构造函数时,池是否自发创建?如果是这样,我如何控制池大小等参数?

回答

1

是否池自发地在第一次调用 ODatabase构造自己创建的?

望着the source,构造呢,其实,自动创建一个连接池:

public ODatabase(string hostName, int port, string databaseName, ODatabaseType type, string userName, string userPassword) 
{ 
    _connectionPool = new ConnectionPool(hostName, port, databaseName, type, userName, userPassword); 
    ClientCache = new ConcurrentDictionary<ORID, ODocument>(); 
} 

如果是这样,我怎么控制参数,如池的大小?

看着the code for the ConnectionPool object,没有控制池连接的明确数目的任何直接的方式:

public Connection GetConnection() 
{ 
    if (_connectionPool.ContainsKey(_poolAlias)) 
     return _connectionPool[_poolAlias]; 

    var connection = new Connection(_hostName, _port, _databaseName, _type, _userName, _userPassword, _sslCerts); 
    _connectionPool.AddOrUpdate(_poolAlias, i => connection, 
     (i, conn) => _connectionPool[i] = conn); 

    return connection; 
} 

正如你所看到的,连接维持的生命周期内的ODatabase对象实例。因此,控制池大小的唯一方法是控制ODatabase对象的生命周期以及用于“poolAlias”的值。

请注意,即使您未指定poolAlias,也会在构建此对象时始终创建池。在这种情况下,别名被设置为“默认”。

+0

谢谢你的回应。我已经看过来源,但不知道它在做什么。所以如果我明白了,它不是传统意义上的游泳池,而是一个永远保持开放的命名连接字典。我不确定我是否了解这种类型的游泳池的优点,是不是只会增长并不会缩小? –

+0

@MarcBernier这就是我看起来的样子。我*可能会错过一些东西,你可能希望将这个特定的问题作为一个问题发布到他们的GitHub上,看看驱动程序的作者是否有兴趣分享他们在这种类型池中的动机。对于它的价值来说,它看起来像为您节省了一遍又一遍地初始化相同连接的相当昂贵的成本。 – jadarnel27

+0

基于同样的原因,我之前为此创建了自己的'传统'固定大小的池。初始化非常耗时。但是我怀疑我的是我遇到的车祸的原因,因此研究了司机的车库。 –