2.5.7 データの登録
(1) データの登録方法
作成した表にデータを登録するには,操作系SQLのINSERT文を使用します。登録するテキストデータは,HiRDBをセットアップしたときの文字コード,および「付録A 登録する文書(テキストデータ)および文字列データに使用できる文字」に示す文字コードを使用してください。INSERT文の詳細については,マニュアル「HiRDB SQLリファレンス」を参照してください。
INSERT文の指定例を次の図に示します。
また,HiRDBの「pdload(データベース作成ユティリティ)」を使用すると,データの一括登録ができます。
なお,SQLによるSGML文書登録時にSGML文書のエラーを検知しても,トランザクションはロールバックしません。SGML文書のエラーが発生した場合,SQL(INSERT文またはUPDATE文)による登録のときは,SQLCODE = -997のエラーとなります。なお,エラーコード詳細化指定をしている場合は,SQLCODE = -3040のエラーとなります。
また,pdloadによる登録の場合は,該当する行の登録がスキップされます。
なお,文書検索プラグインを使用してSGML文書を登録する場合,HiRDBのユーザLOB用RDエリアにデータを登録する場合よりも時間が掛かります。これは,登録時に,SGML文書の構造解析処理を実行して,全文検索をするための文書構造インデクスを作成するためです。登録に掛かる時間は,文書長,DTDの内容,および文書構造の複雑さに依存して変化します。
(2) 登録・検索同時実行の設定
登録・検索同時実行を設定すると,データの登録と検索の同時実行ができます。同時実行には次の利点があります。
-
ほかのユーザが更新中(トランザクションが終了していない状態)の文書を検索できます。
-
SGMLTEXTデータ格納用RDエリアおよびn-gramインデクス情報格納用RDエリアに対してグローバルバッファを割り当てると,登録および検索性能が向上します。
ただし,同時実行できるのは次の場合です。
-
SQLによる単数の更新系トランザクションと,複数の検索系トランザクションの同時実行
-
インデクス未作成の場合,複数の更新系トランザクションの同時実行
-
インデクス情報の取得ユティリティ,インデクスのマージユティリティ,インデクス作成開始ユティリティ,または統計情報収集ユティリティと,検索系トランザクションの同時実行
(a) 指定方法
文書検索プラグインの環境設定項目,およびHiRDBのバックエンドサーバ定義またはシングルサーバ定義に,次の内容を設定します。Text Search Plug-inの環境設定項目については,「2.6 文書検索プラグインのユーザ環境設定」を参照してください。また,HiRDBのバックエンドサーバ定義またはシングルサーバ定義の詳細については,マニュアル「HiRDB システム定義」を参照してください。
- 文書検索プラグインの環境設定項目
-
-
SGMLプラグインを使用している場合
SGMLプラグインの環境設定項目「登録・検索同時実行指定」で次のように指定します。
set phs_search_wait=nowait
-
n-gramインデクスプラグインを使用している場合
n-gramインデクスプラグインの環境設定項目「1RDエリア当たりの排他制御用共用メモリサイズ」で次のように指定します。
set phn_lock_pool_size=共用メモリサイズ[キロバイト]
-
- HiRDBのバックエンドサーバ定義またはシングルサーバ定義
-
-
n-gramインデクスプラグインを使用している場合
n-gramインデクスプラグインで使用する共用メモリのサイズを指定します。
HiRDBのバックエンドサーバ定義またはシングルサーバ定義のオペランド「pdplgprm」は,次の形式で指定してください。
- オペランドの指定形式
pdplgprm -n プラグイン名 -s 共用メモリサイズ
- 引数
-
-n プラグイン名
共用メモリを使用するプラグインの名称を指定します。ここでは,n-gramインデクスプラグインのプラグイン名「_phngram」を指定してください。
-s 共用メモリサイズ
n-gramインデクスプラグインで使用する共用メモリのサイズ(キロバイト)を指定します。
-
(b) 注意事項
-
HiRDBが提供しているユティリティによる登録と検索系トランザクションは同時に実行できません。
-
インデクス情報の取得ユティリティ,インデクスのマージユティリティ,インデクス作成開始ユティリティ,および統計情報収集ユティリティ以外のText Search Plug-inのユティリティと,検索系トランザクションは同時に実行できません。
-
同時実行を設定している場合,Text Search Plug-inのデータの整合性確保のために,一時的に排他制御をします。このため,同時実行を設定していない場合に比べて,排他制御によるオーバヘッドが掛かります。
-
"phs_search_wait=nowait"を設定した場合は,n-gramインデクスを作成していない場合でも共用メモリの定義をする必要があります。
-
同時実行する場合は,グローバルバッファを指定してください。実行性能が向上します。
-
登録・検索同時実行時に,更新系のトランザクションを複数実行した場合,排他によってwait状態になります。更新系トランザクションのwait状態が解消されるまで,以降の検索処理もwait状態になります。
-
LOCK文でテーブル全体を排他すると,ほかのトランザクションとの同時実行ができません。このため,分割遅延登録・更新系SQL同時実行を実施する場合は,LOCK文でテーブル全体の排他を実施しないようにしてください。
(3) 分割遅延登録・更新系SQL同時実行の設定
分割遅延登録・更新系SQL同時実行を使用すると,(2)で説明した登録・検索同時実行の機能に加えて,さらに,データ登録とインデクス作成を同時に実行できます。
(a) 指定方法
SGMLプラグインの環境設定項目「登録・検索同時実行」に,次のように指定します。
set phs_search_wait=nowait_with_update
(b) 注意事項
-
LOCK文でテーブル全体を排他すると,ほかのトランザクションとの同時実行ができません。このため,分割遅延登録・更新系SQL同時実行を実施する場合は,LOCK文でテーブル全体の排他を実施しないようにしてください。
-
検索トランザクションの排他が更新系SQLまたはphnstartidx(インデクス作成開始ユティリティ)と競合することを避けるため,検索SQL実行時は,SQLの排他オプションにWITHOUT LOCK NOWAITを指定してください。インデクス作成開始ユティリティの詳細については,「3.2.14 phnstartidx(インデクス作成開始ユティリティ)」を参照してください。