JP2007066017A - データベースに対するアクセスを制御するシステム、およびその方法 - Google Patents

データベースに対するアクセスを制御するシステム、およびその方法 Download PDF

Info

Publication number
JP2007066017A
JP2007066017A JP2005251594A JP2005251594A JP2007066017A JP 2007066017 A JP2007066017 A JP 2007066017A JP 2005251594 A JP2005251594 A JP 2005251594A JP 2005251594 A JP2005251594 A JP 2005251594A JP 2007066017 A JP2007066017 A JP 2007066017A
Authority
JP
Japan
Prior art keywords
access
instruction
accessed
join
record
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2005251594A
Other languages
English (en)
Other versions
JP3962417B2 (ja
Inventor
Toshio Suganuma
菅沼 俊夫
Satoshi Koseki
古関 聰
Hideaki Komatsu
小松 秀昭
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2005251594A priority Critical patent/JP3962417B2/ja
Priority to US11/503,620 priority patent/US7676456B2/en
Publication of JP2007066017A publication Critical patent/JP2007066017A/ja
Application granted granted Critical
Publication of JP3962417B2 publication Critical patent/JP3962417B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24537Query rewriting; Transformation of operators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2425Iterative querying; Query formulation based on the results of a preceding query
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】データベースに対するアクセスをこれまでよりも効率化する。
【解決手段】データベースに対するアクセスを制御するシステムであって、データベースに対するアクセス命令を複数含むアクセスプログラムを取得する取得部と、データベースのうち、複数のアクセス命令によってアクセスされる互いに異なる複数のテーブルを検出する検出部と、検出された複数のテーブルを結合した結果テーブルをデータベースから取得する結合命令を、当該複数のアクセス命令に先立って実行させる結合制御部と、複数のアクセス命令によってアクセスされるレコードを結果テーブルから抽出して複数のアクセス命令によってアクセス可能な構造に変換する変換命令を、これら複数のアクセス命令よりも先に実行させる変換制御部とを備えるシステムを提供する。
【選択図】図4

Description

本発明は、データベースにアクセスするシステム、およびその方法に関する。特に、本発明は、そのアクセスを制御するシステム、およびその方法に関する。
ビジネス・アプリケーションプログラムは、データベース(以下、DB)中の互いに関連する複数のテーブルをアクセスする場合がある。例えば、あるプログラムは、まず顧客の属性を管理するCustomerというテーブルにアクセスしてある特定の顧客データを入手する。次に、そのプログラムは、顧客の口座を管理するAccountというテーブルにアクセスしてその顧客に対応する口座データを取得する。このプログラムにおいて、これらの2つのテーブルに対するクエリは、逐次にかつ別々に発行される。
この例において、2回目のアクセスは、1回目のアクセスにより得られたデータをキーにして行われる。即ち、2回目のアクセスにより得られるデータは、1回目のアクセスにより得られるデータに依存する。このため、変数値のデータ依存性を利用する既存の最適化技術によっては、これらのアクセスは1つに統合できないという問題があった。
この問題は、特に、このビジネスロジックを繰り返すバッチ処理において顕著になる。バッチ処理を最適化するには、バッチ処理のチェックポイント毎に次の処理に用いるデータを予めキャッシュする方法が考えられる。例えば、アクセスキーを示す変数の値を解析することによりアクセスされるデータの範囲を特定し、その範囲のデータを予めDBから取得しておくことができる。
しかしながら、上述のAccountというテーブルについては、アクセスキーがCustomerというテーブルに記録されているので、どの範囲のデータがアクセスされるかを予め特定できない。このため、データをDBから予め取得することができず、バッチ処理中の繰り返し処理の毎にDBに対するアクセスが発生し、プログラム全体として効率が悪くなる場合があった。
また、他の例として、プログラムは、同一のキーにより複数の異なるテーブルをアクセスする場合がある。この場合には、プログラムは、テーブル毎にクエリを発行する。しかしながら、DBに対するクエリは外部の通信回線を経由する場合が多く、その回数が増えるとプログラム全体の効率が悪くなる場合があった。
これに関し、従来、DBに対するアクセスを制御する技術が提案されている。これらの概要を述べる。
1)検査ループ(Inspection Loop)の生成
テーブルAに対するアクセスの結果得られたデータに基づいてテーブルBにアクセスする場合に、テーブルBに対するアクセスを効率化する技術である。この技術においては、プログラムの実行中に、実際にテーブルAから得られた結果セットに対して検査ループを実行して、テーブルBをアクセスするキーのセットを求める。そして、そのキーのセットによりアクセスされる範囲のデータをテーブルBから予め取得する命令コードを動的に生成する。
2)CMR(Container Managed Relationship)を使った先読み(read−ahead)機構の使用
この方法では、アプリケーションサーバーにおいて、互いに関連する複数のテーブルがあることをプログラマが指定できる仕組みが提供される。指定された複数のテーブルは、結合演算によってDBから読み出され、プログラムから参照可能なキャッシュに記録される(非特許文献1および2を参照。)。具体的には、プログラマは、deployment descriptorと呼ばれる指定子によって関連ある複数のテーブルを指定する。キャッシュを管理するEJB (Enterprise Java Beans)コンテナは、この指定子に基づいてSQLを発行する。なお、Javaは登録商標である。
WebSphere journal URL, http://websphere.sys-con.com/read/43288.htm WebSphere information center URL, http://publib.boulder.ibm.com/infocenter/wasinfo/v5r0/index.jsp?topic=/com.ibm.websphere.base.doc/info/aes/ae/cejb_read.html
しかしながら、上述の検査ループを生成する技術において、テーブルAに対するクエリを発行して検査対象のデータを生成する処理は、プログラム本来の処理ではない。また、検査ループを実行させてアクセスキーを解析する処理も、プログラム本来の処理ではない。このため、これらの処理の追加によって、プログラム全体の効率が低下するおそれがある。また、テーブルBに対して動的にSQLを生成するので、そのSQL文に対して静的な最適化を行うことができない。また、検査ループの処理によってプログラムが複雑になり、プログラムの保守性・堅牢性が低下するおそれがある。
また、上記のCMRを使った技術においては、プログラマが互いに関係するテーブルを指定しなければならず、プログラマの負担が大きい。また、この技術をバッチ処理に適用する場合において、既存のプログラムの構造を変更しないことを条件とすると、この技術の適用範囲は広くない。即ち、バッチ処理においては同様の処理を繰り返すが、ある繰り返し処理によってアクセスされるレコードと、他の繰り返し処理によってアクセスされるレコードとの間の関係を、このdeployment descriptorによって指定することはできない。従って、繰り返し処理の開始前に必要なレコードを一括して取得するといった最適化を実現できない。
その他、プログラマが手動でSQLを書換える最適化も考えられるが、プログラマの能力・経験によってその効率は様々であり、プログラム毎に費用や時間をかけてプログラムを書き換えなければならず、現実的でない。また、EJB(Enterprise Java Beans)のプログラムにおいてこのような書換えを行うには、プログラムを大幅に変更する必要がある。具体的には、EJB(Enterprise Java Beans)のプログラミングモデルにおいて、DBの各レコードはentity beanで表現され、getterまたはsetterというメソッドでアクセスされる。プログラマは、これらのメソッドを用いれば、DBの構造を意識することなく必要なレコードを取得することができる。複数のアクセスを手動で1つに統合する作業は、このようなプログラミングモデルに反し、例え可能であってもプログラムの保守性を大幅に低下させてしまう。
そこで本発明は、上記の課題を解決することのできるシステム、方法、および、プログラムを提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
上記課題を解決するために、本発明においては、データベースに対するアクセスを制御するシステムであって、データベースに対するアクセス命令を複数含むアクセスプログラムを取得する取得部と、データベースのうち、複数のアクセス命令によってアクセスされる互いに異なる複数のテーブルを検出する検出部と、検出された複数のテーブルを結合した結果テーブルをデータベースから取得する結合命令を、当該複数のアクセス命令に先立って実行させる結合制御部と、複数のアクセス命令の各々に、結果テーブルをアクセスさせる制御を行うアクセス制御部とを備えるシステム、当該システムとして情報処理装置を機能させる方法、および、プログラムを提供する。
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
本発明によれば、データベースに対するアクセスをこれまでよりも効率化できる。
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
図1は、情報処理システム10の全体構成を示す。情報処理システム10は、アプリケーションサーバシステム30と、DB管理サーバ40と、DB45とを備える。アプリケーションサーバシステム30は、アクセスプログラム20を取得して実行する。そして、アプリケーションサーバシステム30は、アクセスプログラム20に記述された指示に基づいて、DB45をアクセスするための要求をDB管理サーバ40に送信する。より詳細には、アプリケーションサーバシステム30は、J2EE(Java2 Enterprise Edition)の仕様を実現する仮想マシンを搭載しており、また、JDBC(Java DataBase Connectivity)の機能を搭載している。そして、アプリケーションサーバシステム30は、Java(登録商標)で記述されたアクセスプログラム20を取得し、それに対して必要な最適化を行って実行する。
DB管理サーバ40は、アプリケーションサーバシステム30から受けた要求に応じてDB45からデータを取得し、アプリケーションサーバシステム30に返信する。DB45は、アプリケーションサーバシステム30によりアクセスされるデータを記録している。例えば、DB45は、表形式のデータをキーにより検索可能に格納した、関係データベースと呼ばれる構造を採ってもよい。また、アプリケーションサーバシステム30は、DB45から取得したデータを一時的に格納するバッファメモリ35を有する。バッファメモリ35は、例えば、EJBコンテナのBeanキャッシュと呼ばれる記憶領域であり、DB45を構成するテーブルのレコードを、Beanと呼ばれるオブジェクト形式で記憶する。
ここで、アプリケーションサーバシステム30およびDB管理サーバ40間は、電気通信回線で接続されており、その通信速度は比較的低速な場合がある。このような場合には、アプリケーションサーバシステム30がDB45に対して頻繁にアクセスすると、通信時間が長くなり処理の効率が低下する。本実施例に係るアプリケーションサーバシステム30は、アクセスプログラム20の処理内容を解析することにより、アクセスプログラム20による処理結果を変更しない限りにおいてDB45に対するアクセス頻度を低減し、処理を効率化することを目的とする。
図2は、アクセスプログラム20の一例を示す。1行目から37行目までのプログラムコードは、全体で1つのバッチ処理を示す。3行目のプログラムコードは、バッチ処理用の入力データを取得する処理を示す。そして、11行目から31行目までのプログラムコードは、バッチ処理におけるトランザクション処理の実体を示す。8行目のプログラムコードは、トランザクション処理の開始を示す。
11行目から31行目のプログラムコードは、チェックポイントの候補を境界としてバッチ処理を分割した内側ループを示す。チェックポイントの位置は予め静的に定められていなくともよく、チェックポイントの候補の中から管理ポリシーによって動的に定められてもよい。即ち例えば、バッチ処理がオンライン処理と平行する昼間の運用時は、バッチ処理のみを行う夜間の運用時と比較して、チェックポイントの間隔を短く設定してもよい。
内側ループにおいて、16行目のプログラムコードは、変数customerKeyをプライマリ・キーとしてテーブル中のレコードを取得する処理を示す。同様に、21行目のプログラムコードは、変数creditKeyをプライマリ・キーとしてテーブル中のレコードを取得する処理を示す。同様に、26行目のプログラムコードは、変数debitKeyをプライマリ・キーとしてテーブル中のレコードを取得する処理を示す。
また、33行目のプログラムコードは、チェックポイントのためのコンテナサービスを呼び出す処理を示す。35行目のプログラムコードは、トランザクション処理の処理結果をコミットする処理を示す。
図3は、相互に所定の関係を有する複数のテーブルの例を示す。図3(a)は、図2に示すアクセスプログラム20においてアクセスされる複数のテーブルについて、それらのテーブルから生成されるBeanの間の関係を示す。ここでBeanとは、テーブルから読み出されたレコードをJavaプログラムによってアクセス可能な形式に変換したオブジェクトをいう。
図3(a)に示すように、Bean「customer」は、入力データ「input」に依存する。即ち、第1のテーブルの一例であるテーブル「customer」は、入力データ「input」に基づき、第1のアクセス命令によってアクセスされる。また、Bean「creditAccount」は、Bean「customer」に依存する。即ち、第2のテーブルの一例であるテーブル「creditAccount」は、テーブル「customer」から読み出したレコード中の要素をキーとして第2のアクセス命令によりアクセスされる。
また、Bean「customer」は、入力データ「input」に依存する。即ち、第1のテーブルの一例であるテーブル「customer」は、入力データ「input」に基づき、第1のアクセス命令によってアクセスされる。また、Bean「debitAccount」は、Bean「customer」に依存する。即ち、第2のテーブルの一例であるテーブル「debitAccount」は、テーブル「customer」から読み出したレコード中の要素をキーとして第2のアクセス命令によりアクセスされる。
このように、アクセスプログラム20によれば、アプリケーションサーバシステム30は、データベースに対して1回目にアクセスした結果に基づいて2回目のアクセスを行う。ここで、1回目にアクセスするデータの範囲は、バッチ処理の内側ループを開始する前に解析できる場合がある。例えば、テーブル「customer」は、入力データ「input」に基づいてアクセスされ、入力データ「input」の内容は内側ループの開始に先立って判明する。このため、内側ループの外側、例えば、9行目において、テーブル「customer」から予め必要なデータを取得する最適化が可能である。
一方で、2回目にアクセスされるデータの範囲は、1回目にアクセスした結果に依存するので、予め特定できない場合が多い。即ち、アクセスプログラム20において、Bean「creditAccount」は、Bean「customer」に依存する。そして、Bean「customer」の内容は、内側ループの開始時には判明していない。このため、内側ループ内の例えば21行目において、内側ループの繰り返しの毎にテーブル「creditAccount」に対するアクセスが発生する。本実施例に係るアプリケーションサーバシステム30は、このような非効率なアクセスの回数を低減することを目的とする。
図3(b)は、以上の例のほか、本実施例に係るアプリケーションサーバシステム30により最適化の対象となるテーブル間の関係を示す。図3(b−1)は、アクセスプログラムの他の例を示す。1行目のプログラムコードは、入力データを変数「cID」に格納する処理を示す。2行目のプログラムコードは、この変数をキーとしてBean「A」のホームインターフェイスに対して対応するテーブル中のレコードを取得する処理を示す。3行目のプログラムコードは、同様にこの変数をキーとしてBean「B」のホームインターフェースに対して対応するテーブル中のレコードを取得する処理を示す。
図3(b−2)は、このアクセスプログラムにおけるテーブル間の関係を示す。テーブルAおよびテーブルBは、共に同一のキーcIDを有するアクセス命令によってアクセスされる。本実施例に係るアプリケーションサーバシステム30は、このような関係にある2つのテーブルについても、複数のアクセス命令によるアクセスを1つに統合して処理を効率化することを目的とする。
図4は、アプリケーションサーバシステム30の機能構成を示す。アプリケーションサーバシステム30は、既に述べたようにバッファメモリ35を有し、更に、取得部300と、検出部310と、解析部320と、計測制御部330と、結合制御部340と、変換制御部350と、判断部360と、ビュー制御部370と、実行部380とを有する。取得部300は、DB45に対するアクセス命令を含むアクセスプログラム20を取得する。検出部310は、DB45のうち、アクセスプログラム20に含まれる複数のアクセス命令によってアクセスされる互いに異なる複数のテーブルを検出する。解析部320は、アクセスプログラム20を静的に解析することによりアクセスプログラム20に含まれるアクセス命令の特徴を判断する。
例えば、解析部320は、アクセスプログラム20を解析することにより、アクセス命令毎に、アクセスプログラム20が実行されれば必ずそのアクセス命令が実行されるか否かを判断してもよい。計測制御部330は、必ずしも実行されないと判断されたアクセス命令について、そのアクセス命令が実行される確率を計測する計測命令を、アクセスプログラム20の実行中に実行させる。例えば、計測制御部330は、その計測命令をアクセスプログラム20中に挿入してもよい。実行確率を計測する技術はプロファイリング等と呼ばれ、従来公知であるから更に詳しい説明を省略する。
また、解析部320は、検出部310により検出された複数のテーブルについて、このうち第1のテーブルを第1のアクセス命令がプライマリ・キーによりアクセスし、かつ、このうち第2のテーブルを第2のアクセス命令がプライマリ・キーによりアクセスするか否かを判断してもよい。この場合、計測制御部330は、第1のテーブルおよび第2のテーブルの少なくとも一方がプライマリ・キーによりアクセスされないことを条件に、当該一方のテーブルから結合命令によりレコードが冗長に読み出される冗長度を計測する計測命令を実行させる。
結合制御部340は、検出した複数のテーブルを結合した結果テーブルをDB45から取得する結合命令を、当該複数のテーブルにアクセスする複数のアクセス命令に先立って実行させる。この結合命令は、SQL(Structured Query Language)におけるセレクトコマンド(SELECT)である。セレクトコマンドは、第1のテーブルおよび第2のテーブルの各々から、予め指定された関係にある複数のレコードを選択して結合することにより結果テーブルを生成するコマンドである。
変換制御部350は、本発明に係るアクセス制御部の一例である。変換制御部350は、取得させたその結果テーブルを複数のアクセス命令によってアクセス可能な構造に変換する変換命令を、それら複数のアクセス命令よりも先に実行させる。変換命令によれば、複数のアクセス命令によってアクセスされるレコードを結果テーブルから抽出して当該複数のアクセス命令によってアクセス可能な構造に変換することができる。具体的には、この変換命令は、SQLのセレクトコマンドにより取得された結果テーブルを、EJBのbeanと呼ばれるオブジェクトに変換する命令である。
判断部360は、アクセスプログラム20により利用可能な局所メモリの残量を判断する。局所メモリの残量は、アクセスプログラム20に基づいて静的に判断されてもよいし、局所メモリの残量を計測する命令を、アクセスプログラム20の実行中に実行させてもよい。ビュー制御部370は、判断部360により判断された残量が予め定められた基準よりも多いことを条件に、第1のテーブルおよび第2のテーブルを結合したテーブルを局所メモリに生成するビューコマンドを実行させる。具体的には、ビュー制御部370は、そのビューコマンドをアクセスプログラム20中に生成することにより、アクセスプログラム20の実行中に実行させる。また、ビューコマンドを実行させることを条件に、ビュー制御部370は、DB45に代えてこのビューコマンドにより生成されるテーブルを、結合命令によってアクセスさせる。
実行部380は、以上に述べた各々の制御を含むアクセスプログラム20を取得し、そのアクセスプログラム20を実行する。実行部380は、アクセスプログラム20を実行することによりDB45に対してアクセスする。このとき、結合命令および変換命令の制御によって、DB45中のレコードはバッファメモリ35に一時的に格納される。また、実行部380は、一時的に格納されたこのレコードを、DB45に代えてバッファメモリ35から読み出す。
図5は、アプリケーションサーバシステム30がアクセスプログラム20を取得したときに行う処理の流れを示す。取得部300はアクセスプログラム20を取得する(S500)。検出部310は、アクセスプログラム20中のコールグラフを生成する(S510)。例えば、検出部310は、メソッド呼び出しの対象を特定するために、型情報解析によるレシーバ・オブジェクト・タイプ(receiver object type)のディスアンビギュエーション(disambiguation)の技術や、クラス階層解析(class hierarchy analysis)の技術を用いてもよい。これにより、アクセスプログラム20中の各命令が実行される順序が判明する。
次に、検出部310は、アクセスプログラム20に含まれる複数のアクセス命令について、それらの間の依存関係を示すBean依存グラフを生成する(S520)。具体的には、検出部310は、生成したコールグラフを走査することによって、複数のアクセス命令の依存関係を判断する。例えば、アクセスプログラム20がJ2EEで記述されている場合において、finderメソッドで使われているアクセスキーの依存関係と、エンティティ・Beanのgetterメソッドやsetterメソッドによるフィールドのアクセス状況とに基づいて、アクセス命令間の依存関係を定めることができる。Bean依存グラフは、例えば図3(a)および図3(b−2)に例示される。
次に、検出部310は、DB45のスキーマ情報を収集する(S530)。具体的には、検出部310は、DB45に含まれる各テーブルのプライマリ・キー、外部キー、および、全カラムのデータタイプとサイズの情報を収集する。この処理は、JDBCのDatabaseMetaData APIsにより実現できる。
次に、アプリケーションサーバシステム30は、複数のテーブルを検出すると共に、それらについて結合命令および計測命令を生成する処理を行う(S540)。次に、変換制御部350は、結果テーブルからレコードを抽出して複数のアクセス命令によりアクセス可能な構造に変換する変換命令を生成する(S550)。
図6は、S540における処理の詳細を示す。検出部310は、Bean依存グラフをルートノードからリーフノードに向けて順次選択し、選択した各ノードについて以下の処理を繰り返す(S600)。なお、ある2つのテーブルについて結合命令を生成する場合には、検出部310は、それら2つのテーブルを示す2つのノードを結合したノードを新たに検索の対象とする。即ち、3以上のテーブルの結合についても再帰的に判断される。以下、処理の詳細を述べる。
まず、検出部310は、選択した当該ノードと、当該ノードの子ノードの組を検出する(S610)。即ちこれにより、検出部310は、第1のアクセス命令によりアクセスされる第1のテーブルと、当該第1のテーブルから読み出したレコード中の要素をキーとして第2のアクセス命令によりアクセスされる第2のテーブルとを検出することができる。
また、検出部310は、選択した当該ノードと、当該ノードと兄弟の関係にある兄弟ノードの組を検出する。即ちこれにより、検出部310は、共に同一のキーを有する複数のアクセス命令によりアクセスされる複数のテーブルを検出できる。次に、解析部320は、検出された当該複数のテーブルについて、第1のアクセス命令が第1のテーブルをプライマリ・キーによりアクセスするか判断し、第2のアクセス命令が第2のテーブルをプライマリ・キーによりアクセスするかを判断する(S620)。共にプライマリ・キーによりアクセスされることを条件に(S620:YES)、解析部320は、命令生成の処理に移る(S630)。
第1のテーブルおよび第2のテーブルの少なくとも一方がプライマリ・キーによりアクセスされないことを条件に(S620:NO)、解析部320は、第1のアクセス命令により読み出されたレコードが、第2のアクセス命令により使用されるか否かを判断する(S640)。即ち例えば、図3(a)に示したテーブル「customer」およびテーブル「creditAccount」のような関係であれば、解析部320は、第1のアクセス命令により読み出されたレコードが、第2のアクセス命令により使用されると判断する。一方で、図3(b−1)に示したテーブルAおよびテーブルBの様な関係であれば、解析部320は、第1のアクセス命令により読み出されたレコードが、第2のアクセス命令により使用されないと判断する。
第1のアクセス命令により読み出されたレコードが、第2のアクセス命令により使用されないことを条件に(S640:NO)、解析部320は、S650に処理を移す。一方で、第1のアクセス命令により読み出されたレコードが、第2のアクセス命令により使用されることを条件に(S640:YES)、解析部320は、第1のアクセス命令により読み出されたレコードが、第2のアクセス命令のみによって使用され、他の何れの命令にも使用されていないかを判断する(S660)。他の何れの命令にも使用されていないことを条件に(S660:YES)、解析部320は、S630に処理を移す。一方で、他の何れかの命令に使用されていることを条件に(S660:NO)、解析部320は、S650に処理を移す。アプリケーションサーバシステム30は、以上の処理を各Beanについて繰り返す(S670)。
図7は、S630における処理の詳細を示す。解析部320は、検出した複数のテーブルに対するアクセス命令の実行確率が1か否かを判断する(S700)。即ち、解析部320は、アクセスプログラム20が実行されれば必ずアクセス命令が実行されるか否かを判断する。実行確率が1ならば(S700:YES)、結合制御部340は、これら複数のテーブルを結合した結果テーブルを取得する結合命令を生成させる(S730)。次に、判断部360は、アプリケーションサーバシステム30により利用可能な局所メモリの残量を判断する(S740)。
そして、ビュー制御部370は、判断部360により判断された残量が予め定められた基準よりも多いことを条件に、第1のテーブルおよび第2のテーブルを結合したテーブルを局所メモリに生成するビューコマンドを実行させる(S760)。具体的には、ビュー制御部370は、そのビューコマンドをアクセスプログラム20中に生成することにより、アクセスプログラム20の実行中に実行させてもよい。また、この場合、結合制御部340は、このビューコマンドにより生成されたテーブルから結果テーブルを生成するセレクトコマンドを、結合命令として実行させる。これにより、DB45に対するアクセス回数を一層低減することができる。
一方で、検出した複数のテーブルに対するアクセス命令の実行確率が1未満であることを条件に(S700:NO)、計測制御部330は、そのアクセス命令が実行される確率を計測する計測命令を生成する(S710)。そして、結合制御部340は、その確率に応じて実行させる複数の命令列を生成する(S720)。これら複数の命令列の各々は、複数のテーブルを結合の対象とする結合命令を含み、結合の対象とするテーブルの組み合わせは命令列によって異なっている。
図8は、S650における処理の詳細を示す。計測制御部330は、冗長度を計測する計測命令を、アクセスプログラム20の実行中に実行させる(S800)。例えば、計測制御部330は、アクセスプログラム20中に計測命令を生成してもよい。計測命令は、結合命令を生成した場合において結合命令によって読み出されるレコードのうち冗長なレコードの占める割合である冗長度を計測する命令である。冗長度は以下の式によって計算される。
冗長度=AR(A) * (N-1) / ( (AR(A) + AR(B) ) * N)
ここで、Nは、結合命令によって結合される一方のテーブル(Aとする)における1つのレコードに対応する、他方のテーブル(Bとする)のレコードの数を示す。Nは、cardinalityと呼ばれる。また、AR(A)は、Aのレコード長を示し、AR(B)は、Bのレコード長を示す。即ち、cardinalityが大きければ冗長度は大きく、また、cardinalityが大きくてもテーブルAのレコード長が短ければ冗長度は低い。計測命令は、アクセスの対象となるレコードの組を動的に検出して、それらのレコードのレコード長をスキーマ情報に基づいて求め、アクセス対象テーブル間のcardinalityの実行時プロファイルから冗長度を算出する。
なお、計測制御部330は、オフラインプロファイルによって予め冗長度が計測されていることを条件に、冗長度の計測命令を生成しなくてもよい。この場合、結合制御部340は、予め計測された当該冗長度に基づいて命令列を生成してもよい。
解析部320は、検出した複数のテーブルに対するアクセス命令の実行確率が1か否かを判断する(S810)。即ち、解析部320は、アクセスプログラム20が実行されれば必ずアクセス命令が実行されるか否かを判断する。実行確率が1であることを条件に(S810:YES)、結合制御部340は、結合命令を含む命令列と、結合命令を含まずに複数のアクセス命令が複数のテーブルをそれぞれアクセスする命令列との双方を生成する(S820)。これらの命令列は、計測命令により計測された冗長度に基づいて切り替えて実行される。
実行確率が1未満であることを条件に(S810:NO)、計測制御部330は、そのアクセス命令が実行される確率を計測する計測命令を生成する(S830)。そして、結合制御部340は、その確率に応じて実行させる複数の命令列を生成する(S840)。これら複数の命令列の各々は、複数のテーブルを結合の対象とする結合命令を含み、結合の対象とするテーブルの組み合わせは命令列によって異なっている。
図9は、結合命令、および、変換命令による処理の概念図を示す。本図の例において、結合命令は、Customerテーブル、および、creditAccountテーブルを結合した結果テーブルをDB45から取得する命令である。具体的には、結合命令は、SQLのセレクトコマンド(SELECT)である。生成されるセレクトコマンドの一例を以下に示す。
select a.*, b.* from Customer_TABLE a, creditAccount_TABLE b where a.accessKey = ? and join_condition
ここで、join_conditionの部分には、a, bがアクセスキーを共有する関係のときは、アクセスキー同士の等値式を並べる。例えば、a.accessKey1a = b.accessKey1b and …のようになる。一方、a, bがアクセスキーに関して依存関係の場合は、join_conditionの部分は、カラムの一致を判断する条件となる。例えば、a.column1 = b.accessKey1 and a.column2 = b.accessKey2 and ….のようになる。この例では、テーブルaのcolumn1のデータをキーとしてテーブルbをアクセスする場合において、テーブルaおよびテーブルbから一度のクエリでレコードを取得できる。
この結合命令によれば、Customerテーブルの各レコード、および、creditAccountテーブルの各レコードを結合したレコードを有する結果テーブルが生成される。ここで、Customerテーブルは、プライマリ・キーとしてcustomerKeyを有する。しかし結合条件としたa.column1 = b.accessKey1で、accessKey1はcreditAccountテーブルのプライマリ・キーとは限らない。このため、Customerテーブルのレコードは結果テーブルに重複して出現する。
変換命令における重複を排除するべく、結合制御部340は、結果テーブルのうちプライマリ・キーが同一の複数のレコードを検出することを条件に、当該複数のレコードの何れか1つのレコードを抽出する。本図の例では、Customerテーブルから取得された各レコードは同一のプライマリ・キーを有する。このため、結合制御部340は、これらのレコードから1つのレコードを抽出してBeanに変換する。一方で、creditAccountテーブルから取得された各レコードは互いに異なるプライマリ・キーを有する。このため、結合制御部340は、これらのレコードの各々をBeanに変換する。
図10は、S720およびS840において生成される結合命令、および、それを実行する実行時処理の概要を示す。この処理段階において、結合制御部340は、Bean依存グラフで親子関係または兄弟関係にある複数のテーブルについては、それらを結合する結合命令を実行した場合における冗長度に基づいて、その結合命令を実行させる。即ち例えば、冗長度が予め定められた基準以下であることを条件に、結合制御部340は、結合命令を実行させる。
更に、結合制御部340は、処理対象のノードに対応するアクセス命令がある特定の命令列中に検出されたことを条件に、複数の命令列を生成する。この場合、実行部380は、実行時の判断に基づいて何れかの命令列を実行する。以下、この処理の概要を述べる。特定の命令列の一例を図10(a)に示す。図10(a)は、アクセス命令を含むプログラムの制御フローを示す。即ちこのプログラムは、customerテーブルに対するアクセス命令を実行後、creditAccountテーブルに対するアクセス命令、および、debitAccountテーブルに対するアクセス命令の何れかを実行する。
更に、アクセス命令がこのような特定の命令列中に検出されたことを条件に、結合制御部340は、3つのアクセス命令によってアクセスされる3つのテーブルを結合する結合命令を実行させてもよい。具体的には、まず、検出部310は、第1のアクセス命令によりアクセスされる第1のテーブルと、第1のテーブルから読み出したレコード中の要素をキーとして第2のアクセス命令によりアクセスされる第2のテーブルと、当該レコード中の要素をキーとして第3のアクセス命令によりアクセスされる第3のテーブルとを検出する。図10(a)に具体例を示す。検出部310は、第1のテーブルであるテーブル「customer」と、第2のテーブルであるテーブル「creditAccount」と、第3のテーブルであるテーブル「debitAccount」とを検出する。
図10(b)に示すように、結合制御部340は、冗長度が予め定められた基準未満であることを条件に、結合命令を実行させる。更に詳細には、結合制御部340は、実行確率に基づいて、テーブル「customer」を、テーブル「creditAccount」およびテーブル「debitAccount」の一方と結合する第1結合命令、並びに、テーブル「customer」を、テーブル「creditAccount」およびテーブル「debitAccount」の双方と結合する第2結合命令の何れかを実行させる。
図11は、S720およびS840において生成されるコマンドの処理例を示す(2図のうち1図目)。図12は、S720およびS840において生成されるコマンドの処理例を示す(2図のうち2図目)。図11(a)は、計測された冗長度が基準以上であることを条件に実行されるコマンドの処理内容を示す。結合制御部340は、内側ループの開始前に、テーブル「customer」から予めレコードを取得させる。しかしながら、結合制御部340は、テーブル「customer」を何れか他のテーブルと結合させる結合命令は実行させない。
図11(b)および図12(a)は、計測された冗長度が基準未満であって、複数のアクセス命令の実行確率が偏っていることを条件に実行される結合命令の内容を示す。例えば、結合制御部340は、テーブルcreditAccountをアクセスするアクセス命令の実行確率(以下、実行確率P)、および、テーブルdebitAccountをアクセスするアクセス命令の実行確率(以下、実行確率(1−P))の差分値が、予め定められた基準値よりも大きいことを条件に、実行確率が偏っていると判断してもよい。
実行確率が偏っており、かつ、実行確率Pが実行確率(1−P)よりも大きいことを条件に、結合制御部340は、テーブル「customer」、および、テーブル「creditAccount」を結合した結果テーブルを取得する結合命令を実行させる。また、実行確率が偏っており、かつ、実行確率(1−P)が実行確率Pよりも大きいことを条件に、結合制御部340は、テーブル「customer」、および、テーブル「debitAccount」を結合した結果テーブルを取得する結合命令を実行させる。
図12(b)は、計測された冗長度が基準未満であって、複数のアクセス命令の実行確率が略等しいことを条件に実行される結合命令の内容を示す。例えば、結合制御部340は、実行確率Pおよび実行確率(1−P)の差分値が、予め定められた基準値以下であることを条件に、実行確率が略等しいと判断してもよい。実行確率が略等しいと判断したことを条件に、結合制御部340は、テーブル「customer」、テーブル「creditAccount」、および、テーブル「debitAccount」を結合した結果テーブルを取得する結合命令を実行させる。
図13は、アプリケーションサーバシステム30がアクセスプログラム20に対してコマンドを生成した結果得られるプログラムの例を示す。ビュー制御部370はアクセスプログラム20の第4行目にビューコマンドを生成し、判断部360により判断された局所メモリの残量が予め定められた基準よりも多いことを条件に、このコマンドを実行させる。即ち、この条件を満たす場合には、実行部380は、第6行目から開始するバッチ処理に先立って、複数のテーブルを結合したテーブルを局所メモリに生成する。
また、結合制御部340は、アクセスプログラム20の9行目に結合命令を生成する。即ち、実行部380は、第11行目から開始する内側ループに先立って、複数のテーブルを結合した結果テーブルをDB45から取得する。また、ビューコマンドが生成されたことを条件に、実行部380は、DB45に代えて、ビューコマンドにより生成されたテーブルから結果テーブルを生成する。
また、変換制御部350は、同じ9行目に変換命令を生成する。即ち、実行部380は、結果テーブルの生成後に、その結果テーブルから、複数のアクセス命令によってアクセスされるレコードを抽出する。そして、実行部380は、抽出したそれらのレコードを複数のアクセス命令によってアクセス可能な構造に変換する。
また、計測制御部330は、アクセスプログラム20の22行目に計測命令を生成する。即ち、実行部380は、第22行目が実行される毎に、予め設定されたカウンタの値を1つ増加させる。これによって、creditAccountテーブルに対するアクセス命令が実行される回数を計測し、計測されたその回数に基づいて実行確率を求めることができる。また、実行部380は、customerテーブルに対してアクセスした結果と、creditAccountテーブルに対してアクセスした結果に基づいて、結合命令を生成した場合においてレコードが冗長に読み出される程度を示す冗長度を計測する。この冗長度によって、customerテーブルおよびcreditAccountテーブルに対して生成された結合命令を実行させるべきか否かを、動的に判断することができる。
同様に、計測制御部330は、アクセスプログラム20の27行目に計測命令を生成する。即ち、実行部380は、第27行目が実行される毎に、予め設定されたカウンタの値を1つ増加させる。これによって、debitAccountテーブルに対するアクセス命令が実行される回数を計測し、計測されたその回数に基づいて実行確率を求めることができる。また、実行部380は、customerテーブルに対してアクセスした結果と、debitAccountテーブルに対してアクセスした結果に基づいて、結合命令を生成した場合においてレコードが冗長に読み出される程度を示す冗長度を計測する。この冗長度によって、customerテーブルおよびdebitAccountテーブルに対して生成された結合命令を実行させるべきか否かを、動的に判断することができる。
図14は、図13に示すプログラムのバッチ処理の流れを示す。実行部380は、第11行目の処理として、実行中のトランザクションがチェックポイントに到達したか否かを判断する。チェックポイントに到達していないことを条件に(S1400:NO)、実行部380は、内側ループの繰り返しの1回分を実行する(S1410)。また、実行部380は、計測命令を実行する(S1420)。
一方、チェックポイントに到達したことを条件に(S1400:YES)、実行部380は、内側ループを終了して第35行目に処理を移し、トランザクションをコミットする(S1430)。そして、実行部380は、9行目に処理を戻し、計測命令により計測された実行確率および冗長度の計測結果を取得する(S1440)。冗長度が予め定められた基準以上であることを条件に(S1450:YES)、実行部380は、結合命令を実行しない(S1460)。
冗長度が予め定められた基準未満であることを条件に(S1450:NO)、実行部380は、実行確率に基づいて結合命令を実行する(S1470)。この結合命令は、creditAccountテーブルに対するアクセス命令およびdebitAccountテーブルに対するアクセス命令の実行比率によって異なる。即ち例えば、実行部380は、creditAccountテーブルおよびdebitAccountテーブルに対するアクセスの確率が略等しいことを条件に、customerテーブル、creditAccountテーブル、および、debitAccountテーブルを結合する結合命令を実行する。
次に、実行部380は、アクセス命令によってアクセスされるレコードを結果テーブルから抽出してそのアクセス命令によってアクセス可能な構造に変換する(S1475)。続いて、実行部380は、次の内側ループの処理のために実行確率を再計測するべく、実行確率を計測するためのカウンタをリセットする(S1480)。
図15は、本実施例における処理の全体概要を示す。実行部380は、バッチ処理の開始に先立ってビューコマンドを実行する(S1500)。これによって、customerテーブル、creditAccountテーブル、および、debitAccountテーブルがDB管理サーバ40から読み出されて、これらのテーブルを結合したテーブルが生成される。
次に、実行部380は、バッチ処理のトランザクションを開始する(S1510)。実行部380は、結合命令を実行することによって結果テーブルを生成する(S1520)。そして、実行部380は、生成したその結果テーブルを、アクセス命令によってアクセス可能な構造に変換してバッファメモリ35に記録する。結果テーブルは、例えば、J2EEのBeanと呼ばれるオブジェクトに変換されてもよい。次に、実行部380は、内側ループを1回ずつ実行する(S1530)。そして、実行部380は、トランザクションをコミットする(S1540)。
続いて、本実施例のアプリケーションサーバシステム30によってデータベースをアクセスする実験について、その実験環境および実験結果を述べる。
図16は、実験に用いたプログラムにおいて参照されるテーブル間の依存関係を示す。即ちこの実験において、アプリケーションサーバシステム30は、本図に示す構造のDBに対するアクセスを制御する。実験には、TPC-Cというベンチマークプログラムを用いた。TPC-Cは、オンライントランザクションの性能を評価するためのベンチマークプログラムである。本実施例の実験においては、TPC-Cにおける顧客のリクエストを無作為に生成してファイルに書き出し、そのファイルを入力としてトランザクションをバッチ処理させる。
本実験では、TPC-Cのシナリオのうち2つ(OrderStatusおよびNewOrder)を用いる。OrderStatusにおいて、アプリケーションサーバシステム30は、3つのテーブル(Customer、Order、OrderLine)に対して読出専用のアクセスを行う。一方、NewOrderにおいて、アプリケーションサーバシステム30は、3つのテーブル(Warehouse、Customer、Item)に対して読出専用のアセスを行う。更に、このシナリオにおいて、アプリケーションサーバシステム30は、他の2つのテーブル(District, Stock)を読出し、かつ、更新する。また、アプリケーションサーバシステム30は、更に他の3つのテーブルに対して挿入操作を行う。
本図において、各々の囲みはテーブルを示し、囲みの中の文字はテーブル名を示し、囲みの中の数値はレコードの数を示す。即ち、DB45において、テーブルWarehouseは、1つのレコードを有する。テーブルDistrict、テーブルCustomer、テーブルOrder、テーブルOrderLine、テーブルStock、およびテーブルItemは、それぞれ、10個、30,000個、30,000個、300,000個、100,000個、および、100,000個のレコードを有する。
また、囲みを連結するエッジは、各レコードのマッピングを示す。即ち例えば、テーブルWarehouseの中の1個のレコードは、テーブルDistrictの中の10個のレコードに対応する。また、テーブルDistrictの中の1個のレコードは、テーブルCustomerの中の3,000個のレコードに対応する。
図17は、実験に用いたアクセスプログラムのBean依存グラフを示す。(a)は、シナリオOrderStatusにおいてアクセスされるBeanの間の依存関係を示す。テーブルCustomerは、入力データから得られるcustomerIDをキーとしてアクセスされる。その過程で、Customer beanが生成される。テーブルOrderは、入力データから得られるcustomerIDをキーとしてアクセスされる。その過程でOrder beanが生成される。また、テーブルOrderLineは、Order beanから得られるorderIDによってアクセスされる。その過程で、OrderLine beanが生成される。
(b)は、シナリオNewOrderにおいてアクセスされるBeanの間の依存関係を示す。テーブルwarehouseは、入力データから得られるwarehouseIDをキーとしてアクセスされる。その過程で、Warehouse beanが生成される。テーブルDistrictは、入力データから得られるdistrictIDをキーとしてアクセスされる。その過程で、District beanが生成される。
テーブルCustomerは、入力データから得られるcustomerIDをキーとしてアクセスされる。その過程で、Customer beanが生成される。テーブルItemは、入力データから得られるitemIDをキーとしてアクセスされる。その過程でItem beanが生成される。また、テーブルStockは、入力データから得られるitemIDによってアクセスされる。その過程で、Stock beanが生成される。
図18は、実験で使われた各テーブルの特徴を示す。DBのスキーマ情報によって、各テーブルのプライマリ・キー、および、各テーブルのアクセスレコードの長さが求められる。即ち、テーブルWarehouseのプライマリ・キーはwarehouseIDであり、アクセスレコードの長さは6である。また、テーブルDistrictのプライマリ・キーはdistrictIDであり、アクセスレコードの長さは10である。
以上の環境の下、アプリケーションサーバシステム30は、シナリオOrderStatusおよびシナリオNewOrderを実行する。その結果の概要を述べる。
1)OrderStatusについて
テーブルCustomerおよびテーブルOrderは、共に、同一のプライマリ・キーcustomerIDによってアクセスされる。このため、図6のS620における判断はYESとなり、図7に示すS630が処理される。このアクセス命令の実行確率は1なので、結合命令が生成される(S730)。
また、Order beanは、テーブルOrderLineへのアクセスキー以外にもフィールドアクセスを有している。このため、図6のS660における判断はNOとなり、図8のS650が処理される。即ち、冗長度の計測命令が生成され(S800)、また、結合をする場合としない場合とで複数の命令列が生成される(S840)。
結果として、アプリケーションサーバシステム30は、テーブルCustomerおよびテーブルOrderの2つを結合する結合命令を含む命令列と、テーブルCustomer、テーブルOrder、および、テーブルOrderLineの3つを結合する結合命令を生成した命令列とを生成する。そして、計測される冗長度に基づいてこれら2つの何れかの命令列が動的に選択されて(S1450)、実行される。
2)NewOrderについて
全てのテーブルは、入力データをキーとしてアクセスされる。従って、これらのテーブルへのアクセスの間には依存関係が存在しない。また、Item beanおよびstock beanを除き、テーブル間のマッピングは不明である。従って、これらのテーブルの全ての組み合わせについて冗長度の計測命令が生成される。また、これらのテーブルの全ての組み合わせ(2つの組み合わせ、3つの組み合わせ、4つの組み合わせ全て)の各々について、その組み合わせのテーブルを結合する結合命令を含む複数の命令列が生成される。
冗長度が計測された結果として、結合命令の対象となるテーブル群がグループ化される。 具体的には、(warehouse, district)の2つのテーブルは、マッピングの比率が1:10なので、これらに対して結合命令を生成すると、計測される冗長度は極めて大きくなる。また、一方、(warehouse, district)のテーブルはアクセスレコード長が小さいため、テーブルcustomerと結合した場合でも冗長度が低いことがわかる。従って、生成された複数の命令列のうち、実行されるのは (warehouse, district, customer)のテーブルを結合する結合命令と、(item, stock)のテーブルを結合する結合命令となる。
結合命令を生成した結果、シナリオOrderStatusでは24.5%の性能向上が、シナリオNewOrderでは6.1%の性能向上が確かめられた。
図19は、アプリケーションサーバシステム30として機能する情報処理装置500のハードウェア構成の一例を示す。情報処理装置500は、ホストコントローラ1082により相互に接続されるCPU1000、RAM1020、及びグラフィックコントローラ1075を有するCPU周辺部と、入出力コントローラ1084によりホストコントローラ1082に接続される通信インターフェイス1030、ハードディスクドライブ1040、及びCD−ROMドライブ1060を有する入出力部と、入出力コントローラ1084に接続されるBIOS1010、フレキシブルディスクドライブ1050、及び入出力チップ1070を有するレガシー入出力部とを備える。
ホストコントローラ1082は、RAM1020と、高い転送レートでRAM1020をアクセスするCPU1000及びグラフィックコントローラ1075とを接続する。CPU1000は、BIOS1010及びRAM1020に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィックコントローラ1075は、CPU1000等がRAM1020内に設けたフレームバッファ上に生成する画像データを取得し、表示装置1080上に表示させる。これに代えて、グラフィックコントローラ1075は、CPU1000等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。
入出力コントローラ1084は、ホストコントローラ1082と、比較的高速な入出力装置である通信インターフェイス1030、ハードディスクドライブ1040、及びCD−ROMドライブ1060を接続する。通信インターフェイス1030は、ネットワークを介して外部の装置と通信する。ハードディスクドライブ1040は、情報処理装置500が使用するプログラム及びデータを格納する。CD−ROMドライブ1060は、CD−ROM1095からプログラム又はデータを読み取り、RAM1020又はハードディスクドライブ1040に提供する。
また、入出力コントローラ1084には、BIOS1010と、フレキシブルディスクドライブ1050や入出力チップ1070等の比較的低速な入出力装置とが接続される。BIOS1010は、情報処理装置500の起動時にCPU1000が実行するブートプログラムや、情報処理装置500のハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ1050は、フレキシブルディスク1090からプログラム又はデータを読み取り、入出力チップ1070を介してRAM1020またはハードディスクドライブ1040に提供する。入出力チップ1070は、フレキシブルディスク1090や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。
情報処理装置500に提供されるプログラムは、フレキシブルディスク1090、CD−ROM1095、又はICカード等の記録媒体に格納されて利用者によって提供される。プログラムは、入出力チップ1070及び/又は入出力コントローラ1084を介して、記録媒体から読み出され情報処理装置500にインストールされて実行される。プログラムが情報処理装置500等に働きかけて行わせる動作は、図1から図18において説明したアプリケーションサーバシステム30における動作と同一であるから、説明を省略する。
以上に示したプログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク1090、CD−ROM1095の他に、DVDやPD等の光学記録媒体、MD等の光磁気記録媒体、テープ媒体、ICカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はRAM等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムを情報処理装置500に提供してもよい。
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
図1は、情報処理システム10の全体構成を示す。 図2は、アクセスプログラム20の一例を示す。 図3は、相互に所定の関係を有する複数のテーブルの例を示す。 図4は、アプリケーションサーバシステム30の機能構成を示す。 図5は、アプリケーションサーバシステム30がアクセスプログラム20を取得したときに行う処理の流れを示す。 図6は、S540における処理の詳細を示す。 図7は、S630における処理の詳細を示す。 図8は、S650における処理の詳細を示す。 図9は、結合命令、および、変換命令による処理の概念図を示す。 図10は、S720およびS840において生成される結合命令、および、それを実行する実行時処理の概要を示す。 図11は、S720およびS840において生成されるコマンドの処理例を示す(2図のうち1図目)。 図12は、S720およびS840において生成されるコマンドの処理例を示す(2図のうち2図目)。 図13は、アプリケーションサーバシステム30がアクセスプログラム20に対してコマンドを生成した結果得られるプログラムの例を示す。 図14は、図13に示すプログラムのバッチ処理の流れを示す。 図15は、本実施例における処理の全体概要を示す。 図16は、実験に用いたDBの構造を示す。 図17は、実験に用いたアクセスプログラムのBean依存グラフを示す。 図18は、実験で使われた各テーブルの特徴を示す。 図19は、アプリケーションサーバシステム30として機能する情報処理装置500のハードウェア構成の一例を示す。
符号の説明
10 情報処理システム
20 アクセスプログラム
30 アプリケーションサーバシステム
35 バッファメモリ
40 DB管理サーバ
45 DB
300 取得部
310 検出部
320 解析部
330 計測制御部
340 結合制御部
350 変換制御部
360 判断部
370 ビュー制御部
380 実行部
500 情報処理装置

