DELETE 時
2.5 文書検索プラグインのデータベースの作成
2.5.7 データの登録 (1) データの登録方法
作成した表にデータを登録するには,操作系 SQL の INSERT 文を使用します。登録するテキストデータ は,HiRDB をセットアップしたときの文字コード,および「付録 A 登録する文書(テキストデータ)お
よび文字列データに使用できる文字」に示す文字コードを使用してください。INSERT 文の詳細について
は,マニュアル「HiRDB SQL リファレンス」を参照してください。INSERT 文の指定例を次の図に示します。
図 2‒37 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