26.8 シャーディング関数
シャーディング関数をリストします。
次の表は、この項で説明しているシャーディングOCI関数を示しています。
表26-7 シャーディング関数
関数 | 用途 |
---|---|
シャーディング・キー列を追加して、複合シャーディング・キーまたは複合スーパー・シャーディング・キーを構成します。 |
|
新しいキー列値で再利用するために、すでに作成されたシャーディング・キーまたはスーパー・シャーディング・キーをリセットします。 |
|
指定されたシャーディング・キー記述子、スーパー・シャーディング・キー記述子および接続文字列に対応するインスタンス名を戻します。 |
26.8.1 OCIShardingKeyColumnAdd()
シャーディング・キー列を追加して、複合シャーディング・キーまたは複合スーパー・シャーディング・キーを構成します。
用途
シャーディング・キー列を追加して、複合シャーディング・キーまたは複合スーパー・シャーディング・キーを構成します。シャーディング・キー列は、キーとして使用される表内の列です。キーとして使用される複数の列がある場合、それは複合キーとなります。
構文
sword OCIShardingKeyColumnAdd(OCIShardingKey *shardingKey,
OCIError *errhp,
void *col,
ub4 colLen,
ub2 colType,
ub4 mode);
パラメータ
- shardingKey (IN)
- シャーディング・キーまたはスーパー・シャーディング・キーです。
- errhp (IN/OUT)
- エラー発生時の診断情報のために
OCIErrorGet()
に渡すエラー・ハンドルです。 - col (IN)
- シャーディング・キー列(複合キーのコンポーネント)です。文字列の場合、値は、(
NLS_LANG
またはOCIEnvNLSCreate()
コールで指定された)クライアント・キャラクタ・セットであるとみなされます。 - colLen (IN)
- シャーディング・キー列の長さです。
- colType (IN)
- 列のデータ型。
- mode (IN)
OCI_DEFAULT
がサポートされる唯一の値です。
戻り値
OCI_SUCCESS
またはOCI_ERROR
使用方法
ユーザーは、OCIShardingKey
記述子を割り当てる必要があります。
データベースでキーが定義されている順序で、複合キーの列の数だけ(単純なシャーディング・キーの場合は1回のみ) OCIShardingKeyColumnAdd()
をコールします。colType
変数は、列のデータ型を示します。
次の表は、colType
パラメータでサポートされるOCIデータ型とその対応するCデータ型を示しています。
OCIデータ型 | Cデータ型 |
---|---|
SQLT_NUM | ub1* |
SQLT_CHR | OraText* |
SQLT_DATE | ub1* |
SQLT_TIMESTAMP | OCIDateTime* |
SQLT_RAW | ub1* |
SQLT_VNU | ub1* |
SQLT_INT | int* |
例
例26-1 複合シャーディング・キーの作成
シャーディング・キーのOCIShardingKey
記述子を使用してから記述子を割り当て、複合シャーディング・キーを作成するのに必要な回数だけOCIShardingKeyColumnAdd()
をコールします。
OCIShardingKey *shardKey;
text *name = “KK”;
int empid = 150;
checker(&status, errhp, OCIDescriptorAlloc(envhp,(dvoid **)&shardKey,
OCI_DTYPE_SHARDING_KEY, 0,(dvoid **)0)));
/* construct a compound key */
OCIShardingKeyColumnAdd(shardKey, OCIError *errhp,(ub4*)&empid, sizeof(empid),
SQLT_INT, OCI_DEFAULT);
OCIShardingKeyColumnAdd(shardKey, OCIError *errhp, name, strlen(name),
SQLT_CHR, OCI_DEFAULT));
26.8.2 OCIShardingKeyReset()
新しいキー列値で再利用するために、すでに作成されたシャーディング・キーまたはスーパー・シャーディング・キーをリセットします。
用途
このルーチンを使用してシャーディング・キーまたはスーパー・シャーディング・キー記述子をリセットし、それにより、このコールの前に追加されたすべてのキー列値を削除できます。このコールの後に、記述子を使用して新しいキー列値を設定できます。
構文
sword OCIShardingKeyReset(OCIShardKey *shardKey,
OCIError *errhp,
ub4 mode);
パラメータ
戻り値
OCI_SUCCESS
またはOCI_ERROR
使用方法
なし。
関連トピック
26.8.3 OCIShardInstancesGet()
カスタム・プール専用で使用し、指定されたシャーディング・キー記述子、スーパー・シャーディング・キー記述子および接続文字列に基づいてインスタンス名を取得します。
用途
カスタム・プール専用で使用し、指定されたチャンクのシャーディング・キー記述子、チャンクのグループのスーパー・シャーディング・キー記述子および接続文字列に対してインスタンス名を戻します。シャードは、各データベースがデータの一部を格納するデータベース・セットの場所です。各データベースに格納されたデータの一部は、チャンクのセットによって表され、各チャンクはデータの特定の範囲に関連付けられます。
構文
sword OCIShardInstancesGet(
void **shTopoCtx,
OCIError *errhp,
const OraText *connstr,
ub4 constrl,
OCIShardingKey *shardingKey,
OCIShardingKey *superShardingKey,
OCIShardinst ***shardinsts,
ub4 numShardInsts,
ub4 mode);
パラメータ
- shTopoCtx(IN/OUT)
- OCIにより作成された、特定の接続文字列に対するこのメソッドの最初のコールで戻される不透明なコンテキストです。これは、オプション・パラメータで、
NULL
として渡すことができます。良好なパフォーマンスを得るには、前のコール(存在する場合)から戻されたvoid * shardTopoCtx
を、同じ接続文字列に対するOCIShardInstancesGet()
に渡します。 - errhp (IN/OUT)
- エラー発生時の診断情報のために
OCIErrorGet()
に渡すエラー・ハンドルです。 - connstr (IN)
- アプリケーションによって
OCISessionGet()
コールに渡される元の接続文字列です。 - connstrl(IN)
connstr
パラメータの長さです。- shardingKey (IN)
- 目的のチャンクのシャーディング・キーです。
- superShardingKey (IN)
- 目的のチャンクのスーパー・シャーディング・キーで、この値にはNULLを使用できます。
- shardInsts(OUT)
- シャーディング・キーおよびスーパー・シャーディング・キーに関連付けられたチャンクを提供するインスタンスに対応する
OCIShardInst
記述子の配列です。 - numShardInsts(OUT)
shardInsts
の要素数です。- mode(IN)
OCI_DEFAULT
がサポートされる唯一の値です。
戻り値
OCI_SUCCESS
またはOCI_ERROR
使用方法
なし。
例
例26-2 カスタム・プールの例
この例では、カスタム・プールを使用し、指定された接続のインスタンス名を取得する方法と、指定された接続の特定のシャーディング・キー、シャード名およびスーパー・シャーディング名をホストするインスタンスを検索する方法を示します。カスタム・プール内に一致する接続が存在しない場合、新しい接続が作成されます。
OCIShardInstancesGet(
&shTopoCtx,
errhp,
connstr,
strlen(connstrl),
shardingKey,
superShardingKey,
&shardInsts,
&numShardInsts,
OCI_DEFAULT);
/* Iterate through all the shard instances that have the data satisfying the sharding key. */
for (k=0; k < numShardInsts; k++ )
{
OCIAttrGet(shardInstances[k],
(ub4) OCI_DTYPE_SHARD_INST,
(dvoid *)&iName,
(ub4 *)&inameLen,
OCI_ATTR_INSTNAME,
(OCIError *)errhp);
/* Look up in the custom pool for a connection to the same shard instance. */
/* The following attribute can be used to find the instance name. */
OCIAttrGet(svchp[i],
OCI_HTYPE_SVCCTX,
&cshardName[i],
(ub4 *) &cshardNameLen[i],
OCI_ATTR_INSTNAME, errhp);
/* If a matching connection is found (iName and cshardName[i]). */
{
OCIAttrSet(svchp[i],
OCI_HTYPE_SVCCTX,
shardingKey,
sizeof(shardingKey),
OCI_ATTR_SHARDING_KEY,
errhp);
/* Return that connection to the requester. */
return svchp[i];
}
}
/* If no free existing connection is found, create a new connection in the pool and return it. */
{
OCIAttrSet(authp,
OCI_HTYPE_AUTHINFO,
shardingKey,
sizeof(shardingKey),
OCI_ATTR_SHARDING_KEY,
errhp);
OCISessionGet ((OCIEnv *)envhp,
(OCIError *)errhp,
(OCISvcCtx **)&mysvc,
(OCIAuthInfo *)authp,
(OraText *)connstr,
(ub4)strlen((char*)connstrl),
(OraText *)NULL, (ub4)0,
(OraText **)0, (ub4 *)0,
(boolean *)0,OCI_SESSGET_CUSTOM_POOL);
return mysvc; /* Track in the pool too. */
}