(57)【特許請求の範囲】
【請求項１】
データベースに対するアクセスを制御するシステムであって、
前記データベースは、複数のキーのそれぞれに対応付けて、当該キーのバリューを格納しており、
前記データベースに対して複数のトランザクションを実行する実行部と、
それぞれの前記トランザクションの実行に応じ、当該トランザクションにおいて参照されるキーのバリューである被参照バリューを、前記データベースから取得して記録する参照記録部と、
前記複数のトランザクションのコミット要求に応じ、前記データベースに格納されているキーのバリューが他のトランザクションによって変更されずに前記被参照バリューのまま維持されているかを判定した判定結果をトランザクション毎に配列した結果テーブルの返信を要求する返信要求部と、
返信された前記結果テーブルに基づいて、それぞれの前記トランザクションについて、当該トランザクションによって参照されたキーのバリューが他のトランザクションによって変更されずに前記被参照バリューのまま維持されていることを条件に、当該トランザクションが成功したと判断する判断部と、
成功したと判断されたトランザクションをコミットし、成功したと判断されなかったトランザクションをロールバックする処理部と
を備えるシステム。
【請求項２】
前記返信要求部は、それぞれのキーについて、当該キーのバリューが前記被参照バリューに一致するかを判定した判定結果を、当該キーを参照するトランザクションの識別情報に対応付けて配列した前記結果テーブルの返信を要求する
請求項１に記載のシステム。
【請求項３】
前記返信要求部は、それぞれのキーについての前記判定結果を返信する要求を、複数の要求の結果を１つのテーブルに結合して返信するコマンドによって、前記複数のキーについて結合して送信する
請求項２に記載のシステム。
【請求項４】
前記返信要求部は、前記判定結果を返信するＳＱＬのＳＥＬＥＣＴコマンドを、複数の要求の結果を結合して返信するＵＮＩＯＮ  ＡＬＬコマンドによって、前記複数のキーについて結合して送信する
請求項３に記載のシステム。
【請求項５】
前記返信要求部は、それぞれにキーについて、当該キーのバリューが前記被参照バリューに一致している行の数をカウントして返信する要求を、前記判定結果の要求とし、前記結果テーブルの返信を要求し、
前記判断部は、前記結果テーブルにおいて、前記被参照バリューに一致している行の数が１であるキーを参照したトランザクションを、成功したトランザクションと判断する
請求項２に記載のシステム。
【請求項６】
前記返信要求部は、予め定められた複数の識別情報のそれぞれについて、当該識別情報に対応付けて前記判定結果を配列した前記結果テーブルの返信を要求し、
要求した前記結果テーブルについて、前記複数の識別情報のそれぞれに対応するキーのバリューが、何れのトランザクションにおいて参照されたバリューであるかを示す対応情報を記録する対応記録部を更に備え、
前記判断部は、前記結果テーブルにおける前記判定結果のそれぞれを、当該判定結果に対応付けられている識別情報と前記対応情報において対応付けられているトランザクションの判定結果として、それぞれのトランザクションが成功したか否かを判断する
請求項１に記載のシステム。
【請求項７】
前記返信要求部は、前記結果テーブルの返信の要求として、前記キーの識別子と前記キーのバリューとをパラメータとし、前記予め定められた複数の識別情報をコマンド中に含む準備済みステートメントを送信する
請求項６に記載のシステム。
【請求項８】
クライアント装置と、アプリケーション・サーバ装置と、データベース・サーバ装置とを備えたシステムであって、
前記クライアント装置は、前記データベース・サーバ装置に対するトランザクションの要求、および／または、コミットの要求を、前記アプリケーション・サーバ装置に対して送信し、
前記データベース・サーバ装置は、複数のキーのそれぞれに対応付けて、当該キーのバリューを格納しているデータベースを有し、
前記アプリケーション・サーバ装置は、
前記クライアント装置から受けた、前記トランザクションの要求に応じ、前記データベースに対して複数のトランザクションを実行する実行部と、
それぞれの前記トランザクションの実行に応じ、当該トランザクションにおいて参照されるキーのバリューである被参照バリューを、前記データベースから取得して記録する参照記録部と、
前記クライアント装置から受けた、前記複数のトランザクションのコミット要求に応じ、前記データベースに格納されているキーのバリューが他のトランザクションによって変更されずに前記被参照バリューのまま維持されているかを判定した判定結果をトランザクション毎に配列した結果テーブルの返信を要求する返信要求部と、
返信された前記結果テーブルに基づいて、それぞれの前記トランザクションについて、当該トランザクションによって参照されたキーのバリューが他のトランザクションによって変更されずに前記被参照バリューのまま維持されていることを条件に、当該トランザクションが成功したと判断する判断部と、
成功したと判断されたトランザクションをコミットし、成功したと判断されなかったトランザクションをロールバックする処理部と
を有するシステム。
【請求項９】
複数の前記クライアント装置を備え、
前記実行部は、前記複数のクライアント装置から受けた、前記トランザクションの要求に応じ、前記複数のトランザクションを実行し、
前記返信要求部は、前記複数のクライアント装置から受けた前記コミット要求に応じ、前記結果テーブルの返信を要求し、
前記処理部は、コミットまたはロールバックしたトランザクションについて、当該トランザクションを要求した前記クライアント装置に対し、コミットまたはロールバックした旨を通知する
請求項８に記載のシステム。
【請求項１０】
データベースに対するアクセスを制御する方法であって、
前記データベースは、複数のキーのそれぞれに対応付けて、当該キーのバリューを格納しており、
前記データベースに対して複数のトランザクションを実行するステップと、
それぞれの前記トランザクションの実行に応じ、当該トランザクションにおいて参照されるキーのバリューである被参照バリューを、前記データベースから取得して記録するステップと、
前記複数のトランザクションのコミット要求に応じ、前記データベースに格納されているキーのバリューが他のトランザクションによって変更されずに前記被参照バリューのまま維持されているかを判定した判定結果をトランザクション毎に配列した結果テーブルの返信を要求するステップと、
返信された前記結果テーブルに基づいて、それぞれの前記トランザクションについて、当該トランザクションによって参照されたキーのバリューが他のトランザクションによって変更されずに前記被参照バリューのまま維持されていることを条件に、当該トランザクションが成功したと判断するステップと、
成功したと判断されたトランザクションをコミットし、成功したと判断されなかったトランザクションをロールバックするステップと
を備える方法。
【請求項１１】
データベースに対するアクセスを制御するシステムとして、情報処理装置を機能させるプログラムであって、
前記データベースは、複数のキーのそれぞれに対応付けて、当該キーのバリューを格納しており、
前記情報処理装置を、
前記データベースに対して複数のトランザクションを実行する実行部と、
それぞれの前記トランザクションの実行に応じ、当該トランザクションにおいて参照されるキーのバリューである被参照バリューを、前記データベースから取得して記録する参照記録部と、
前記複数のトランザクションのコミット要求に応じ、前記データベースに格納されているキーのバリューが他のトランザクションによって更新されずに前記被参照バリューのまま維持されているかを判定した判定結果をトランザクション毎に配列した結果テーブルの返信を要求する返信要求部と、
返信された前記結果テーブルに基づいて、それぞれの前記トランザクションについて、当該トランザクションによって参照されたキーのバリューが他のトランザクションによって更新されずに前記被参照バリューのまま維持されていることを条件に、当該トランザクションが成功したと判断する判断部と、
成功したと判断されたトランザクションをコミットし、成功したと判断されなかったトランザクションをロールバックする処理部と
して機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースに対するアクセスを制御するシステム、および、その方法に関する。特に、本発明は、データベースに対するコミット処理のタイミングを制御するシステムに関する。
【背景技術】
【０００２】
近年、通信ネットワークおよび情報処理装置の普及に伴って、データベース装置の重要性が更に高まってきている。例えば、データベース装置は、ウェブ・サーバ装置やアプリケーション・サーバ装置と共に情報システムを構成し、電子商取引の顧客管理や決済処理などに用いられる。また、データベース装置は、SQL(Structured Query Language)などの問合せ言語のみならず、JDBC(Java(R) DataBase Connectivity)を利用したJava(R)言語によっても制御が可能となってきている。このため、Java(R)言語によって開発された各種のアプリケーション・プログラムとの親和性も高い（Java(R)は登録商標。）。【０００３】
従来、アクセス競合の少ないデータベースにおいてアクセスの効率を向上させる方法として、排他制御を伴わないトランザクション(オプティミスティック・トランザクション
、optimistic transaction)が行われている。オプティミスティック・トランザクション
によれば、トランザクション内のデータアクセス毎に排他制御を行う必要がないので、データベース装置に対するアクセスを効率化できる。【０００４】
但し、オプティミスティック・トランザクションを行った場合には、データベースの整合を維持するために、ベリフィケーション（verification）と呼ばれる処理が必要となる。ベリフィケーションとは、オプティミスティック・トランザクションによって参照されたデータが、そのトランザクションの処理内容をコミットする場合においても、参照時のまま変更されていないことを確かめる処理である。データベース装置は、参照されたデータが変更されていないことを条件に、そのトランザクションの処理内容をコミットし、そのデータが変更されていれば、そのトランザクションをロールバックする。【０００５】
参考技術として、データベース装置に対するアクセスを効率化する技術を以下に挙げる。
従来、データベースの問合わせに対して、意味を変えない範囲でその問合せを書き換えて別の効率よい問合わせに変換して、データベース装置に送信する技術が提案されている（非特許文献１を参照）。しかしながら、この文献は、データベースに対する問合せを効率化する一般的な概念を述べたものにすぎない。例えば、この文献には、実行順序が動的に定まる複数のトランザクションを効率化する具体的方法については述べられていない。また、ＳＱＬを用いた問合せを最適化する具体的方法についても述べられていない。この技術の応用例としては、特許文献１に、順次発行された複数のコマンドを最適化する技術が記載されている。但し、特許文献１に記載の技術は、特殊なツリー構造でデータを管理するデータベースを前提としており、また、それに対するアクセスも特別な問合せ言語を必要とする。非特許文献３の技術も、特殊な問合せ言語を前提としており、今日一般的なデータベースに適用することは困難である。また、非特許文献２においては、データベースのクエリ結果を記憶装置にキャッシュする技術が提案されている。しかしながら、この技術によって効率化されるのは、同一のキーを連続してアクセスした場合であり、異なるキーをアクセスする複数のクエリを効率化することはできない。【０００６】
【特許文献１】U.S. Patent 5920857 Efficient optimistic concurrency control and lazy queries for B-trees and other database structures.
【非特許文献１】Timos K. Sellis, Multiple-Query Optimization, ACM Transactions on Database Systems, Vol. 13, No. 1, March 1988, Pages 23-52
【非特許文献２】Surajit Chaudhuri, Ravi Krishnamurthy, Spyros Potamianos and Kyuseok Shim, Optimizing Queries with Materialized Views, ICDE 95
【非特許文献３】Shivnath Babu and Jennifer Widom, Continuous Queries over Data Streams, SIGMOD Record, Vol. 30, No. 3, September 2001, Pages 109-120
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ベリフィケーションとは、具体的には、アプリケーション・サーバ装置などがデータベース装置にアクセスしてデータを取得し、取得したそのデータを、オプティミスティック・トランザクションにおいて参照されたデータと比較する処理となる。従って、この処理を実現するためには、データベース装置に対するアクセスが必要となる。データベース装置に対するアクセスの回数が増加すると、データベース装置とアプリケーション・サーバ装置との間の通信時間が増加し、処理全体の効率が低下する恐れがある。【０００８】
従って、できるだけ多くのトランザクションについて、ベリフィケーションをまとめて実行すれば、ベリフィケーションの効率を高められると考えられる。しかしながら、複数のトランザクションについてトランザクション境界を考慮せずにベリフィケーションをまとめて実行してしまうと、何れかのトランザクションのベリフィケーションのみが失敗した場合であっても、これら全てのトランザクションをロールバックしなければならず、効率が悪い。【０００９】
そこで本発明は、上記の課題を解決することのできるシステム、方法、および、プログラムを提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、本発明においては、データベースに対するアクセスを制御するシステムであって、データベースは、複数のキーのそれぞれに対応付けて、当該キーのバリューを格納しており、データベースに対して複数のトランザクションを実行する実行部と、それぞれのトランザクションの実行に応じ、当該トランザクションにおいて参照されるキーのバリューである被参照バリューを、データベースから取得して記録する参照記録部と、複数のトランザクションのコミット要求に応じ、データベースに格納されているキーのバリューが他のトランザクションによって変更されずに被参照バリューのまま維持されているかを判定した判定結果をトランザクション毎に配列した結果テーブルの返信を要求する返信要求部と、返信された結果テーブルに基づいて、それぞれのトランザクションについて、当該トランザクションによって参照されたキーのバリューが他のトランザクションによって変更されずに被参照バリューのまま維持されていることを条件に、当該トランザクションが成功したと判断する判断部と、成功したと判断されたトランザクションをコミットし、成功したと判断されなかったトランザクションをロールバックする処理部とを備えるシステム、当該システムによってデータベースに対するアクセスを制御する方法、および、当該システムとして情報処理装置を機能させるプログラムを提供する。
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【発明の効果】
【００１１】
本発明によれば、データベースに対するアクセスの効率を、これまでよりも高めることができる。
【発明を実施するための最良の形態】
【００１２】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。【００１３】
図１は、アクセス制御システム１０の全体構成を示す。アクセス制御システム１０は、クライアント装置２０−１〜Ｎと、アプリケーション・サーバ装置３０と、データベース装置４０とを備える。クライアント装置２０−１〜Ｎは、それぞれ異なる利用者に対応して設けられており、利用者の操作に応じてコマンドをアプリケーション・サーバ装置３０に送信する。このコマンドは、例えば、SQL(Structured Query Language)などの問合せ言語によって記述されていてもよい。アプリケーション・サーバ装置３０は、受け取ったコマンドに応じてデータをデータベース装置４０内のデータベース４５から取得して、キャッシュ部３５に記憶させる。そして、アプリケーション・サーバ装置３０は、順次受信するコマンドに応じてキャッシュ部３５のデータを更新する。アプリケーション・サーバ装置３０は、クライアント装置２０−１〜Ｎからコミット要求を受信したことに応じ、キャッシュ部３５に記憶された内容をデータベース４５に反映する。トランザクションが失敗した場合には、キャッシュ部３５に記憶された内容を無効としてその旨をクライアント装置２０−１〜Ｎに通知する（ロールバック処理）。なお、データベース４５は、複数のキーのそれぞれに対応付けてそのバリューを記憶しており、データベース装置４０は、アプリケーション・サーバ装置３０から指定されたキーのバリューをアプリケーション・サーバ装置３０に返信する。【００１４】
同一のキーについて競合するアクセスが少ない場合には、データベース４５内のキーに対してロックを取らずにトランザクションを行い、データベースの整合をコミット時に判断する方式が効率的である。このようなトランザクションは、オプティミスティック・トランザクション方式と呼ばれている。
図２は、オプティミスティック・トランザクションの処理の概要を示す。
クライアント装置２０−１は、トランザクションを処理すべき要求をアプリケーション・サーバ装置３０に送る（Ｓ２００）。アプリケーション・サーバ装置３０は、その要求に応じてキーのバリューをデータベース装置４０から取得する（Ｓ２１０）。アプリケーション・サーバ装置３０は、取得したデータをキャッシュ部３５内に記憶させ、以降順次受信する要求に応じてそのバリューを更新する（Ｓ２３０）。また、この際、アプリケーション・サーバ装置３０は、更新の対象となるキーの更新前のバリューを、別途記録しておく。【００１５】
アプリケーション・サーバ装置３０は、クライアント装置２０−１からコミット処理の要求を受けると（Ｓ２４０）、更新の対象となったキーのバリューが、更新前のバリューのまま変更されていないかを問合せるベリフィケーションの要求を、データベース装置４０に対して送信する（Ｓ２５０）。アプリケーション・サーバ装置３０は、ベリフィケーションの結果の返信を受ける（Ｓ２６０）。この結果に基づいて、アプリケーション・サーバ装置３０は、トランザクションが成功したか否かを判断する（Ｓ２６５）。トランザクションが成功した場合には、アプリケーション・サーバ装置３０は、トランザクションをコミットする（Ｓ２７０）。また、トランザクションが失敗した場合には、アプリケーション・サーバ装置３０は、トランザクションをロールバックする。アプリケーション・サーバ装置３０は、コミットまたはロールバックした旨を、完了通知としてクライアント装置２０−１に返信する（Ｓ２８０）。【００１６】
以上のようなオプティミスティック・トランザクションにおいては、トランザクションの進行中にはデータベース装置４０に対する通信が発生しないが、ベリフィケーションにおいてはデータベース装置４０に対する通信が生じる。本実施例に係るアクセス制御システム１０は、ベリフィケーションに伴うデータベース装置４０に対するアクセス回数を減少させることによって、アクセス制御システム１０全体の効率を向上させることを目的とする。【００１７】
図３は、アプリケーション・サーバ装置３０の機能構成を示す。アプリケーション・サーバ装置３０は、キャッシュ部３５と、実行部３００と、参照記録部３１０と、リクエスト・キュー３２０と、返信要求部３３０と、判断部３４０と、処理部３５０とを有する。実行部３００は、クライアント装置２０−１〜Ｎから順次受け取ったトランザクションの要求に応じて、データベース４５に対して複数のトランザクションを実行する。具体的には、実行部３００は、要求されたトランザクションにおいてアクセスの対象となるキーのバリューが、キャッシュ部３５に既に格納されているか判断する。そして、実行部３００は、このキーのバリューがキャッシュ部３５に格納されていない場合には、参照記録部３１０に指示してデータベース４５からそのバリューを取得させ、キャッシュ部３５に格納させる。そして、実行部３００は、キャッシュ部３５に格納されたキーのバリューを、要求されたトランザクションを処理することによって更新する。【００１８】
参照記録部３１０は、それぞれのトランザクションの実行に応じ、そのトランザクションにおいて参照されるキーのバリューである被参照バリューを、データベース４５から取得して記録する。更に、参照記録部３１０は、データベース４５から取得したこの被参照バリューをキャッシュ部３５に記憶させる。この被参照バリューは、トランザクションにおいて参照の対象となるキーの、そのトランザクションを処理する前のバリューである。  【００１９】
リクエスト・キュー３２０は、複数のトランザクションのそれぞれについて、そのトランザクションをコミットする要求（以下、コミット要求）をクライアント装置２０−１〜Ｎから順次受信し、それらのコミット要求をその受信順序を保持したまま記憶する。返信要求部３３０は、例えば定期的に、または、コミット要求の受信数が予め定められた基準を超えたことを条件に、以下の処理を行う。返信要求部３３０は、これら複数のトランザクションのコミット要求をリクエスト・キュー３２０から取得する。そして、返信要求部３３０は、これらのコミット要求に応じ、コミットの対象となる複数のトランザクションのベリフィケーションを、データベース装置４０に対する一度のリクエストによって一括して行う。具体的には、返信要求部３３０は、データベース４５に格納されているキーのバリューが他のトランザクションによって変更されずに被参照バリューのまま維持されているかを判定した判定結果をトランザクション毎に配列した結果テーブルの返信を、データベース装置４０に対して要求する。以降、この要求を、ベリファイ要求５００と呼ぶ。返信要求部３３０は、この要求に応じた返信を結果テーブルとして受信する。【００２０】
判断部３４０は、返信されたこの結果テーブルに基づいて、それぞれのトランザクションについて、そのトランザクションによって参照された全てのキーのバリューが他のトランザクションによって変更されずに被参照バリューのまま維持されているか否かを判断する。判断部３４０は、各トランザクションについて、そのトランザクションによって参照された全てのキーのバリューが被参照バリューのまま維持されていることを条件に、そのトランザクションが成功したと判断する。処理部３５０は、成功したと判断されたトランザクションを、コミットする。具体的には、処理部３５０は、キャッシュ部３５に格納されたキーのバリューを読み出してデータベース装置４０に送信し、データベース４５に反映させる。一方で、処理部３５０は、成功したと判断されなかったトランザクションをロールバックする。処理部３５０は、コミットまたはロールバックした旨を、その対象となったトランザクションを要求したクライアント装置に通知する。【００２１】
図４は、参照記録部３１０のデータ構造の一例を示す。参照記録部３１０は、それぞれのトランザクションの識別情報（以下、トランザクションＩＤ）に対応付けて、そのトランザクションにおいて参照されるキーの識別情報（以下、キーＩＤ）と、そのトランザクションにおいて参照されるそのキーのバリューである被参照バリューとを記録する。この被参照バリューは、対応するトランザクションにより更新される前のバリューである。一例として、参照記録部３１０は、トランザクションＩＤの１０１に対応付けて、キーＩＤの１００１と、被参照バリューの１００とを記録する。これは、即ち、トランザクションＩＤが１０１のトランザクションにおいて、キーＩＤが１００１のキーが参照されたことを示しており、更に、このトランザクションの実行前にこのキーのバリューは１００であったことを示している。【００２２】
あるキーに対応する被参照バリューは、そのキーがトランザクションによって初めてアクセスされる時にデータベース４５から読み出されて参照記録部３１０に記録される。そして、この被参照バリューは、その後のトランザクションの実行によっては更新されず、トランザクションのベリフィケーションにおいて使用される。具体的には、このキーの被参照バリューは、トランザクションのコミット時に、他のトランザクションによってこのキーが既に更新されていないかを確かめるために用いられる。【００２３】
図５は、ベリファイ要求５００の一例を示す。本図ではベリファイ要求５００の一例として、ベリフィケーションの結果をトランザクション毎に配列した結果テーブルを要求するためのSQLのコマンド列を示す。図５では、アクセス制御システム１０においてアクセ
スの対象となるデータベース４５中のテーブルを、ｔａｂｌｅ１とする。このテーブルは、ＫＥＹフィールドとＶＡＬＵＥフィールドとを有し、ＫＥＹフィールドにキーＩＤを記憶し、ＶＡＬＵＥフィールドにバリューを記憶しているものとする。【００２４】
図５の１行目のコマンドは、キーＩＤが１００１かつバリューが１００である行の数をカウントし、そのカウント値を定数「１０１」に対応付けた行を生成するコマンドである。このコマンドはSQLによって記述されており、ＳＥＬＥＣＴコマンドは、ＷＨＥＲＥ節
以下の条件を満たす行を選択するコマンドであり、ＣＯＵＮＴ（＊）コマンドは、当該行の数をカウントするコマンドである。【００２５】
このコマンドによって指定されるキーＩＤは、参照記録部３１０に記録されたキーＩＤに対応する。また、このコマンドによって指定されるバリューは、参照記録部３１０に記録された被参照バリューに対応する。即ち、キーＩＤが１００１かつバリューが１００である行の数は、当該キーのバリューが被参照バリューに一致するかを判定した判定結果を示す。具体的には、行の数が０の場合には、判定結果は不一致を示し、行の数が１の場合には、判定結果は一致を示す。即ち、判断部３４０は、返信された結果テーブルにおいて、被参照バリューに一致している行の数が１であるキーを参照したトランザクションを、成功したトランザクションと判断する。【００２６】
また、このコマンドに含まれる定数「１０１」は、参照記録部３１０に記録されたトランザクションＩＤに対応する。即ち、このコマンドは、キーＩＤが１００１のキーについて、このキーを参照するトランザクションＩＤに、このキーのバリューが被参照バリューに一致するかを判定した判定結果を対応付けた行の要求となる。具体的には、トランザクションによって参照されたキーのバリューが参照時のまま維持されている場合には、（１０１，１）という行が返信される。一方で、トランザクションによって参照されたキーのバリューが参照時とは異なっている場合には、（１０１，０）という行が返信される。【００２７】
図５の３行目、５行目、７行目、および、（ｎ＋１）行目のコマンドも１行目のコマンドと同様である。即ち、これらのコマンドは、トランザクションによってアクセスされたそれぞれのキーについて、そのキーのバリューが被参照バリューに一致するかを判定した判定結果の要求となる。【００２８】
図５の２行目、４行目、６行目、８行目、および、ｎ行目のコマンドは、それぞれ、複数の要求に対する結果の行を１つのテーブルに結合して返信するコマンドである。このコマンドは、SQLのＵＮＩＯＮ  ＡＬＬコマンドとなる。結合の対象となる各行は、既に説
明したように、それぞれのキーについての判定結果を返信する要求であるから、ＵＮＩＯＮ  ＡＬＬコマンドは、判定結果の返信要求の結果を１つのテーブルに結合して返信するコマンドとしての役割を果たす。そして、ベリファイ要求５００は、全体で、判定結果の返信要求の結果を複数のキーについて結合して送信するコマンドとなる。【００２９】
以上、図５に例示したコマンドによれば、それぞれのキーについて、そのキーのバリューが被参照バリューに一致するかを判定した判定結果を、そのキーを参照するトランザクションＩＤに対応付けて配列した結果テーブルの返信を要求することができる。これにより、複数のトランザクションについてのベリフィケーションを、一度のコマンド送信によって一括して実現することができる。【００３０】
なお、ある１つのベリファイ要求５００によってベリフィケーションされる複数のトランザクションが、同一のキーを参照している場合には、ベリファイ要求５００の送信に先立ってそれらのトランザクションの競合を解決することが望ましい。即ち例えば、トランザクションＩＤが１０１のトランザクションと、トランザクションＩＤが１０２のトランザクションとが、同一のキーを参照している場合には、これらのトランザクションの双方をコミットすることはできない。従って、返信要求部３３０は、ベリファイ要求５００の送信に先立ち、いずれか一方のトランザクションについてのベリフィケーションのコマンドをベリファイ要求５００から除外して、除外された残りのコマンドを送信することが望ましい。【００３１】
図６は、トランザクションの要求に応じた処理の流れを示す。実行部３００は、クライアント装置２０−１〜Ｎから、トランザクションの要求を受け取る（Ｓ６００）。実行部３００は、クライアント装置２０−１〜Ｎのうち１つのクライアント装置のみからトランザクションの要求を受け取ってもよいし、クライアント装置２０−１〜Ｎのそれぞれから順不同でトランザクションの要求を受け取ってもよい。以下、ある１つのトランザクションの要求に対してアプリケーション・サーバ装置３０が行う処理を述べる。【００３２】
実行部３００は、このトランザクションにおいてアクセスの対象となるキーのバリューがキャッシュ部３５に既に記録されているか否かを判断する（Ｓ６１０）。そのキーのバリューがキャッシュ部３５に記録されていなければ（Ｓ６１０：ＮＯ）、参照記録部３１０は、そのキーのバリューをデータベース４５から取得してキャッシュ部３５に記憶させる（Ｓ６２０）。また、参照記録部３１０は、取得したこのバリューを、このトランザクションによってアクセスの対象となる被参照バリューとして記録する（Ｓ６３０）。【００３３】
被参照バリューの記録に応じ（Ｓ６３０）、または、アクセスの対象となるキーのバリューがキャッシュ部３５に記録されている場合には（Ｓ６１０：ＹＥＳ）、アプリケーション・サーバ装置３０は、Ｓ６４０に処理を移す。Ｓ６４０において、実行部３００は、要求されたトランザクションの実行によって、キャッシュ部３５に記憶されたバリューを更新する。このバリューは、このトランザクションや以降順次実行させるトランザクションによって更に更新されてもよい。
以上、図６において説明した処理によれば、トランザクションの実行前に、そのトランザクションにおいて参照されるキーのバリューを記録し、コミット時のベリフィケーションに利用させることができる。【００３４】
図７は、ベリフィケーションおよびコミット処理の流れを示す。返信要求部３３０は、リクエスト・キュー３２０に記憶されたコミット要求が、予め定められた基準に達したか否かを判断する（Ｓ７００）。この基準は、例えば、コミット要求の数である。これに代えて、返信要求部３３０は、前回ベリフィケーションを行ってからあらかじめ定められた時間が経過したか否かを判断してもよい。【００３５】
コミット要求が予め定められた基準に達したことを条件に（Ｓ７００：ＹＥＳ）、返信要求部３３０は、リクエスト・キュー３２０に記憶された全てのコミット要求について一括してベリフィケーションを行う要求であるベリファイ要求５００をデータベース装置４０に送る（Ｓ７１０）。なお、ベリファイ要求５００の送信に先立って、返信要求部３３０は、ベリフィケーションの対象となるキーに対し排他制御のためのロックを取得することが望ましい。また、ベリフィケーションの対象となる複数のトランザクションは、クライアント装置２０−１などの単一のクライアント装置から要求されたものであってもよいし、クライアント装置２０−１〜Ｎのそれぞれから要求されたトランザクションを混合したものであってもよい。判断部３４０は、ベリファイ要求５００の返信である結果テーブルに基づき、コミット要求の対象となっているそれぞれのトランザクションが成功したか否かを判断する（Ｓ７２０）。【００３６】
具体的には、判断部３４０は、それぞれのトランザクションについて、当該トランザクションにおいて参照された何れかのキーの現在のバリューが他のトランザクションによって変更されて被参照バリューと異なることとなった場合には、そのトランザクションが失敗したと判断する。これは、そのバリューが、既に他のトランザクションにおいて書き換えられ、そのバリューの値についてアクセスの競合が起こったからである。つまり、オプティミスティック・トランザクションの前提である、「参照したキーのバリューは他のトランザクションとは競合しない」という仮定が崩れたからである。一方で、判断部３４０は、それぞれのトランザクションについて、当該トランザクションにおいて参照された全てのキーの現在のバリューが他のトランザクションによって変更されずに被参照バリューのまま維持されている場合には、そのトランザクションが成功したと判断する。【００３７】
処理部３５０は、成功したと判断されたトランザクションをコミットする（Ｓ７３０）。また、処理部３５０は、成功したと判断されなかったトランザクションをロールバックする（Ｓ７４０）。コミットまたはロールバックの完了を条件に、処理部３５０は、ベリフィケーションの対象となるキーについて取得していたロックを解放することが望ましい。そして、処理部３５０は、コミットしたトランザクションについて、そのトランザクションを要求したクライアント装置に対し、トランザクションが成功した旨を通知する（Ｓ７５０）。一方で、処理部３５０は、ロールバックしたトランザクションについて、そのトランザクションを要求したクライアント装置に対し、トランザクションが失敗した旨を通知する。【００３８】
以上、図１から図７を用いて説明した実施例によれば、オプティミスティック・トランザクションにおけるベリフィケーションを、複数のトランザクションについて一括して処理することができ、データベース装置４０に対するアクセス効率を大幅に高めることができる。【００３９】
図８は、本実施例の変形例におけるアプリケーション・サーバ装置３０の構成例を示す。本変形例においては、SQLの準備済みステートメントを用いる方法について説明する。
この変形例は、準備済みステートメントを用いることで、ベリフィケーションに先立ってベリファイ要求５００の雛形を準備しておくことができ、ベリフィケーション時の処理効率を一層高めることができる。【００４０】
本変形例におけるアプリケーション・サーバ装置３０は、図３に示す構成に加えて、更に、対応記録部３４５を有する。また、本変形例における判断部３４０は、コミット対象となるトランザクションのトランザクションＩＤに代えて、予め定められた複数の識別情報をベリファイ要求５００に埋め込む（この識別情報を既定識別情報と呼ぶ。）。対応記録部３４５は、要求した結果テーブルについて、これら複数の既定識別情報のそれぞれに対応するキーのバリューが、何れのトランザクションにおいて参照されたバリューであるかを示す対応情報を記録する。そして、判断部３４０は、このベリファイ要求５００に対する返信である結果テーブルを受信したことに応じ、この結果テーブルと、対応記録部３４５との双方に基づいて、各トランザクションの成否を判断する。
その他の構成については、図３に示す構成と略同一であるので説明を省略する。【００４１】
図９は、本実施例の変形例におけるベリファイ要求５００の一例を示す。図９におけるベリファイ要求５００は、図５のベリファイ要求５００とは異なり、準備済みステートメントを利用して生成される。準備済みステートメントは、コマンド実行時に値を代入可能な複数のパラメータを含むコマンド列の雛形である。図９に示すベリファイ要求５００において、これらのパラメータには既に値が代入されている。代入された値には下線を付して示す。即ち、返信要求部３３０は、ベリフィケーションに先立って予め、キーＩＤおよびバリューをパラメータとするベリファイ要求５００の雛形を準備済みステートメントとして生成しておく。また、この準備済みステートメントには、上述の複数の既定識別情報が予め埋め込まれている。図９の例では具体的には、各ＳＥＬＥＣＴコマンドの直後に、１からｎまでの番号が既定識別情報として埋め込まれる。【００４２】
ベリフィケーションに際し、返信要求部３３０は、それぞれのトランザクションについて、そのトランザクションによって参照されたキーのキーＩＤおよびそのバリューを、参照記録部３１０から取得してベリファイ要求５００のパラメータに代入する。そして、返信要求部３３０は、代入したＳＥＬＥＣＴコマンドに埋め込まれている既定識別情報に、そのトランザクションのトランザクションＩＤを対応付けて対応記録部３４５に記録する。このようにして生成された、既定識別情報およびトランザクションＩＤの組を、以下の図１０に例示する。【００４３】
図１０は、対応記録部３４５のデータ構造の一例を示す。対応記録部３４５は、それぞれの既定識別情報に対応付けて、トランザクションＩＤを記録している。例えば、トランザクションＩＤが１０１のトランザクションについて、そのトランザクションによって参照されたキーのキーＩＤおよびそのバリューを埋め込んだＳＥＬＥＣＴコマンドは、既定識別情報である１を含んでいたとする。この場合、対応記録部３４５は、既定識別情報である１に対応付けて、トランザクションＩＤである１０１を対応付けて記録する。【００４４】
この変形例において、判断部３４０は、各トランザクションにおいて参照されたキーのバリューが参照時のまま更新されていないことを判定した判定結果を、結果テーブルから読み出す。そして、判断部３４０は、結果テーブルにおけるこれらの判定結果のそれぞれを、その判定結果に対応付けられている既定識別情報とこの対応情報において対応付けられているトランザクションの判定結果と判断する。図９および図１０の例では具体的には、判断部３４０は、結果テーブルにおいて既定識別情報の１に対応付けられている判定結果を、トランザクションＩＤが１０１のトランザクションの判定結果と判断する。【００４５】
以上、本変形例によれば、準備済みステートメントを利用した場合であっても、ベリフィケーション毎にベリファイ要求５００を生成する場合と同様に、複数のトランザクションについてのベリフィケーションを一括して処理でき、データベースに対するアクセス効率を高めることができる。更に、準備済みステートメントによれば、コマンド列の大部分を予め準備しておくことができ、ベリフィケーション毎にコマンド列を生成する必要がないので効率がよい。【００４６】
図１１は、以上の実施例および変形例においてアプリケーション・サーバ装置３０として機能する情報処理装置４００のハードウェア構成の一例を示す。情報処理装置４００は、ホストコントローラ１０８２により相互に接続されるＣＰＵ１０００、ＲＡＭ１０２０、及びグラフィックコントローラ１０７５を有するＣＰＵ周辺部と、入出力コントローラ１０８４によりホストコントローラ１０８２に接続される通信インターフェイス１０３０、ハードディスクドライブ１０４０、及びＣＤ−ＲＯＭドライブ１０６０を有する入出力部と、入出力コントローラ１０８４に接続されるＢＩＯＳ１０１０、フレキシブルディスクドライブ１０５０、及び入出力チップ１０７０を有するレガシー入出力部とを備える。  【００４７】
ホストコントローラ１０８２は、ＲＡＭ１０２０と、高い転送レートでＲＡＭ１０２０をアクセスするＣＰＵ１０００及びグラフィックコントローラ１０７５とを接続する。ＣＰＵ１０００は、ＢＩＯＳ１０１０及びＲＡＭ１０２０に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィックコントローラ１０７５は、ＣＰＵ１０００等がＲＡＭ１０２０内に設けたフレームバッファ上に生成する画像データを取得し、表示装置１０８０上に表示させる。これに代えて、グラフィックコントローラ１０７５は、ＣＰＵ１０００等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。【００４８】
入出力コントローラ１０８４は、ホストコントローラ１０８２と、比較的高速な入出力装置である通信インターフェイス１０３０、ハードディスクドライブ１０４０、及びＣＤ−ＲＯＭドライブ１０６０を接続する。通信インターフェイス１０３０は、ネットワークを介して外部の装置と通信する。ハードディスクドライブ１０４０は、情報処理装置４００が使用するプログラム及びデータを格納する。ＣＤ−ＲＯＭドライブ１０６０は、ＣＤ−ＲＯＭ１０９５からプログラム又はデータを読み取り、ＲＡＭ１０２０又はハードディスクドライブ１０４０に提供する。【００４９】
また、入出力コントローラ１０８４には、ＢＩＯＳ１０１０と、フレキシブルディスクドライブ１０５０や入出力チップ１０７０等の比較的低速な入出力装置とが接続される。ＢＩＯＳ１０１０は、情報処理装置４００の起動時にＣＰＵ１０００が実行するブートプログラムや、情報処理装置４００のハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ１０５０は、フレキシブルディスク１０９０からプログラム又はデータを読み取り、入出力チップ１０７０を介してＲＡＭ１０２０またはハードディスクドライブ１０４０に提供する。入出力チップ１０７０は、フレキシブルディスク１０９０や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。【００５０】
情報処理装置４００に提供されるプログラムは、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５、又はＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、入出力チップ１０７０及び/又は入出力コントローラ１０８４を介して
、記録媒体から読み出され情報処理装置４００にインストールされて実行される。プログラムが情報処理装置４００等に働きかけて行わせる動作は、図１から図１０において説明したアプリケーション・サーバ装置３０における動作と同一であるから、説明を省略する。【００５１】
以上に示したプログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５の他に、ＤＶＤやＰＤ等の光学記録媒体、ＭＤ等の光磁気記録媒体、テープ媒体、ＩＣカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はＲＡＭ等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムを情報処理装置４００に提供してもよい。【００５２】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【図面の簡単な説明】
【００５３】
【図１】図１は、アクセス制御システム１０の全体構成を示す。
【図２】図２は、オプティミスティック・トランザクションの処理の概要を示す。
【図３】図３は、アプリケーション・サーバ装置３０の機能構成を示す。
【図４】図４は、参照記録部３１０のデータ構造の一例を示す。
【図５】図５は、ベリファイ要求５００の一例を示す。
【図６】図６は、トランザクションの要求に応じた処理の流れを示す。
【図７】図７は、ベリフィケーションおよびコミット処理の流れを示す。
【図８】図８は、本実施例の変形例におけるアプリケーション・サーバ装置３０の構成例を示す。
【図９】図９は、本実施例の変形例におけるベリファイ要求５００の一例を示す。
【図１０】図１０は、対応記録部３４５のデータ構造の一例を示す。
【図１１】図１１は、以上の実施例および変形例においてアプリケーション・サーバ装置３０として機能する情報処理装置４００のハードウェア構成の一例を示す。
【符号の説明】
【００５４】
１０  アクセス制御システム
２０  クライアント装置
３０  アプリケーション・サーバ装置
３５  キャッシュ部
４０  データベース装置
４５  データベース
３００  実行部
３１０  参照記録部
３２０  リクエスト・キュー
３３０  返信要求部
３４０  判断部
３４５  対応記録部
３５０  処理部
４００  情報処理装置
５００  ベリファイ要求
【図１】
0004794571.tif 000002
【図２】
0004794571.tif 000003
【図３】
0004794571.tif 000004
【図４】
0004794571.tif 000005
【図５】
0004794571.tif 000006
【図６】
0004794571.tif 000007
【図７】
0004794571.tif 000008
【図８】
0004794571.tif 000009
【図９】
0004794571.tif 000010
【図１０】
0004794571.tif 000011
【図１１】
0004794571.tif 000012