シャーディング関数

シャーディング関数をリストします。

次の表は、この項で説明しているシャーディングOCI関数を示しています。

表18-7 シャーディング関数

関数 用途

OCIShardingKeyColumnAdd()

シャーディング・キー列を追加して、複合シャーディング・キーまたは複合スーパー・シャーディング・キーを構成します。

OCIShardingKeyReset()

新しいキー列値で再利用するために、すでに作成されたシャーディング・キーまたはスーパー・シャーディング・キーをリセットします。

OCIShardInstancesGet()

指定されたシャーディング・キー記述子、スーパー・シャーディング・キー記述子および接続文字列に対応するインスタンス名を戻します。

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*

例18-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));

OCIShardingKeyReset()

新しいキー列値で再利用するために、すでに作成されたシャーディング・キーまたはスーパー・シャーディング・キーをリセットします。

用途

このルーチンを使用してシャーディング・キーまたはスーパー・シャーディング・キー記述子をリセットし、それにより、このコールの前に追加されたすべてのキー列値を削除できます。このコールの後に、記述子を使用して新しいキー列値を設定できます。

構文

sword OCIShardingKeyReset(OCIShardKey *shardKey, 
                          OCIError    *errhp, 
                          ub4          mode);

パラメータ

shardKey(IN)
シャーディング・キーまたはスーパー・シャーディング・キー記述子です。
errhp (IN/OUT)
エラー発生時の診断情報のためにOCIErrorGet()に渡すエラー・ハンドルです。
mode (IN)
OCI_DEFAULTが現在サポートされる唯一の値です。

戻り値

OCI_SUCCESSまたはOCI_ERROR

使用上のノート

なし。

関連トピック

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

使用上のノート

なし。

例18-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. */     
  }