13.2 シャード・データベースの接続リクエストの処理について
この項では、シャード・データベースのプールで接続リクエストを行う方法について説明します。
13.2.1 シャーディング・キーを使用したプールからの接続のチェックアウト方法
接続がUCPから流用される場合、シャード認識アプリケーションでは、PoolDataSource
クラスに存在する新しい接続ビルダーを使用して、シャーディング・キーおよびスーパー・シャーディング・キーを提供できます。
シャーディング・キーが存在しない場合またはデータベース・メタデータで指定されたデータ型にマップされない場合、
IllegalArgumentException
がスローされます。次のコードでは、シャーディング・キーを使用した接続のチェックアウト方法を示します。
例13-1 シャーディング・キーを使用した接続のチェックアウト
import java.sql.Connection;
import java.sql.JDBCType;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.ShardingKey;
import oracle.ucp.jdbc.PoolDataSource;
import oracle.ucp.jdbc.PoolDataSourceFactory;
public class UCPShardingExample {
public static void main(String[] args) throws SQLException {
String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(HOST=myhost)(PORT=<gsm_port>)(PROTOCOL=tcp))(CONNECT_DATA=(SERVICE_NAME=myGSMservice)))";
String user="db_user_name";
String pwd = "db_password";
PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource();
pds.setURL(url);
pds.setUser(user);
pds.setPassword(pwd);
pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
pds.setInitialPoolSize(5);
pds.setMinPoolSize(5);
pds.setMaxPoolSize(20);
int empId = 1234;
// Employee ID is the sharding key column in sharded table
ShardingKey shardingKey = pds.createShardingKeyBuilder()
.subkey(empId, JDBCType.INTEGER)
.build();
// Borrow a connection to direct shard using sharding key
try(Connection connection = pds.createConnectionBuilder()
.shardingKey(shardingKey)
.build()) {
PreparedStatement pst = connection.prepareStatement("select * from employee where emp_id=?");
pst.setInt(1, 1234);
ResultSet rs = pst.executeQuery();
// retrieve the employee details using resultset
rs.close();
pst.close();
}
}
}
ノート:
接続チェックアウト中にシャーディング・キーを指定する必要があります。それ以外の場合、エラーまたは例外がアプリケーションにスローされます。13.2.2 シャードごとの接続数の構成について
UCPがシャード・データベースのプール接続に使用される場合、プールには、異なるシャードの接続が含まれます。そのため、接続を取得する場合、すべてのシャードのプール容量の相当な使用が接続されていることを確認するために、UCPはMaxConnectionsPerShard
パラメータを使用します。これは、シャード・データベースの各シャードに適用されるグローバル・パラメータで、接続の合計数を指定された制限を下回るシャードに制限するために使用されます。
次の表に、このパラメータを設定および取得するAPIを示します。
メソッド | 説明 |
---|---|
poolDatasource.setMaxConnectionsPerShard(<max_connections_per_shard_limit>) |
シャード当たりの最大接続数を設定します。 |
poolDatasource.getMaxConnectionsPerShard() |
setMaxConnectionsPerShard(<max_connections_per_shard_limit>) メソッドを使用して設定された値を取得します。
|
ノート:
Oracle Golden Gate構成を使用したシャード・データベースでMaxConnectionsPerShard
パラメータを使用できません。