2017-04-25 7 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"); 

しかし、 "プール"を作成する方法はありません。古いバージョンのドライバには、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を指定しなくても、このオブジェクトを構築するときに常にプールが作成されることに注意してください。その場合、エイリアスは "Default"に設定されます。

+0

ありがとうございます。私はソースを見ていたが、何をしていたのか分からなかった。だから私が理解すれば、伝統的な意味でプールではなく、むしろ永遠に開いた名前のつながりの辞書です。私はこのタイプのプールの利点を理解しているのか分かりません。成長して成長して収縮することはありませんか? –

+0

@MarcBernierそれは私のように見えます。私は何かが欠けている可能性があります。その特定の質問を自分のGitHubに投稿し、ドライバーの作者がこのタイプのプーリングの動機を分かち合うのに興味があるかどうかを確認してください。それが価値あるものであれば、同じ接続を何度も何度も初期化するかなりのコストを節約できます。 – jadarnel27

+0

同じ理由で私は自分の「伝統的な」固定サイズのプールを作成しました。その初期化には時間がかかります。しかし、私は私が経験していたクラッシュの原因であると思っていたため、ドライバーのプールを調べました。 –