Claims (20)

  1. データベースに対するアクセスを制御するシステムであって、
    データベースに対するアクセス命令を複数含むアクセスプログラムを取得する取得部と、
    前記データベースのうち、前記複数のアクセス命令によってアクセスされる互いに異なる複数のテーブルを検出する検出部と、
    検出された前記複数のテーブルを結合した結果テーブルを前記データベースから取得する結合命令を、当該複数のアクセス命令に先立って実行させる結合制御部と、
    前記複数のアクセス命令の各々に、前記結果テーブルをアクセスさせる制御を行うアクセス制御部と
    を備えるシステム。
  2. 前記アクセス制御部は、前記複数のアクセス命令によってアクセスされるレコードを前記結果テーブルから抽出して前記複数のアクセス命令によってアクセス可能な構造に変換する変換命令を、前記複数のアクセス命令よりも先に実行させる
    請求項1に記載のシステム。
  3. 前記検出部は、共に同一のキーを有する複数のアクセス命令によりアクセスされる複数のテーブルを検出し、
    前記結合制御部は、当該キーの値が同一のレコードを当該複数のテーブルの各々から読み出して単一のレコードに結合する命令を、前記結合命令として実行させる
    請求項1に記載のシステム。
  4. 前記検出部は、第1のアクセス命令によりアクセスされる第1のテーブルと、前記第1のテーブルから読み出したレコード中の要素をキーとして第2のアクセス命令によりアクセスされる第2のテーブルとを検出し、
    前記結合制御部は、前記第1のテーブル中のレコードと、当該レコード中の要素をキーとして読み出される第2のテーブル中のレコードとを単一のレコードに結合する命令を、前記結合命令として実行させる
    請求項1に記載のシステム。
  5. 前記結合制御部は、第1のテーブルおよび第2のテーブルの各々から、予め指定された関係にある複数のレコードを選択して結合することにより前記結果テーブルを生成するセレクトコマンドを、前記結合命令として実行させる
    請求項1に記載のシステム。
  6. 前記アクセスプログラムにより利用可能なメモリの残量を判断する判断部と、
    前記判断部により判断された残量が予め定められた基準よりも多いことを条件に、前記第1のテーブルおよび前記第2のテーブルを結合したテーブルを前記メモリに生成するビューコマンドを実行させるビュー制御部と
    を更に備え、
    前記結合制御部は、前記ビューコマンドにより生成されたテーブルから前記結果テーブルを生成するセレクトコマンドを、前記結合命令として実行させる
    請求項5に記載のシステム。
  7. 前記アクセス制御部は、前記結果テーブルのうちプライマリ・キーが同一の複数のレコードを検出することを条件に、当該複数のレコードの何れか1つのレコードを抽出する
    請求項1に記載のシステム。
  8. 前記アクセスプログラムを解析することにより、アクセス命令毎に、アクセスプログラムが実行されれば必ず当該アクセス命令が実行されるか否かを判断する解析部と、
    必ずしも実行されないと判断されたアクセス命令について、当該アクセス命令が実行される確率を計測する計測命令を、前記アクセスプログラムの実行中に実行させる計測制御部と
    を更に備える請求項1に記載のシステム。
  9. 前記検出部は、第1のアクセス命令によりアクセスされる第1のテーブルと、前記第1のテーブルから読み出したレコード中の要素をキーとして第2のアクセス命令によりアクセスされる第2のテーブルと、当該レコード中の要素をキーとして第3のアクセス命令によりアクセスされる第3のテーブルとを検出し、
    前記結合制御部は、前記アクセスプログラムの実行中に前記計測命令によって計測された確率に基づいて、前記第1のテーブルを、前記第2のテーブルおよび前記第3のテーブルの一方と結合する第1結合命令、並びに、前記第1のテーブルを、前記第2のテーブルおよび前記第3のテーブルの双方と結合する第2結合命令の何れかを実行させる
    請求項8に記載のシステム。
  10. 前記検出部により検出された複数のテーブルについて、第1のアクセス命令が第1のテーブルを前記プライマリ・キーによりアクセスし、かつ、第2のアクセス命令が第2のテーブルをプライマリ・キーによりアクセスするか否かを判断する解析部を更に備え、
    前記結合制御部は、前記第1のアクセス命令および前記第2のアクセス命令が同一のプライマリ・キーによりアクセスすることを条件に、前記第1のテーブルおよび前記第2のテーブルを結合する結合命令を実行させる
    請求項1に記載のシステム。
  11. 前記第1のテーブルおよび前記第2のテーブルの少なくとも一方がプライマリ・キーによりアクセスされないことを条件に、前記結合命令を生成した場合において前記結合命令によって読み出されるレコードのうち冗長なレコードの占める割合である冗長度を計測する計測命令を、前記アクセスプログラムの実行中に実行させる計測制御部を更に備え、
    前記結合制御部は、前記アクセスプログラムの実行中に前記計測命令によって計測された冗長度が、予め定められた基準よりも小さいことを条件に、前記第1のテーブルおよび前記第2のテーブルを結合する結合命令を実行させる
    請求項10に記載のシステム。
  12. 前記検出部は、第1のアクセス命令によりアクセスされる第1のテーブルと、前記第1のテーブルから読み出したレコード中の要素をキーとして第2のアクセス命令によりアクセスされる第2のテーブルとを検出し、
    前記アクセスプログラムを解析することにより、前記第1のアクセス命令に読み出されたレコードが、前記第2のアクセス命令に使用され、かつ、他の何れの命令にも使用されていないかを判断する解析部を更に備え、
    前記結合制御部は、前記第1のアクセス命令に読み出されたレコードが、前記第2のアクセス命令に使用され、かつ、他の何れの命令にも使用されていないことを条件に、前記第1のテーブルおよび前記第2のテーブルを結合する結合命令を実行させる
    請求項1に記載のシステム。
  13. データベースに対するアクセスを制御する方法であって、
    データベースに対するアクセス命令を複数含むアクセスプログラムを取得する取得段階と、
    前記データベースのうち、前記複数のアクセス命令によってアクセスされる互いに異なる複数のテーブルを検出する検出段階と、
    検出された前記複数のテーブルを結合することにより結果テーブルを生成して前記データベースから取得する結合命令を、当該複数のアクセス命令に先立って実行させる結合制御段階と、
    前記複数のアクセス命令の各々に、前記結果テーブルをアクセスさせる制御を行うアクセス制御段階と
    を備える方法。
  14. 前記アクセス制御段階において、前記複数のアクセス命令によってアクセスされるレコードを前記結果テーブルから抽出して前記複数のアクセス命令によってアクセス可能な構造に変換する変換命令を、前記複数のアクセス命令よりも先に実行させる
    請求項13に記載の方法。
  15. 前記検出段階において、共に同一のキーを有する複数のアクセス命令によりアクセスされる複数のテーブルを検出し、
    前記結合制御段階において、当該キーの値が同一のレコードを当該複数のテーブルの各々から読み出して単一のレコードに結合する命令を、前記結合命令として実行させる
    請求項13に記載の方法。
  16. 前記検出段階において、第1のアクセス命令によりアクセスされる第1のテーブルと、前記第1のテーブルから読み出したレコード中の要素をキーとして第2のアクセス命令によりアクセスされる第2のテーブルとを検出し、
    前記結合制御段階において、前記第1のテーブル中のレコードと、当該レコード中の要素をキーとして読み出される第2のテーブル中のレコードとを単一のレコードに結合する命令を、前記結合命令として実行させる
    請求項13に記載の方法。
  17. 前記検出段階において検出された複数のテーブルについて、第1のアクセス命令が第1のテーブルを前記プライマリ・キーによりアクセスし、かつ、第2のアクセス命令が第2のテーブルをプライマリ・キーによりアクセスするか否かを判断する解析段階を更に備え、
    前記結合制御段階において、前記第1のアクセス命令および前記第2のアクセス命令が同一のプライマリ・キーによりアクセスすることを条件に、前記第1のテーブルおよび前記第2のテーブルを結合する結合命令を実行させる
    請求項13に記載の方法。
  18. 前記第1のテーブルおよび前記第2のテーブルの少なくとも一方がプライマリ・キーによりアクセスされないことを条件に、前記結合命令を生成した場合において前記結合命令によって読み出されるレコードのうち冗長なレコードの占める割合である冗長度を計測する計測命令を、前記アクセスプログラムの実行中に実行させる計測制御段階を更に備え、
    前記結合制御段階において、前記アクセスプログラムの実行中に前記計測命令によって計測された冗長度が、予め定められた基準よりも小さいことを条件に、前記第1のテーブルおよび前記第2のテーブルを結合する結合命令を実行させる
    請求項17に記載の方法。
  19. 前記検出段階において、第1のアクセス命令によりアクセスされる第1のテーブルと、前記第1のテーブルから読み出したレコード中の要素をキーとして第2のアクセス命令によりアクセスされる第2のテーブルとを検出し、
    前記アクセスプログラムを解析することにより、前記第1のアクセス命令に読み出されたレコードが、前記第2のアクセス命令に使用され、かつ、他の何れの命令にも使用されていないかを判断する解析段階を更に備え、
    前記結合制御段階において、前記第1のアクセス命令に読み出されたレコードが、前記第2のアクセス命令に使用され、かつ、他の何れの命令にも使用されていないことを条件に、前記第1のテーブルおよび前記第2のテーブルを結合する結合命令を実行させる
    請求項13に記載の方法。
  20. データベースに対するアクセスを制御するシステムとして、情報処理装置を機能させるプログラムであって、
    前記情報処理装置を、
    データベースに対するアクセス命令を複数含むアクセスプログラムを取得する取得部と、
    前記データベースのうち、前記複数のアクセス命令によってアクセスされる互いに異なる複数のテーブルを検出する検出部と、
    検出された前記複数のテーブルを結合することにより結果テーブルを生成して前記データベースから取得する結合命令を、当該複数のアクセス命令に先立って実行させる結合制御部と、
    前記複数のアクセス命令の各々に、前記結果テーブルをアクセスさせる制御を行うアクセス制御部と
    して機能させるプログラム。
