Tôi đang sử dụng OCCI với C++ để lấy dữ liệu từ Oracle. Mã hoạt động tốt, tuy nhiên tôi nhận thấy một số hiệu suất giảm. Điều này xảy ra vì trong quá trình lặp lại rset-> next() một số tính toán cần có thời gian. Tác động của sự chậm trễ này là hồ bơi kết nối oracle có một kết nối bận rộn. Nếu đồng thời yêu cầu yêu cầu cùng một tính toán, có lẽ tất cả các kết nối trong hồ bơi sẽ là Bận.Sao chép Occi :: ResultSet trước khi đóng 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);
Vì vậy, câu hỏi của tôi là: Tôi có thể sao chép Occi :: ResultSet (sử dụng con trỏ chia sẻ?) Để đóng kết nối SAU bản sao và thực hiện tính toán sau khi phát hành kết nối?
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
}
Bất kỳ ví dụ nào có sẵn trên GitHub?
Nếu có thể tạo đối tượng lớp và lưu trữ từng thông tin thô vào đối tượng lớp và lưu trữ nó trong bản đồ. Làm điều đó khi tải chương trình. –