(57)【特許請求の範囲】
【請求項１】
クライアントとデータベースサーバを有するデータベース処理システムにおけるデータベース処理方法であって、
前記データベースサーバは、
前記クライアントから検索要求を受信し、
ＢＬＯＢデータおよび前記ＢＬＯＢデータに対応する識別情報が記憶されたデータベースから、前記検索要求を満たす検索結果および前記識別情報を取得し、
取得した前記識別情報に対応するＢＬＯＢデータを出力する外部ファイルを識別するファイル識別情報を生成するとともに前記データベースに記憶された前記識別情報に対応するＢＬＯＢデータを前記ファイル識別情報を用いて記憶装置に外部ファイルとして出力し、
前記検索結果および前記ファイル識別情報を前記クライアントに通知し、
前記クライアントは、前記ファイル識別情報を用いて前記記憶装置から前記外部ファイルを取得し、取得した前記外部ファイルおよび前記検索結果を出力することを特徴とするデータベース処理方法。
【請求項２】
請求項１に記載のデータベース処理方法において、前記データベースサーバは、複数のデータを並列に外部ファイルとして出力することを特徴とするデータベース処理方法。
【請求項３】
クライアントとデータベースサーバを有するデータベース処理システムであって、
前記データベースサーバは、
ＢＬＯＢデータおよび前記ＢＬＯＢデータに対応する識別情報が記憶されたデータベースと、
前記クライアントから検索要求を受信する手段と、
前記データベースから、前記検索要求を満たす検索結果および前記識別情報を取得する手段と、
取得した前記識別情報に対応するＢＬＯＢデータを出力する外部ファイルを識別するファイル識別情報を生成するとともに前記データベースに記憶された前記識別情報に対応するＢＬＯＢデータを前記ファイル識別情報を用いて記憶装置に外部ファイルとして出力する手段と、
前記検索結果および前記ファイル識別情報を前記クライアントに通知する手段と、
を備え、
前記クライアントは、前記ファイル識別情報を用いて前記記憶装置から前記外部ファイルを取得し、取得した前記外部ファイルおよび前記検索結果を出力する手段を備えることを特徴とするデータベース処理システム。
【請求項４】
請求項３に記載のデータベース処理システムにおいて、前記データベースサーバは、複数のデータを並列に外部ファイルとして出力する手段を備えることを特徴とするデータベース処理システム。
【請求項５】
クライアントとデータベースサーバを有するデータベース処理システムのためのプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
前記データベースサーバを、
前記クライアントから検索要求を受信する手段、
ＢＬＯＢデータおよび前記ＢＬＯＢデータに対応する識別情報が記憶されたデータベースから、前記検索要求を満たす検索結果および前記識別情報を取得する手段、
取得した前記識別情報に対応するＢＬＯＢデータを出力する外部ファイルを識別するファイル識別情報を生成するとともに前記データベースに記憶された前記識別情報に対応するＢＬＯＢデータを前記ファイル識別情報を用いて記憶装置に外部ファイルとして出力する手段、および、
前記検索結果および前記ファイル識別情報を前記クライアントに通知する手段、
として機能させるためのプログラム、並びに、
前記クライアントを、前記ファイル識別情報を用いて前記記憶装置から前記外部ファイルを取得し、取得した前記外部ファイルおよび前記検索結果を出力する手段として機能させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データベース処理方法、データベース処理システム及び媒体に関し、特に、クライアント−サーバ構成のデータベースシステムにおいて長大データを処理する方法に関する。
【０００２】
【従来の技術】
動画・画像データや音声データなどひとかたまりのデータが数ギガバイトにも及ぶような長大なデータをデータベースで管理することに関して、SQL3（Database Language SQL, ISO Working Draft, July 1996）で提案されているBLOB(Binary Large Object)型を用いる方法がある。
【０００３】
長大データをデータベースシステムで扱う場合、ユーザアプリケーションの動作するプログラムで膨大なメモリ領域が必要になることが問題となる。この問題に対して、BLOBデータをファイルに保持することにより、アプリケーションプログラムで長大データを保持するためのメモリバッファを使用せずにBLOBデータを扱う方法として、データベース管理システムDB2("USING THE NEW DB2 IBM's Object-Relational Database System", Don Chamberlin, Morgan Kaufmann Publishers, Inc.,1996)のファイルリファレンス(file reference)の技術がある。
【０００４】
一方、リレーショナルデータベースでは、膨大なデータに対しても高速に処理することを可能にする並列データベースの技術がある。並列データベースにおいて問い合せの内容やデータの状態に応じて最適な並列処理を選択する機能をもつシステム（特開平6−214843）がある。
【０００５】
また、オブジェクト・リレーショナルデータベース（「オブジェクトリレーショナルDBMSs」Michael Stonebraker著、大田佳伸訳、インターナショナル・トムソン・パブリッシング・ジャパン、1996年8月）では、SQL3のルーチンの機能を汎用のプログラミング言語で記述して作成される実行可能なコードを用いて実現し、そのルーチンを用いたSQLによって画像などのマルチメディアデータを操作できるようにする技術がある。
【０００６】
【発明が解決しようとする課題】
前記の従来の公知技術においては次のような問題点がある。
【０００７】
（１）前記のファイルリファレンスの方法では、アプリケーションプログラム(ＡＰ)の動作するクライアントのノード（コンピュータマシン。中央処理装置を基本とするコンピュータを構成する単位）上にファイルを置き、そのファイルにBLOBデータを保持することにしている。（このようにデータベースサーバの外部で扱うファイルを、以降、外部ファイルと呼ぶ。）サーバに保持しているBLOBデータをファイルに出力するようＡＰから要求がある場合、以下のように処理が行われる。
（ａ）サーバノードでデータベースサーバがBLOBデータを読み込む。
（ｂ）サーバからクライアントにデータを転送する。
（ｃ）クライアントでデータを外部ファイルに書き出す。
この場合、クライアント−サーバ間でネットワーク通信またはプロセス間通信で長大なデータを転送するため、処理に時間がかかるという問題があった。
【０００８】
（２）前記のファイルリファレンスの方法では、ＡＰが指定した外部ファイルにデータベースサーバがBLOBデータを出力することになっている。
そのため、例えば、データベース問い合せの結果として得られる複数件のBLOBデータをそれぞれ個別の外部ファイルに出力するには、以下のような煩雑な処理を行なう必要がある。
（ａ）BLOBデータが外部ファイルに出力されるときに上書きされるように指定しておき、結果を一件出力するたびに、外部ファイルの名称を別の名称に変更するか、外部ファイルの内容を別のファイルにコピーする。
（ｂ）BLOBデータが外部ファイルに出力されるときに追加されるように指定しておき、後に外部ファイルからそれぞれのBLOBデータを分割して、それぞれ別のファイルに出力する。なお、BLOBデータのサイズが不明の場合は、結果を一件出力するたびに、追加されたBLOBデータのサイズを保持しておいて、後にそのサイズを参照しながらBLOBデータを分割する。
したがって、このような処理を行なうために、ＡＰのソースコードの記述が煩雑になるという問題があった。
また、長大なBLOBデータのコピーなどを行なう場合は、メモリが大きくなるという問題があった。
【０００９】
（３）並列データベースシステムにおいて、前記のファイルリファレンスの方法を適用する場合、データベースサーバが複数の並列データベース処理によって複数のBLOBデータに対して並列にアクセスするのにもかかわらず、外部ファイルへのBLOBデータの書き出しはＡＰのある１つのクライアントで一件ずつ行われることになる。
そのため、クライアントに負荷が集中してボトルネックとなり、性能上問題となる。
【００１０】
本発明の目的は、前記（１）から（３）の問題点を解決し、データベースシステムで外部ファイルを介して長大なデータを扱う処理を高速化することが可能な技術を提供することにある。
本発明の他の目的は、ユーザアプリケーションで外部ファイルを介して長大なデータを扱うためのソースコードの記述を簡易にすることが可能な技術を提供することにある。
本発明の他の目的は、並列データベースシステムの場合に、複数の外部ファイルの出力を高速化することが可能な技術を提供することにある。
本発明の前記ならびにその他の目的及び新規な特徴は、本明細書の記述及び添付図面によって明らかにする。
【００１１】
【課題を解決するための手段】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば、以下のとおりである。
【００１２】
（１）長大データを取り扱うクライアント−サーバ構成のデータベースシステムにおいて、サーバで動作するデータベースサーバがクライアントで動作するユーザアプリケーションから要求されたデータベースに格納されている長大データをファイルに出力し、この長大データが出力されたファイルを前記ユーザアプリケーションが参照して長大データを取得するデータベース処理方法である。
【００１３】
（２）前記長大データを出力するファイルを識別するファイル識別情報を前記データベースサーバが作成し、前記ファイル識別情報を前記データベースサーバから前記ユーザアプリケーションに通知し、前記通知により取得した前記ファイル識別情報を用いて前記ユーザアプリケーションがファイルを参照して長大データを取得するデータベース処理方法である。
【００１４】
（３）前記ユーザアプリケーションがデータベースに定義された関数の実行を要求し、前記ユーザアプリケーションからの要求に応じて前記データベースサーバが前記関数を実行し、前記関数が前記長大データを出力するファイルのファイル識別情報を作成し、前記関数が前記長大データをファイルに出力し、前記関数が前記ファイル識別情報を前記データベースサーバに通知するデータベース処理方法である。
【００１５】
（４）並列データベース構成で並列にデータベース処理を行なう複数のプロセスが、それぞれ並列に前記長大データをファイルに出力するデータベース処理方法である。
【００１６】
（５）前記データベースサーバにより長大データが出力されたファイルを前記データベースサーバが動作するノードと同一のノードで前記ユーザアプリケーションが参照して長大データを取得するデータベース処理方法である。
【００１７】
（６）長大データを取り扱うクライアント−サーバ構成のデータベースシステムにおいて、サーバで動作するデータベースサーバがクライアントで動作するユーザアプリケーションから要求されたデータベースに格納されている長大データをファイルに出力する手段と、該手段により長大データが出力されたファイルを前記ユーザアプリケーションが参照して長大データを取得する手段とを備えるデータベース処理システムである。
【００１８】
（７）前記長大データを出力するファイルを識別するファイル識別情報を前記データベースサーバが作成する手段と、前記ファイル識別情報を前記データベースサーバから前記ユーザアプリケーションに通知する手段と、前記通知により取得した前記ファイル識別情報を用いて前記ユーザアプリケーションがファイルを参照して長大データを取得する手段とを備えるデータベース処理システムである。
【００１９】
（８）前記ユーザアプリケーションがデータベースに定義された関数の実行を要求する手段と、前記ユーザアプリケーションからの要求に応じて前記データベースサーバが前記関数を実行する手段と、前記関数が前記長大データを出力するファイルのファイル識別情報を作成する手段と、前記関数が前記長大データをファイルに出力する手段と、前記関数が前記ファイル識別情報を前記データベースサーバに通知する手段とを備えるデータベース処理システムである。
【００２０】
（９）並列データベース構成で並列にデータベース処理を行なう複数のプロセスが、それぞれ並列に前記長大データをファイルに出力する手段を備えるデータベース処理システムである。
【００２１】
（１０）前記データベースサーバにより長大データが出力されたファイルを前記データベースサーバが動作するノードと同一のノードで前記ユーザアプリケーションが参照して長大データを取得する手段を備えるデータベース処理システムである。
【００２２】
（１１）クライアント−サーバ構成のデータベースシステムにおけるプログラム及びデータを記録したコンピュータ読み取り可能な記憶媒体であって、前記サーバで動作するデータベースサーバがクライアントで動作するユーザアプリケーションから要求されたデータベースに格納されている長大データをファイルに出力する手順と該手順により長大データが出力されたファイルを前記ユーザアプリケーションが参照して長大データを取得する手順とを備えるデータベース処理システムのプログラム及びデータ記録した記憶媒体である。
【００２３】
【発明の実施の形態】
以下、本発明の実施形態（実施例）を図面を用いて詳細に説明する。
【００２４】
図１は本発明の実施形態の並列データベースシステムにおいて、長大データを外部ファイルを介して扱う処理の概要を示す概念図である。
図１に示すように、本実施形態のデータベースシステム１０１は、アプリケーションプログラム（ＡＰ）１１２が動作するクライアントとなるノード１１１と、ＡＰ１１２からの問い合せ要求を受け付けるデータベースサーバ１０２の機能の一部であるフロントエンドサーバ（FES）１２２の動作するノード１２１と、データベースシステム１０１における定義情報や格納構造情報などを含むディクショナリ情報１３３を管理するデータベースサーバ１０２の機能の一部であるディクショナリサーバ（DS）１３２が動作するノード１３１と、データベースシステム１０１におけるデータベース処理を並列して実行するデータベースサーバ１０２の機能の一部である複数のバックエンドサーバ（BES）１４２−１、１４２−２、…、１４２−ｎが動作する複数のノード１４１−１、１４１−２、…、１４１−ｎと、外部ファイル１５２−１、１５２−２、…、１５２−ｎを保持するノード１５１−１、１５１−２、…１５１−ｎは、ネットワーク１０３によって相互結合されている。
【００２５】
BES１４２−１、１４２−２、…、１４２−ｎは、ＡＰ１１２の操作対象となるBLOBデータ１４５−１、１４５−２、…、１４５−ｎをデータストア１４４−１、１４４−２、…、１４４−ｎに保持している。
【００２６】
ノード１５１−１、１５１−２、…、１５１−ｎでは、ＡＰ１１２及びデータベースサーバ１０２が共通にアクセスする共用のファイルシステム領域に、外部ファイル１５２−１、１５２−２、…、１５２−ｎを保持する。
【００２７】
ＡＰ１１２は問い合せ要求をデータベースサーバ１０２のFES１２２に伝える（１６１）。この問い合せ要求には、BLOBデータ１４５−１、１４５−２、…、１４５−ｎを外部ファイル１５２−１、１５２−２、…、１５２−ｎに出力する関数の実行要求１１３が含まれている。
【００２８】
FES１２２は、ＡＰ１１２からの問い合せ要求の解析を行なう。問い合せ要求の解析では、DS１３２のディクショナリ情報１３３を参照して（１６２）、データストア１４４−１、１４４−２、…、１４４−ｎの格納構造情報や関数実行に関する情報を取得する。次に、FES１２２は、問い合せ要求を解析した情報をもとに、データベース処理の実行手順コード１２３を作成し、実行手順コード１２３としてBES１４２−１、１４２−２、…、１４２−ｎへ送出し、データベース処理を行なうように要求する（１６３−１、１６３−２、…、１６３−ｎ）。実行手順コード１２３には、BLOBデータ１４５−１、１４５−２、…、１４５−ｎを外部ファイル１５２−１、１５２−２、…、１５２−ｎに書き出す機能を持つ関数の実行指示が含まれる。
【００２９】
BES１４２−１、１４２−２、…、１４２−ｎは実行手順コード１２３に従い、BLOBデータ１４５−１、１４５−２、…、１４５−ｎをデータストア１４４−１、１４４−２、…、１４４−ｎから読み込み、BLOBデータを外部ファイルを書き出す関数の関数実装コード１４３−１、１４３−２、…、１４３−ｎを実行し、外部ファイル１５２−１、１５２−２、…、１５２−ｎを作成する（１６４−１、１６４−２、…、１６４−ｎ）。
【００３０】
関数実装コード１４３−１、１４３−２、…、１４３−ｎを実行した結果、BES１４２−１、１４２−２、…、１４２−ｎは外部ファイルの名称を実行結果として受け取る。外部ファイルを作成したのち、BES１４２−１、１４２−２、…、１４２−ｎは実行結果をFES１２２に返信する。
【００３１】
FES１２２はBES１４２−１、１４２−２、…、１４２−ｎからの実行結果を編集して、ＡＰ１１２に処理結果として返信する。
【００３２】
ＡＰ１１２は、返信された処理結果に含まれる外部ファイル名を取得し、外部ファイル１５２−１、１５２−２、…、１５２−ｎの内容のBLOBデータを参照する（１６５−１、１６５−２、…、１６５−ｎ）。
【００３３】
これにより、クライアント−サーバ間で長大データを転送することなく、データベースサーバが複数の外部ファイルを並列に書き出すので、高速に処理することができる。また、複数の外部ファイルのそれぞれのファイル名がデータベースサーバで作成されるので、ユーザアプリケーションでのソースコードの記述を簡易にすることができる。
【００３４】
図２は図１に示す本発明の実施形態（実施例）におけるハードウェアの構成を示す概略図である。
図２に示すように、データベースシステム１０１では、それぞれが処理装置の単位である複数のノード１１１、１２１、１３１、１４１−１、１４１−２、…、１４１−ｎ、１５１−１、１５１−１、…、１５１−ｎが、LAN(Local Area Network)などのネットワーク１０３で接続されており、それぞれのノードがネットワーク１０３を介して通信を行なうことができる。
【００３５】
前記ノード１１１、１２１、１３１、１４１−１、１４１−２、…、１４１−ｎ、１５１−１、１５１−１、…、１５１−ｎは、それぞれ一般的なコンピュータ構成をもち、中央演算装置（CPU）２１１ａ、２１１ｂ、２１１ｃ、２１１ｄ、２１１ｅ、OS２１２ａ、２１２ｂ、２１２ｃ、２１２ｄ、２１２ｅ、ネットワーク１０３に接続される通信コントローラ２１３ａ、２１３ｂ、２１３ｃ、２１３ｄ、２１３ｅ、主記憶装置（メモリ）２１４ａ、２１４ｂ、２１４ｃ、２１４ｄ、２１４ｅ、I/Oコントローラ２１５ａ、２１５ｂ、２１５ｃ、２１５ｄ、２１５ｅ及びこれらを接続するシステムバス２１６ａ、２１６ｂ、２１６ｃ、２１６ｄ、２１６ｅなどを含むデータ処理装置２０１ａ、２０１ｂ、２０１ｃ、２０１ｄ、２０１ｅと、I/Oコントローラ２１５ａ、２１５ｂ、２１５ｃ、２１５ｄ、２１５ｅに接続されるキーボードやマウス及びディスプレイなどのようなデータ入出力装置２０２ａ、２０２ｂ、２０２ｃ、２０２ｄ、２０２ｅと、ディスクデバイスのようなデータ記憶装置２０３ａ、２０３ｂ、２０３ｃ、２０３ｄ、２０３ｅなどから構成される。
【００３６】
図１及び図３に示すプログラムの機能は、OS２１２ａ、２１２ｂ、２１２ｃ、２１２ｄ、２１２ｅの管理のもとで、CPU２１１ａ、２１１ｂ、２１１ｃ、２１１ｄ、２１１ｅがメモリ２１４ａ、２１４ｂ、２１４ｃ、２１４ｄ、２１４ｅに格納されたプログラムを実行することにより実現される。
【００３７】
図３は図１に示す本発明の実施形態におけるデータベースシステムの機能構成を示す概略図である。
データベースシステム１０１は、ＡＰ１１２の動作するクライアントのノード１１１と、ＡＰ１１２からの問い合せ要求を受け付けるFES１２２の動作をするノード１２１と、ディクショナリ情報１３３を管理するディクショナリサーバ（DS）１３２が動作するノード１３１と、データベース処理を並列に実行する複数のBES１２−１、１４２−２、…、１４２−ｎが動作する複数のノード１４１−１、１４１−２、…、１４１−ｎと、外部ファイル１５２−１、１５２−２、…、１５２−ｎを保持するノード１５１−１、１５１−２、…、１５１−ｎから構成される。
【００３８】
これらのノードは、ネットワーク１０３によって相互結合されている。ＡＰ１１２は、ユーザの要求に応じたデータ処理を行なうコードを含むアプリケーション部１１４と、データベースサーバとの通信を管理するクライアント通信部１１５からなる。アプリケーション部１１４は、BLOBデータを外部ファイルに出力する機能をもつ関数の実行を要求するコード１１３を含む。
【００３９】
FES１２２は、クライアントからの要求の受信及びクライアントへのデータベース処理結果の返信などを管理するFES通信部１２４と、クライアントからの要求を解析し、データベース処理の実行手順を示す実行手順コード１２３を生成する要求解析部１２５からなる。
【００４０】
BES１４２−１、１４２−２、…、１４２−ｎは、FES１２２からの要求の受信及びFES１２２へのデータベース処理結果の返信などを管理するBES通信部１４６と、実行手順コード１２３に含まれる指示に従ってデータベース処理を行なう処理実行部１４７と、データを保持するデータストア１４４−１、１４４−２、…、１４４−ｎへのアクセスを管理するデータアクセス管理部１４８−１、１４８−２、…、１４８−ｎからなる。
【００４１】
以降では、アプリケーションの例を用いて、本発明を適用したデータベース処理を詳細に説明する。
以下では、データベースシステム１０１において、従業員に関する情報を管理する例を用いる。ＡＰ１１２は、設計部署に所属するすべての従業員の名前と写真を問い合わせて、結果を一覧表示するプログラムであるとする。
従業員の情報は、表employeeを用いて表わす。表employeeは、従業員番号を表わすための列empno、従業員の名前を表わすための列name、従業員の所属部署を表わすための列dept、従業員に関する写真データを表わすための列photoからなる。
【００４２】
図４に表employeeを定義するSQL定義文４０１を示す。以下、各行の意味を示す。
４０２：employeeという名称の表の定義で、以下の列からなる。
４０３：INTEGER型の列で、列名称がempno
４０４：VARCHAR型（30バイト以内）の列で、列名称がname
４０５：VARCHAR型（30バイト以内）の列で、列名称がdept
４０６：BLOB型（10メガバイト以内）の列で、列名称がphoto
定義文４０１をもとに一般的なデータベース処理を行なうことによって、ディクショナリ情報１３３に表の定義を登録する。
この登録により、データベースサーバ１０２は、のちにディクショナリ情報１３３を参照し、表における列の構成の情報や、表の定義に従って格納されるデータにアクセスするための情報などが取得できる。
【００４３】
図５は前記４０１の定義に基づいて従業員に関するデータを格納した表の概要図である。
行データを格納する表５０１は、列empno５１１、列name５１２、列dept５１３、及び列photo５１４からなる。
【００４４】
行データの意味は以下に示す通りである。
５２１：列empno，name，deptの値がそれぞれ、INTEGER型の整値1789，VARCHAR型の文字列George，VARCHAR型の文字列designであり、列photoの値は、BLOBデータの識別情報（blob1）である。
このデータ５２１は、従業員番号が1789、名前がGeorge、所属部署が設計部、写真データが(blob1)で識別されるBLOBデータであることを表わしている。
なお、列値のBLOBデータに関しては、BLOBデータの識別情報を列値に保持しておき、BLOBデータの実体はデータストア中の別の領域に保持する一般的な方法によって格納する。
以下、同様の行データについて簡単に意味を示す。
５２２：列empno，name，deptの値がそれぞれ、INTEGER型の整値1797，VARCHAR型の文字列John，VARCHAR型の文字列accountであり、列photoの値は、BLOBデータの識別情報(blob2)である。
５２３：列empno，name，deptの値がそれぞれ、INTEGER型の整値1801，VARCHAR型の文字列Thomas，VARCHAR型の文字列designであり、列photoの値は、BLOBデータの識別情報(blob3)である。
５２４：列empno，name，deptの値がそれぞれ、INTEGER型の整値1809，VARCHAR型の文字列James，VARCHAR型の文字列generalであり、列photoの値は、BLOBデータの識別情報(blob4)である。
５２５：列empno，name，deptの値がそれぞれ、INTEGER型の整値1829，VARCHAR型の文字列Andrew，VARCHAR型の文字列accountであり、列photoの値は、BLOBデータの識別情報(blob5)である。
５２６：列empno，name，deptの値がそれぞれ、INTEGER型の整値1837，VARCHAR型の文字列Martin，VARCHAR型の文字列planningであり、列photoの値は、BLOBデータの識別情報(blob6)である。
【００４５】
次に、BLOBデータを外部ファイルに書き出す機能を提供する関数fileout()について説明する。
関数fileout()のインタフェース仕様は、入力（関数の引数）が、BLOB型のデータであり、出力（関数の戻り値）が、VARCHAR型（255バイト以内）の文字列ある。
この関数fileout()の機能は、引数で入力されたBLOBデータの内容を外部ファイルに書き出すことであり、BLOBデータの内容を書き出す外部ファイルの名称は、本関数自体で作成する。そして、BLOBデータの内容を書き出した外部ファイルの名称を関数の戻り値として返す。
【００４６】
図３のノード１５１−１、１５１−２、…、１５１−ｎで共用のファイルシステム領域に外部ファイルを作成する。
【００４７】
本関数fileout()の処理内容については、図１４で説明する。
【００４８】
関数fileout()は図６のようなSQL定義文で定義する。
関数の定義文６０１の各行の意味を以下に示す。
６０２：fileoutという名前の関数の定義であり、BLOB型の値を引数とする。
６０３：戻り値がVARCHAR型（255バイト以内）の値である。
６０４：この関数の機能を実装している実行可能なコード（関数実装コード）をbin/fileoutというファイルに保持している。
６０５：関数実装コードのソースコードはC言語で記述されている。
【００４９】
定義文６０１をもとに一般的なデータベース処理を行なうことによって、ディクショナリ情報１３３（図３）に関数の定義を登録する。
この登録により、データベースサーバ１０２は、のちにディクショナリ情報１３３を参照し、関数fileout()の入出力や関数実装コードがbin/fileoutであることなどの関数を実行するための情報を取得することができる。
【００５０】
図７は、ＡＰ１１２のアプリケーション部１１４における処理の概要を示すフローチャートである。
本図では、設計部署に所属するすべての従業員の写真データを一覧表示する処理（７０１）を示している。
まず、「設計部署に所属するすべての従業員の名前と写真データを取得せよ」という問い合せ要求を行なう（７０２）。
次に、問い合せ要求の結果を一件取り出す（７０３）。取り出した結果のデータが得られたか判定する（７０４）。取り出した結果のデータがある場合は、結果のデータを一覧表に設定し（７０５）、７０３のステップに戻る。
ステップ７０４で取り出した結果のデータがない場合、すなわち、すべての検索結果データを取得した場合には、結果データの一覧表を出力して（７０６）、処理を終了する（７０７）。
【００５１】
図８は図７の処理を行なうアプリケーションを作成するためのソースコードの一部を示す。
アプリケーションのソースコードの一部８０１の各行の意味を以下に示す。
８０２：SQL変数の宣言の開始
８０３：変数photoFilenameの宣言（外部ファイル名を保持する）
８０４：変数empNameの宣言（従業員名を保持する）
８０５：SQL変数の宣言の終了
８０６：行８０７〜８０９のSQL検索文に対するカーソルcurs1を定義
８０７：検索の射影項目が、列nameと、列photoを引数とする関数fileout()のコールである
８０８：検索対象の表がemployee
８０９：検索の条件は、列deptの値が文字列値design（所属部署が設計部）であること
８１０：カーソルのオープン要求
８１１：以下、行８１５までの処理を繰り返す
８１２：カーソルcurs1に対するフェッチ要求。結果を変数empName, photoFilenameに保持する。
８１３：フェッチした結果のデータがない場合は、繰り返し処理を抜ける。
８１４：関数setImageDataToList()をコールする。引数に従業員名と外部ファイル名を渡す。ここで、関数setImageDataToList()は、図示していないがアプリケーションにリンクされたコードであり、一般的なリスト構造をもつデータに結果データを設定する機能をもつ。
８１５：行８１１からの繰り返し処理の範囲の終わりを示す。
８１６：カーソルのクローズ要求、
８１７：関数displayImageDataList()をコールする。
【００５２】
ここで、関数displayImageDataList()は、図示していないがアプリケーションにリンクされたコードであり、関数setImageDataToList()で設定された結果データのリストをもとに、結果の一覧のHTML(Hypertext Markup Language)テキストファイルを作成し、HTMLブラウザで一覧を出力する簡単なデータ操作機能をもつ。画像ファイルを読み込んで表示する。
【００５３】
ソースコード８０１では、図４に定義した表employee及び図６に示した関数fileout()を利用している。
また、データベースサーバが外部ファイル名を返却しており、ソースコードでファイル名を作成したりファイルをコピーする必要のない、簡単な記述になっている。
【００５４】
なお、ソースコード８０１を用いて、以下のような一般的な手順でＡＰ１１２を作成する。
（１）アプリケーションのソースコードを、一般的にデータベースシステムのアプリケーション開発用のツールに含まれるプリプロセッサを通してホスト言語のソースコードに変換する。
（２）ホスト言語のコンパイラを用いて、変換したソースコードからオブジェクトコードを作成する。このオブジェクトコードがＡＰ１１２のアプリケーション部１１４となる。特に、SQL文で関数をコールする部分（行８０６〜８１０、８１１）をもとに、関数実行要求１１３が作成される。
（３）クライアント通信部１１５の機能をもつコードを含むライブラリとリンクすることによりＡＰを生成する。
【００５５】
図９は、図７及び図８で示したＡＰ１１２の処理中に、図１１〜図１４に示す処理によって得られる検索結果を示す図である。
データベースの検索結果は、ソースコードの行８０７〜８０９で指定した検索要求文に応じて、設計部署に所属する従業員の名前とその従業員に関する画像データを保持する外部ファイルの名称とを組みとする行を含む表９０１となる。
【００５６】
検索結果の表９０１は、検索文の射影項目にnameと指定したことに対する列（９１１）と、検索文の射影項目にfileout(photo)と指定したことに対する列（９１２）からなる。
各行データの意味は次の通りである。
９２１：列９１１の値がGeorge、列９１２の値がdbsvexfile1である。
これは、従業員の名前がGeorgeで、その従業員に関する写真データがdbsvexfile1という名称の外部ファイルに保持されていることを示している。
９２２：列９１１の値がThomas、列９１２の値がdbsvexfile2である。
これは、従業員の名前がThomasで、その従業員に関する写真データがdbsvexfile2という名称の外部ファイルに保持されていることを示している。
【００５７】
図１０は図９の検索結果をもとにＡＰ１１２が作成する結果一覧のHTMLテキストである。
HTMLテキスト（１００１）の各行の意味を以下に示す。
１００２：HTMLテキストの開始、
１００３：文字列George:と、ファイル名dbsvexfile1に保持している画像データを表示して、改行する指示。
１００４：文字列Thomas:と、ファイル名dbsvexfile2に保持している画像データを表示して、改行する指示、
１００５：HTMLテキストの終了、
ＡＰ１１２は、このHTMLテキスト１００１を、一般的なHTMLブラウザ機能の入力にすることにより、結果一覧（従業員名とその従業員に関する写真）を表示する。HTMLブラウザ機能からファイルdbsvexfile1、dbsvexfile2の画像データが読み込まれて表示される。
【００５８】
図１１はＡＰ１１２における問い合せ要求から結果取得までの処理の概要を示すフローチャートである。
図７のフローチャートのステップ７０３で問い合せ要求し、結果を取得する処理（１１０１）を示す。
まず、ＡＰ１１２がアプリケーション部１１４に含まれる問い合せ要求を実行する（１１０２）。この問い合せ要求は、クライアント通信部１１５が提供するデータベース処理実行要求発信の機能をコールする。
次に、クライアント通信部１１５が、データベースサーバ１０２のFES１２２に問い合せ要求を送信する（１１０３）。FES１２２において問い合せ要求を受信したのちのデータベース処理の詳細については、図１２〜図１４を用いて後述する。
クライアント通信部１１５は、FES１２２からの返信待ちの状態になり（１１０４）、FES１２２からの返信を受け取ると（１１０５）、クライアント通信部１１５は返信されたデータベース処理結果を編集してアプリケーション部１１４に結果を渡し（１１０６）、処理を終了する（１１０７）。
【００５９】
図１２は図１１のステップ１１０３に応じてFES１２２において行なわれるデータベース処理（１２０１）のフローチャートである。
まず、FES１２２のFES通信部１２４がクライアント通信部１１５からの問い合せ要求を受信する（１２０２）。
次に、要求解析部１２５が受信した問い合せ要求の解析を行なう（１２０３）。問い合せ要求の解析では、要求解析部１２５はDS１３２に要求してディクショナリ情報１３３を参照し、ＡＰが要求するデータにアクセスするための情報や、関数を実行するための情報などを取得する。
ここでは、表employeeに対する検索要求であることを認識し、図４の定義をもとに図５のように格納された表employeeの行データについて、条件を満たす行データを逐次処理する手順にすることを選定する。
また、問い合せ中に関数fileout()の実行要求があることを認識し、図６の定義をもとに関数実行コード１４３を実行するための情報を取得する。
続いて、要求解析部１２５は、１２０３で解析した結果をもとに、BES１４２−１、１４２−２、…、１４２−ｎでデータベース処理を行なうための実行手順コード１２３を作成する（１２０４）。
実行手順コード１２３には、図５に示したような表emplyoeeに格納される行データへアクセスする手順のコードや、関数実装コード１４３を実行する手順のコードなどが含まれる。
次に、FES通信部１２４が実行手順コード１２３を用いて、データベース処理を実行するように、BES１４２−１、１４２−２、…、１４２−ｎに処理実行要求を送信する（１２０５）。
BES１４２−１、１４２−２、…、１４２−ｎにおけるデータベース処理については、図１３で詳細に説明する。
次に、FES通信部１２４は、BES１４２−１、１４２−２、…、１４２−ｎからの返信を待つ（１２０６）。
FES通信部１２４は、BES１４２−１、１４２−２、…、１４２−ｎからの返信をがすべてそろったかを判定し（１２０７）、すべての返信がそろったら、返信に含まれるデータベース処理結果を編集して、問い合せ要求元であるクライアント通信部１１５に返信し（１２０８）、処理を終了する（１２０９）。
【００６０】
図１３はBES１４２−１、１４２−２、…、１４２−ｎにおいて、実行手順コード１２３に従ってデータベース処理を実行する処理の概要を示すフローチャートである。
図１２のステップ１２０５のデータベース処理実行要求に応じた処理（１３０１）を示す。
まず、BES通信部１４６（図３）がFES通信部１２４からのデータベース処理実行要求を受信する（１３０２）。
このデータベース処理実行要求には、実行手順コード１２３が含まれる。
次に、処理実行部１４７が通信データに含まれる実行手順コード１２３を解析する（１３０３）。
ここでは、図５のように格納された表employeeの行データで条件を満たす行データについて、列name、列photoの列値のみを取得し、逐次関数実装コード１４３を実行すべきことが認識される。以降その解析によって認識した実行手順に従って処理を行なう。
処理実行部１４７（図３）は、ステップ１３０３での実行手順コード１２３の解析結果に従い、検索条件を満たす行データを取得するようデータアクセス管理部１４８に要求する（１３０４）。
ここでは、列deptの値が文字列値designであるような行データを要求する。
【００６１】
次に行データを取得できたかどうかを判定し（１３０５）、取得できた場合は、実行手順コード１２３の解析結果に従い、取得した列photoの値に対して関数実装コード１４３（bin/fileout）を実行する（１３０６）。
ここでは、BESが動作しているプログラムが関数実装コードbin/fileoutを動的にリンクして実行する。このとき、列photoの列値であるBLOBデータを扱うためのBLOBロケータを引数として渡す。BLOBロケータは、SQL3で規定されているように、BLOBデータと関連付けられた値とする。BESが動作しているプログラムからは、実際のBLOBデータの内容を直接保持せずに、この値を介してBLOBデータに対する操作を行なうことができるものとする。
関数実装コードの実行の結果、戻り値として、外部ファイル名となるVARCHAR型の値を取得する。
関数実装コードbin/fileoutにおける処理については、図１４で説明する。
次に、取得した列値及び関数の戻り値をもとに、データベース処理結果の列データを作成して保持しておき（１３０７）、１３０４からの処理を繰り返す。
また、１３０５で検索条件を満たすデータを取得できなかった場合、すなわち、条件を満たすすべてのデータを取得してしまった場合は、データベース処理結果の列データを編集し（１３０８）、処理を終了する（１３０９）。
【００６２】
この処理において、列deptの値がdesignである、すなわち、設計部署に所属する５２１、５２３の行データ（それぞれ従業員George，Thomasに対応するデータ）が処理され、図９の結果表の列データ９２１、９２２（従業員名と外部ファイル名を組みとする列データ）の元になるデータが作成される。
【００６３】
図１４は、関数fileout()の実装コードであるbin/fileoutの処理の概要を示すフローチャートである。
本図では、図１３のステップ１３０６において実行されるbin/fileoutの処理（１４０１）を示す。
まず、図３のノード１５１−１、１５１−２、…、１５１−ｎ上の共用のファイルシステムの領域に、外部ファイル１５２−１、１５２−２、…、１５２−ｎを作成し、ファイルをオープンする（１４０２）。
ここで、Cライブラリの関数tempnam()の機能を用いて外部ファイルの名称を作成する。これにより、外部ファイルがこの名称で一意に識別されるようにする。次に、引数として入力されたBLOBデータのロケータを用いて、メモリ上のバッファへBLOBデータを部分的に読み込み、１４０２でオープンしたファイルにデータを書き出す（１４０３）。
次に、BLOBデータをすべて書き出したかどうかを判定する（１４０４）。
まだすべて書き出していない場合は、１４０３に戻り、これまでに読み込んだデータの続きを読み出し、外部ファイルに書き出す。
BLOBデータをすべて外部ファイルに書き出した場合は、外部ファイルをクローズし（１４０５）、外部ファイル名を戻り値として（１４０６）、処理を終了する（１４０７）。
【００６４】
ここでは、外部ファイルを識別する名称がデータベースサーバによって作成されることになり、前述したようにアプリケーションのソースコードの記述が簡単になる。また、戻り値の外部ファイル名称が処理結果としてＡＰ１１２に渡され、ＡＰ１１２においても共用のファイルシステム領域にある外部ファイル１５２−１、１５２−２、…、１５２−ｎを参照することができる。
【００６５】
また、並列データベース処理では、BES１４２−１、１４２−２、…、１４２−ｎのそれぞれが複数の外部ファイルに並列にBLOBデータを出力するので、前述の公知技術でのクライアントのみで出力する場合に比べて高速に処理することができる。
【００６６】
次に、本発明の他の実施例を、図１５を用いて説明する。
図１５は、１つのノードで構成したデータベースシステムの概要を示す概念図である。
データベースシステム１０１−ａは、１つのノード１５０１からなり、機能構成は図１および図３に示した構成と同じである。図１５には主要な機能のみを示す。
【００６７】
この構成において、上記のAP１１２を実行した場合と同等の処理を行なう。
すなわち、ＡＰ１１２−ａがデータベースサーバ１０２−ａに問い合せ要求を行ない（１５１１）、データベースサーバ１０２−ａが実装関数コード１４３−ａを実行し、データストア１４４−ａに保持しているBLOBデータ１４５−ａを読み出して（１５１２）、外部ファイル１５２−ａに出力する（１５１３）。そして、ＡＰ１１２−ａが外部ファイル１５２−ａを参照してBLOBデータ１４５−ａを取得する（１５１４）。
【００６８】
この処理では、ＡＰ１１２−ａがBLOBデータ１４５−ａを取得するまでのデータの流れは以下の通りである。
（１）データベースサーバ１０２−ａがBLOBデータ１４５−ａを読み込む。
（２）データベースサーバ１０２−ａがBLOBデータ１４５−ａを外部ファイル１５２−ａに出力する。
（３）ＡＰ１１２−ａが外部ファイル１５２−ａからBLOBデータ１４５−ａを読み込む。
【００６９】
この間は、BLOBデータをネットワーク通信またはプロセス間通信で転送することはないので、前述した公知技術で必ずデータ転送がある処理と比べて、高速に処理することができる。
【００７０】
なお、上述したフローチャートの処理は、データ処理装置でプログラムを実行することによって実現できる。また、そのプログラムは、ハードディスク装置、フロッピーディスクなどのコンピュータで読み書きができる記憶媒体に格納することができ、ネットワークを通してプログラムにアクセスすることができる。
【００７１】
【発明の効果】
クライアント−サーバ構成のデータベースシステムで外部ファイルを介して長大なデータを扱う場合に、データベースサーバが長大データを外部ファイルに出力し、ユーザアプリケーションが外部ファイルを参照して（外部ファイルを共用して）長大データを取得する手段をもつため、クライアント−サーバ間で長大データを転送することなく、高速に処理することが可能となる。
【００７２】
また、データベースサーバが外部ファイルの名称を作成する手段をもつため、アプリケーションで複数の外部ファイルを利用する場合に逐一名称を指定する必要がなく、アプリケーションの記述を簡易することが可能となる。
【００７３】
また、並列データベース構成でデータベースサーバが複数のBLOBデータを並列に外部ファイルに出力する手段をもつため、高速に外部ファイルにBLOBデータを出力することが可能となる。
【図面の簡単な説明】
【図１】本発明の実施形態１の長大データを外部ファイルを介して扱う処理の概要を示す概念図。
【図２】図１に示す本発明の実施形態におけるハードウェアの構成を示す概略図。
【図３】図１に示す本発明の実施形態におけるデータベースシステムの機能構成を示す概略図。
【図４】表employeeを定義するSQL定義文を示す図。
【図５】表employeeに格納する行データを示す図。
【図６】関数fileout()を定義するSQL定義文を示す図。
【図７】アプリケーション部における処理のフローチャート。
【図８】アプリケーションのソースコードの記述の一部を示す図。
【図９】アプリケーションにおける検索結果の表を示す図。
【図１０】アプリケーションが作成する検索結果一覧を示す図。
【図１１】ＡＰにおける問い合せ要求から結果取得までの処理のフローチャート。
【図１２】データベースサーバのFESにおけるデータベース処理のフローチャート。
【図１３】データベースサーバのBESにおけるデータベース処理のフローチャート。
【図１４】  fileout実装関数の処理のフローチャート。
【図１５】１つのノードで構成したデータベースシステムの概要を示す概念図である。
【符号の説明】
１０２…データベースサーバ、１０３…ネットワーク、１１３…外部ファイル出力関数実行要求、１２２…データベース処理要求を受け付けるフロントエンドサーバ(FES)、１３２…ディクショナリ情報を管理するディクショナリサーバ(DS)、１４２…データベース処理を実行するバックエンドサーバ(BES)、１４３…外部ファイル出力の機能を持つ関数実装コード、１５２…外部ファイル。
【図１】
0003863291.tif 000002
【図２】
0003863291.tif 000003
【図３】
0003863291.tif 000004
【図４】
0003863291.tif 000005
【図５】
0003863291.tif 000006
【図６】
0003863291.tif 000007
【図７】
0003863291.tif 000008
【図８】
0003863291.tif 000009
【図９】
0003863291.tif 000010
【図１０】
0003863291.tif 000011
【図１１】
0003863291.tif 000012
【図１２】
0003863291.tif 000013
【図１３】
0003863291.tif 000014
【図１４】
0003863291.tif 000015
【図１５】
0003863291.tif 000016