JP2005251594A 2005-08-31 2005-08-31 データベースに対するアクセスを制御するシステム、およびその方法 Expired - Fee Related JP3962417B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2005251594A JP3962417B2 (ja) 2005-08-31 2005-08-31 データベースに対するアクセスを制御するシステム、およびその方法
US11/503,620 US7676456B2 (en) 2005-08-31 2006-08-14 System and method for controlling database access

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005251594A JP3962417B2 (ja) 2005-08-31 2005-08-31 データベースに対するアクセスを制御するシステム、およびその方法

Publications (2)

Publication Number Publication Date
JP2007066017A true JP2007066017A (ja) 2007-03-15
JP3962417B2 JP3962417B2 (ja) 2007-08-22

Family

ID=37805586

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005251594A Expired - Fee Related JP3962417B2 (ja) 2005-08-31 2005-08-31 データベースに対するアクセスを制御するシステム、およびその方法

Country Status (2)

Country Link
US (1) US7676456B2 (ja)
JP (1) JP3962417B2 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016509308A (ja) * 2013-02-01 2016-03-24 アビニシオ テクノロジー エルエルシー データレコード選択
JP2020060953A (ja) * 2018-10-10 2020-04-16 株式会社デンソー 分析支援装置、及び結合データ生成システム
US11068540B2 (en) 2018-01-25 2021-07-20 Ab Initio Technology Llc Techniques for integrating validation results in data profiling and related systems and methods
US11487732B2 (en) 2014-01-16 2022-11-01 Ab Initio Technology Llc Database key identification

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8056141B2 (en) * 2006-09-13 2011-11-08 Imperva, Inc. Method for monitoring stored procedures
US8782434B1 (en) 2010-07-15 2014-07-15 The Research Foundation For The State University Of New York System and method for validating program execution at run-time
US9063721B2 (en) 2012-09-14 2015-06-23 The Research Foundation For The State University Of New York Continuous run-time validation of program execution: a practical approach
US9069782B2 (en) 2012-10-01 2015-06-30 The Research Foundation For The State University Of New York System and method for security and privacy aware virtual machine checkpointing
US11169995B2 (en) 2017-11-21 2021-11-09 Oracle International Corporation Relational dictionaries
US11023430B2 (en) 2017-11-21 2021-06-01 Oracle International Corporation Sparse dictionary tree
US11126611B2 (en) * 2018-02-15 2021-09-21 Oracle International Corporation Code dictionary generation based on non-blocking operations
US11379450B2 (en) 2018-10-09 2022-07-05 Oracle International Corporation Relational method for transforming unsorted sparse dictionary encodings into unsorted-dense or sorted-dense dictionary encodings
US11314736B2 (en) 2020-01-16 2022-04-26 Oracle International Corporation Group-by efficiency though functional dependencies and non-blocking aggregation functions

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07219825A (ja) * 1993-01-07 1995-08-18 Internatl Business Mach Corp <Ibm> 照会オプティマイザにおいて結合選択性を選定する方法及びリレーショナル・データベース管理システム
JP2002510088A (ja) * 1998-03-27 2002-04-02 インフォミックス ソフトウェア, インコーポレイテッド 予め演算されたビューの処理
JP2004310623A (ja) * 2003-04-10 2004-11-04 Obic Co Ltd データ検索装置及び方法並びにデータ検索プログラム
JP2005135221A (ja) * 2003-10-31 2005-05-26 Turbo Data Laboratory:Kk 表形式データの結合方法、結合装置およびプログラム

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5742806A (en) * 1994-01-31 1998-04-21 Sun Microsystems, Inc. Apparatus and method for decomposing database queries for database management system including multiprocessor digital data processing system
CA2168287C (en) * 1995-03-31 2000-05-23 Guy M. Lohman Method for detecting and optimizing relational queries with encoding/decoding tables
US6023695A (en) * 1997-10-31 2000-02-08 Oracle Corporation Summary table management in a computer system
US6078926A (en) * 1997-12-18 2000-06-20 Persistence Software, Inc. Method and apparatus for performing multi-class object fetch in a database management system

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07219825A (ja) * 1993-01-07 1995-08-18 Internatl Business Mach Corp <Ibm> 照会オプティマイザにおいて結合選択性を選定する方法及びリレーショナル・データベース管理システム
JP2002510088A (ja) * 1998-03-27 2002-04-02 インフォミックス ソフトウェア, インコーポレイテッド 予め演算されたビューの処理
JP2004310623A (ja) * 2003-04-10 2004-11-04 Obic Co Ltd データ検索装置及び方法並びにデータ検索プログラム
JP2005135221A (ja) * 2003-10-31 2005-05-26 Turbo Data Laboratory:Kk 表形式データの結合方法、結合装置およびプログラム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
C. J. DATE, データベースシステム概論 原書6, JPN4007008419, 25 March 1997 (1997-03-25), JP, pages 547 - 589, ISSN: 0000847789 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016509308A (ja) * 2013-02-01 2016-03-24 アビニシオ テクノロジー エルエルシー データレコード選択
US11163670B2 (en) 2013-02-01 2021-11-02 Ab Initio Technology Llc Data records selection
US11487732B2 (en) 2014-01-16 2022-11-01 Ab Initio Technology Llc Database key identification
US11068540B2 (en) 2018-01-25 2021-07-20 Ab Initio Technology Llc Techniques for integrating validation results in data profiling and related systems and methods
JP2020060953A (ja) * 2018-10-10 2020-04-16 株式会社デンソー 分析支援装置、及び結合データ生成システム
JP7070310B2 (ja) 2018-10-10 2022-05-18 株式会社デンソー 分析支援装置、及び結合データ生成システム

