6.8.12 BLOBデータのファイル出力機能
クライアントからHiRDBサーバに格納しているBLOBデータを検索する場合,次に示す不具合が起こります。
-
BLOBデータを格納するためのメモリ領域をクライアント側で用意する必要があります。
-
サーバ側ではBLOBデータを返却するための送信バッファやクライアントでBLOBデータを受け取るための受信バッファのメモリも必要になります。
-
BLOBデータに合わせた長大なメモリを確保するため,メモリ資源を圧迫します。
-
エンドユーザのプログラムにHiRDBのクライアントとして動作するミドルウェアプログラムが介在するときは,BLOBデータの受け渡しで更にメモリが増えることが考えられます。
このようなBLOBデータ検索時のメモリ増加を防ぐため,検索したBLOBデータをクライアントに返却しないで,シングルサーバ又はフロントエンドサーバがあるユニットのファイルに出力して,サーバのIPアドレスとファイル名だけをクライアントに返却するように設定できます。この機能をBLOBデータのファイル出力機能といいます。
BLOBデータのファイル出力機能の概要を次の図に示します。
- 〔説明〕
-
-
クライアントからBLOBデータを検索した場合,そのBLOBデータを1行1列ごとにファイルに出力します。
-
1.で出力したBLOBデータのファイル名をクライアントに返却します。
-
返却されたファイル名を基に,サーバ側にあるBLOBデータのファイルにアクセスします。
-
(1) 適用基準
BLOBデータを検索する場合で,メモリ所要量を削減したいときに適用します。ただし,クライアントプログラムのメモリ削減及びサーバ,クライアント間の通信バッファのメモリ削減に効果はありますが,サーバ側のディスク入出力時間と容量は増加します。メモリ所要量とディスク入出力の兼ね合いを考慮して利用してください。
(2) 指定方法
BLOBデータのファイル出力機能を使うかどうかは,SQLのWRITE指定で指定します。WRITE指定は,カーソル指定及び問い合わせ指定の中に指定できます。WRITE指定については,マニュアル「HiRDB SQLリファレンス」を参照してください。
SQLの検索結果として,サーバのIPアドレス,SQLに設定したBLOBデータの格納場所とBLOBデータのファイル名だけがクライアントで取得できます。クライアントではこれらの情報を基に,サーバに格納されたBLOBデータを特定します。
(3) BLOBデータのファイル出力機能を使用する場合の注意
-
作成したBLOBデータのファイルが不要になった場合は,ユーザが削除する必要があります。ファイルを削除する場合は,次に示すことに注意してください。なお,カーソルのクローズ後とトランザクション解決後は,無条件に削除できます。
-
FETCHの直後に削除する場合
同じカーソル検索の直前のFETCHによる結果とBLOB値が同じときは,同じファイル名でファイルを再作成しないことがあります。この場合,直前のファイル名を覚えておいて,ファイル名が変わったときに削除するようにしてください。
-
-
障害又はロールバックが発生しても,作成したBLOBデータのファイルは削除されません。また,ファイルを削除しないままでいると,ディスク容量などOSの資源を圧迫することになるので注意してください。
-
次に示す機能を使用する場合,事前にディスク容量に空きがあるかどうかを確認しておいてください。
-
配列を使用したFETCH機能を使用する場合
1回のFETCHの実行で,配列用要素数分のファイルが作成されます。
-
ブロック転送機能を使用する場合
最初のFETCHの実行でブロック転送行数分のファイルを作成し,以降ブロック転送行数分のFETCH終了後,次回以降にFETCHが実行されるたびにブロック転送行数分のファイル作成を繰り返します。
-
-
ほかのトランザクションやカーソル検索とファイル名が重複すると,ファイルを互いに上書きして破壊するおそれがあります。この場合,トランザクションごと又はカーソルごとにファイル接頭辞のディレクトリ名やファイル名を変えて,名称が重複しないようにしてください。
(4) BLOBデータのファイル出力機能を使用した例
BLOBデータのファイル出力機能を使用した検索例を次に示します。
(a) BLOB列を検索する場合
表T1から,列C1,C2を検索します。このとき,C1のBLOBデータをファイル出力し,そのファイル名を取得します。BLOBデータのファイル出力機能を使用した検索例(BLOB列を検索する場合)を次の図に示します。
(b) BLOB属性の抽象データ型を検索する場合
表T2から,CONTAINS関数が真となるADT1列を検索します。このとき,列値をEXTRACTS関数の引数に渡した結果のBLOB値をファイルに出力し,ファイル名を取得します。なお,この例は全件ヒットした場合を示します。BLOBデータのファイル出力機能を使用した検索例(BLOB属性の抽象データ型を検索する場合)を次の図に示します。