OCCIをC++で使用してOracleからデータを取得しています。コードはうまく機能しますが、パフォーマンスが低下することに気付きました。これは、rset-> next()の繰り返しでは、計算に時間がかかるためです。この遅延の影響は、Oracle接続プールに1つの接続がビジー状態であることです。同時に要求が同じ計算を要求する場合、プール内の多分すべての接続はBUSYになります。Occi :: ResultSetを閉じる前にコピーOcci :: Connection
Statement *stmt = conn->createStatement (sqlQuery);
ResultSet *rset = stmt->executeQuery();
while (rset->next())
{
//Slow computation takes time
compute()
}
stmt->closeResultSet (rset);
conn->terminateStatement (stmt);
env->terminateConnection (conn);
だから私の質問です:私はOCCIをコピーすることができます:: ResultSetの(共有ポインタを使用して?)コピーした後、接続を閉じ、接続を解除した後の計算を行うためには?
go_to_oracle(ResultSet &result) {
Statement *stmt = conn->createStatement (sqlQuery);
ResultSet *rset = stmt->executeQuery();
copy_rset_to_result;
stmt->closeResultSet (rset);
conn->terminateStatement (stmt);
env->terminateConnection (conn);
}
my_method() {
ResultSet *result = NULL
go_to_oracle(result);
//here connection is closed, but we have the data
compute(result) // do this without have connection occupied
}
GitHubで利用できる例はありますか?
クラスオブジェクトを作成し、各生の情報をクラスオブジェクトに格納し、マップに格納することができる場合は可能です。プログラムの読み込み時に実行します。 –