Also Published As

Publication number Publication date
US20070050367A1 (en) 2007-03-01
JP3962417B2 (ja) 2007-08-22
US7676456B2 (en) 2010-03-09

Similar Documents

Publication Publication Date Title
JP3962417B2 (ja) データベースに対するアクセスを制御するシステム、およびその方法
US10831753B2 (en) Query plan generation and execution in a relational database management system with a temporal-relational database
JP7021228B2 (ja) ブロックチェーンベースのデータ記憶および照会方法およびデバイス
US7822710B1 (en) System and method for data collection
US7392259B2 (en) Method and system for supporting XQuery trigger in XML-DBMS based on relational DBMS
KR101976220B1 (ko) 데이터 보강 제안 기법
US8086623B2 (en) Context-sensitive term expansion with multiple levels of expansion
US20050091198A1 (en) Context sensitive term expansion with dynamic term expansion
US20220188104A1 (en) Microservices Graph Generation
US20100318556A1 (en) Exporting and Importing Business Objects Based on Metadata
US20080243910A1 (en) Hierarchical inherited xml dom
JP2006235840A (ja) データベース・アクセス・システム、データベース・アクセス方法
JP2008052662A (ja) 構造化文書管理システム及びプログラム
US7610292B2 (en) Systems and methods for storing a dataset having a hierarchical data structure in a database
JP2007293838A (ja) コンテンツ変換システム
JP2007179161A (ja) プログラムの実行に必要なデータをデータベースから先読みするシステム
US8433729B2 (en) Method and system for automatically generating a communication interface
US7818337B2 (en) System and method for dynamically exposing SQL statements as web protocols
JP3163141B2 (ja) リレーショナルデータベース処理装置および処理方法
JP5488792B2 (ja) データベース操作装置、データベース操作方法、及びプログラム
US7831629B2 (en) Method for building data encapsulation layers for highly variable schema
WO2023081032A1 (en) Query-based database redaction
JP3292160B2 (ja) Cobol言語のソースプログラムのコンバージョン方法及び装置並びに記録媒体
US7805424B2 (en) Querying nested documents embedded in compound XML documents
JP2002007177A (ja) マルチデータベース定義方法

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061222

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20061222

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20070508

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20070508

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20070518

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees