2017-04-25 78 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

基於同樣的原因,我之前爲此創建了自己的'傳統'固定大小的池。初始化非常耗時。但是我懷疑我的是我遇到的車禍的原因,因此研究了司機的車庫。 –