(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-10-12
(45)【発行日】2022-10-20
(54)【発明の名称】データベースサーバ装置、サーバシステム及びリクエスト処理方法
(51)【国際特許分類】
G06F 16/2453 20190101AFI20221013BHJP
G06F 16/242 20190101ALI20221013BHJP
G06F 16/25 20190101ALI20221013BHJP
【FI】
G06F16/2453
G06F16/242
G06F16/25
(21)【出願番号】P 2019147655
(22)【出願日】2019-08-09
【審査請求日】2021-11-25
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110002365
【氏名又は名称】特許業務法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】伊藤 建志
(72)【発明者】
【氏名】藤平 健二
【審査官】甲斐 哲雄
(56)【参考文献】
【文献】中国特許出願公開第108228597(CN,A)
【文献】米国特許第5721904(US,A)
【文献】米国特許出願公開第2006/0277157(US,A1)
【文献】特開2018-163490(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
データベースシステムに対してデータの操作処理を行うデータベースサーバ装置であって、
所定の単純なAPIを提供し、
前記単純なAPIを利用したリクエストをWebサーバ装置から受信し、前記受信したリクエストに含まれるリクエストデータを解析して処理を振り分けるリクエスト処理部と、
前記リクエスト処理部によって振り分けられた前記リクエストに基づいて、SQL文を生成するSQL作成部と、
前記SQL作成部によって生成された前記SQL文に対して所定の処理を行ってSQL全体文を作成し、前記作成したSQL全体文を前記データベースシステムに送信するSQL処理部と、
を備え、
前記リクエスト処理部が、前記Webサーバ装置から一連の処理を要求する前記リクエストとして、分割された複数のリクエストを前記受信した場合に、
前記SQL処理部は、
前記分割された複数のリクエストの全てに対して前記SQL作成部による前記SQL文の生成が終了するまで、前記複数のリクエストの各リクエストに基づいて前記SQL作成部によって生成された前記SQL文を一時保存し、
前記分割された複数のリクエストの全てに対して前記SQL作成部による前記SQL文の生成が終了した後に、前記一時保存した複数の前記SQL文を結合及び編集して前記SQL全体文を作成するSQL統合処理を実行する
ことを特徴とするデータベースサーバ装置。
【請求項2】
前記Webサーバ装置から前記受信する前記リクエストに含まれる前記リクエストデータには、前記一連の処理を要求するリクエストごとに同一の値が付与されるリクエストID、パラメータ名、及び前記一連の処理の最後のリクエストであるか否かを示す終了フラグが含まれ、
前記SQL処理部は、前記SQL作成部によって生成された前記SQL文に対応する前記リクエストに含まれる前記終了フラグが前記一連の処理の最後のリクエストであることを示す場合に前記SQL統合処理を実行し、
前記SQL統合処理には、前記一時保存した前記複数のSQL文のうち、前記リクエストIDの値が同一である前記リクエストに基づいて前記生成された全ての前記SQL文を前記SQL全体文に結合する結合処理が含まれる
ことを特徴とする請求項1に記載のデータベースサーバ装置。
【請求項3】
前記SQL統合処理には、前記SQL文と前記リクエストに含まれる前記パラメータ名との対応関係を判断し、前記判断した結果に基づいて、それぞれの前記SQL文または前記結合した前記SQL全体文を編集する編集処理が含まれる
ことを特徴とする請求項2に記載のデータベースサーバ装置。
【請求項4】
前記SQL処理部は、前記SQL統合処理の前記結合処理において、前記SQL全体文への結合の対象となる前記全てのSQL文を時系列に基づいて連結する
ことを特徴とする請求項2に記載のデータベースサーバ装置。
【請求項5】
前記SQL処理部は、前記SQL統合処理の前記編集処理において、前記結合処理が行われた後の前記SQL全体文のなかで、特定の処理に関するSQL文の順序を所定の規則に従って整列する
ことを特徴とする請求項3に記載のデータベースサーバ装置。
【請求項6】
前記SQL処理部は、前記SQL統合処理の前記編集処理において、前記結合処理が行われた後の前記SQL全体文のなかで、ロック処理に関するSQL文を最初に移動させ、コミット処理に関するSQL文を最後に移動させる
ことを特徴とする請求項5に記載のデータベースサーバ装置。
【請求項7】
前記SQL処理部は、前記SQL統合処理の前記編集処理において、前記SQL文と前記パラメータ名との対応関係の判断結果に基づいて、前記SQL文の固定パラメータにはパラメータ値を代入するとともに、動的パラメータを用いる前記SQL文に対しては、当該動的パラメータのみを取得するように前記SQL文または前記SQL全体文を編集する
ことを特徴とする請求項3に記載のデータベースサーバ装置。
【請求項8】
前記リクエスト処理部が、前記Webサーバ装置から一連の処理を要求する前記リクエストとして、前記分割された複数のリクエストを前記受信した場合に、
前記SQL処理部は、前記SQL統合処理によって前記SQL全体文を作成するまでの間、前記データベースシステムに保存されているデータを変更する前記操作処理を行わない
ことを特徴とする請求項1に記載のデータベースサーバ装置。
【請求項9】
前記データベースサーバ装置は、前記データベースシステムに保存される1つのデータグループに対して、更新、保存、または取得のうちの1処理を行うAPIを、前記単純なAPIとして提供する
ことを特徴とする請求項1に記載のデータベースサーバ装置。
【請求項10】
データベースシステムに対してデータの操作処理を行うサーバシステムであって、
所定の単純なAPIを提供するデータベースサーバ装置と、
Webクライアントからの要求に応じて、前記データベースシステムに対するデータの操作処理の実行を前記データベースサーバ装置に依頼するWebサーバ装置と、
を備え、
前記Webサーバ装置は、
前記データベースサーバ装置が提供する前記単純なAPIを利用したリクエストを作成し、前記データベースサーバ装置に送信するリクエスト作成部を有し、
前記データベースサーバ装置は、
前Webサーバ装置から前記リクエストを受信し、前記受信したリクエストに含まれるリクエストデータを解析して処理を振り分けるリクエスト処理部と、
前記リクエスト処理部によって振り分けられた前記リクエストに基づいて、SQL文を生成するSQL作成部と、
前記SQL作成部によって生成された前記SQL文に対して所定の処理を行ってSQL全体文を作成し、前記作成したSQL全体文を前記データベースシステムに送信するSQL処理部と、を有し、
前記Webクライアントから一連の処理の実行が要求された場合に、
前記リクエスト作成部は、前記一連の処理に対応するリクエストを、前記単純なAPIを用いて複数のリクエストに分割して作成して送信し、
前記SQL処理部は、前記分割された複数のリクエストの全てに対して前記SQL作成部による前記SQL文の生成が終了するまで、前記複数のリクエストの各リクエストに基づいて前記SQL作成部によって生成された前記SQL文を一時保存し、前記分割された複数のリクエストの全てに対して前記SQL作成部による前記SQL文の生成が終了した後に、前記一時保存した複数の前記SQL文を結合及び編集して前記SQL全体文を作成するSQL統合処理を実行する
することを特徴とするサーバシステム。
【請求項11】
前記リクエスト作成部は、前記リクエストを作成する際に、当該リクエストに含める前記リクエストデータに、前記一連の処理を要求するリクエストごとに同一の値が付与されるリクエストID、パラメータ名、及び前記一連の処理の最後のリクエストであるか否かを示す終了フラグを含め、
前記SQL処理部は、前記SQL作成部によって生成された前記SQL文に対応する前記リクエストに含まれる前記終了フラグが前記一連の処理の最後のリクエストであることを示す場合に前記SQL統合処理を実行し、
前記SQL統合処理には、前記一時保存した前記複数のSQL文のうち、前記リクエストIDの値が同一である前記リクエストに基づいて前記生成された全ての前記SQL文を前記SQL全体文に結合する結合処理が含まれる
ことを特徴とする請求項10に記載のサーバシステム。
【請求項12】
前記SQL統合処理には、前記SQL文と前記リクエストに含まれる前記パラメータ名との対応関係を判断し、前記判断した結果に基づいて、それぞれの前記SQL文または前記結合した前記SQL全体文を編集する編集処理が含まれる
ことを特徴とする請求項11に記載のサーバシステム。
【請求項13】
前記SQL処理部は、前記SQL統合処理の前記編集処理において、前記結合処理が行われた後の前記SQL全体文のなかで、特定の処理に関するSQL文の順序を所定の規則に従って整列する
ことを特徴とする請求項12に記載のサーバシステム。
【請求項14】
データベースシステムに対してデータの操作処理を行うサーバシステムによるリクエスト処理方法であって、
前記サーバシステムは、所定の単純なAPIを提供するデータベースサーバ装置と、Webクライアントからの要求に応じて、前記データベースシステムに対するデータの操作処理の実行を前記データベースサーバ装置に依頼するWebサーバ装置と、を有し、
前記Webサーバ装置が、前記データベースサーバ装置が提供する前記単純なAPIを利用したリクエストを作成し、前記データベースサーバ装置に送信するリクエスト作成ステップと、
前記データベースサーバ装置が、前記リクエスト作成ステップで送信された前記リクエストを受信し、前記受信したリクエストに含まれるリクエストデータを解析して処理を振り分けるリクエスト処理ステップと、
前記データベースサーバ装置が、前記リクエスト処理ステップで振り分けられた前記リクエストに基づいて、SQL文を生成するSQL作成ステップと、
前記データベースサーバ装置が、前記SQL作成ステップで生成された前記SQL文に対して所定の処理を行ってSQL全体文を作成し、前記作成したSQL全体文を前記データベースシステムに送信するSQL処理ステップと、
を備え、
前記Webクライアントから一連の処理の実行が要求された場合に、
前記リクエスト作成ステップにおいて、前記一連の処理に対応するリクエストを、前記単純なAPIを用いて複数のリクエストに分割して作成して送信し、
前記SQL処理ステップにおいて、前記分割された複数のリクエストの全てに対して前記SQL作成ステップによる前記SQL文の生成が終了するまで、前記複数のリクエストの各リクエストに基づいて前記SQL作成ステップで生成された前記SQL文を一時保存し、前記分割された複数のリクエストの全てに対して前記SQL作成ステップによる前記SQL文の生成が終了した後に、前記一時保存した複数の前記SQL文を結合及び編集して前記SQL全体文を作成するSQL統合処理を実行する
することを特徴とするリクエスト処理方法。
【請求項15】
前記リクエスト作成ステップにおいて前記リクエストを作成する際、前記Webサーバ装置は、当該リクエストに含める前記リクエストデータに、前記一連の処理を要求するリクエストごとに同一の値が付与されるリクエストID、パラメータ名、及び前記一連の処理の最後のリクエストであるか否かを示す終了フラグを含め、
前記SQL処理ステップにおいて、前記データベースサーバ装置は、前記SQL作成ステップで生成された前記SQL文に対応する前記リクエストに含まれる前記終了フラグが前記一連の処理の最後のリクエストであることを示す場合に前記SQL統合処理を実行し、
前記SQL統合処理には、前記一時保存した前記複数のSQL文のうち、前記リクエストIDの値が同一である前記リクエストに基づいて前記生成された全ての前記SQL文を前記SQL全体文に結合する結合処理が含まれる
ことを特徴とする請求項14に記載のリクエスト処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データベースサーバ装置、サーバシステム及びリクエスト処理方法に関し、Webシステムにおいてデータベースに対するデータ処理のリクエストを処理するデータベースサーバ装置、サーバシステム及びリクエスト処理方法に適用して好適なものである。
【背景技術】
【0002】
従来、一般的なWebシステムでは、Webサーバ装置がデータベース管理システム(DBMS:DataBase Management System)に直接接続するように構成され、Webサーバ装置からDBMSに対してSQL文を投げることによってデータ処理を要求する。DBMSは様々なベンダが提供しているが、DBMSによってSQLの表現方法やデータ型等が異なる。そのため、従来の一般的なWebシステムでは、あるDBMSに向けて作成したWebシステムを他のDBMSに対応するように切り替えることは容易でないという問題があった。
【0003】
ここで、ユーザ側が準備するDBMSに容易に対応可能なWebシステムとして、Webサーバ装置とDBMSとの間にデータベース(DB)サーバ装置を備える構成が知られている。DBサーバ装置を備えたWebシステムでは、Webサーバ装置が、HTTP(Hypertext Transfer Protocol)プロトコルを利用してDBMSに対するデータの操作処理の実行をDBサーバ装置に依頼し、HTTPサーバで構成されるDBサーバ装置が、DBMSに対応するSQL文を生成し、DBMSに対してデータ処理を要求することにより、DBMSの構成を気にすることなくDBMSに処理を依頼することができる。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
ところで、Webシステムをベースとしたプラットフォームを構築しようとする場合、Webシステムには、DBMSに容易に対応可能という上述した要件に加えて、主にWebシステムを修正することによって異なる適用先(案件)にも適用可能であることが求められる。この場合、データベースのデータ項目やDBMSに対するデータ処理等は適用先によって異なるため、適用先の内容に応じてWebクライアントやWebシステムを修正する必要がある。例えばDBサーバ装置はWebサーバ装置に対してAPI(Application Programming Interface)を提供するが、通常1つのAPIは一連のDBMSの処理を行うものとして提供されるため、現在の案件特有のAPIとなる傾向がある。つまり、Webシステムを異なる案件に対応する場合には、DBサーバ装置が提供するAPIを修正する必要が生じ、これはDBサーバ装置側の修正負担を大きくしてしまう。この結果、適用先の案件の内容に応じた実装修正の負荷が大きくなると、当該案件に早急に対応することができなくなる、という問題があった。
【0006】
ここで、例えば特許文献1には、分割したAPIを組み合わせて一連の処理の実行を要求し、トランザクションの開始やコミット等の際にDBサーバ装置が指定したURL(Uniform Resource Locator)を送ることによって、一連の処理に跨ってロック、コミット、またはロールバックの処理を実行可能にする実行する方法が開示されている。特許文献1に開示された方法を利用すれば、一連の処理を1つのAPIで表さずに、複数のAPIに分割することができるため、Webシステムを異なる適用先に適用しようとする場合に、DBサーバ装置側の修正負担を低減する効果に期待できる。しかし、特許文献1に開示された方法の場合、分割したAPIの組み合わせによってDBMSに対する一連の処理を実行しようとする場合に、HTTP通信が何回も実行されることになり、その間ロックが継続するため、ロックを取得する時間(ロック時間)が長くなるという問題があった。ロック時間が長くなることがデータベースの利用において好ましくないことは周知の事実であり、これを解消してロックに必要な時間を短縮しようとすると、単一のAPI内で一連の処理を実施する必要がある。すなわち、特許文献1に開示された方法では、一連の処理の実行においてロック時間を短縮しようとすると、Webシステムを異なる適用先に適用しようとする場合にDBサーバ装置側の修正負担を低減し得るという効果が失われてしまう。
【0007】
本発明は以上の点を考慮してなされたもので、一連の処理の実行時にデータベースのロック時間の長期化を抑制するとともに、Webシステムの適用先を変更する際にデータベースサーバ装置の実装修正に関する負荷を低減することが可能なデータベースサーバ装置、サーバシステム及びリクエスト処理方法を提案しようとするものである。
【課題を解決するための手段】
【0008】
かかる課題を解決するため本発明においては、データベースシステムに対してデータの操作処理を行う以下のデータベースサーバ装置が提供される。このデータベースサーバ装置は、所定の単純なAPIを提供し、前記単純なAPIを利用したリクエストをWebサーバ装置から受信し、前記受信したリクエストに含まれるリクエストデータを解析して処理を振り分けるリクエスト処理部と、前記リクエスト処理部によって振り分けられた前記リクエストに基づいて、SQL文を生成するSQL作成部と、前記SQL作成部によって生成された前記SQL文に対して所定の処理を行ってSQL全体文を作成し、前記作成したSQL全体文を前記データベースシステムに送信するSQL処理部と、を備える。さらに、このデータベースサーバ装置では、前記リクエスト処理部が、前記Webサーバ装置から一連の処理を要求する前記リクエストとして、分割された複数のリクエストを受信した場合に、前記SQL処理部は、前記分割された複数のリクエストの全てに対して前記SQL作成部による前記SQL文の生成が終了するまで、前記複数のリクエストの各リクエストに基づいて前記SQL作成部によって生成された前記SQL文を一時保存し、前記分割された複数のリクエストの全てに対して前記SQL作成部による前記SQL文の生成が終了した後に、前記一時保存した複数の前記SQL文を結合及び編集して前記SQL全体文を作成するSQL統合処理を実行する。
【0009】
また、かかる課題を解決するため本発明においては、データベースシステムに対してデータの操作処理を行う以下のサーバシステムが提供される。このサーバシステムは、所定の単純なAPIを提供するデータベースサーバ装置と、Webクライアントからの要求に応じて、前記データベースシステムに対するデータの操作処理の実行を前記データベースサーバ装置に依頼するWebサーバ装置と、を備える。そして、前記Webサーバ装置は、前記データベースサーバ装置が提供する前記単純なAPIを利用したリクエストを作成し、前記データベースサーバ装置に送信するリクエスト作成部を有し、前記データベースサーバ装置は、前Webサーバ装置から前記リクエストを受信し、前記受信したリクエストに含まれるリクエストデータを解析して処理を振り分けるリクエスト処理部と、前記リクエスト処理部によって振り分けられた前記リクエストに基づいて、SQL文を生成するSQL作成部と、前記SQL作成部によって生成された前記SQL文に対して所定の処理を行ってSQL全体文を作成し、前記作成したSQL全体文を前記データベースシステムに送信するSQL処理部と、を有する。このようなサーバシステムでは、前記Webクライアントから一連の処理の実行が要求された場合に、前記リクエスト作成部は、前記一連の処理に対応するリクエストを、前記単純なAPIを用いて複数のリクエストに分割して作成して送信し、前記SQL処理部は、前記分割された複数のリクエストの全てに対して前記SQL作成部による前記SQL文の生成が終了するまで、前記複数のリクエストの各リクエストに基づいて前記SQL作成部によって生成された前記SQL文を一時保存し、前記分割された複数のリクエストの全てに対して前記SQL作成部による前記SQL文の生成が終了した後に、前記一時保存した複数の前記SQL文を結合及び編集して前記SQL全体文を作成するSQL統合処理を実行する。
【0010】
また、かかる課題を解決するため本発明においては、データベースシステムに対してデータの操作処理を行うサーバシステムによる以下のリクエスト処理方法が提供される。ここで、前記サーバシステムは、所定の単純なAPIを提供するデータベースサーバ装置と、Webクライアントからの要求に応じて、前記データベースシステムに対するデータの操作処理の実行を前記データベースサーバ装置に依頼するWebサーバ装置と、を有する。そして、このリクエスト処理方法は、前記Webサーバ装置が、前記データベースサーバ装置が提供する前記単純なAPIを利用したリクエストを作成し、前記データベースサーバ装置に送信するリクエスト作成ステップと、前記データベースサーバ装置が、前記リクエスト作成ステップで送信された前記リクエストを受信し、前記受信したリクエストに含まれるリクエストデータを解析して処理を振り分けるリクエスト処理ステップと、前記データベースサーバ装置が、前記リクエスト処理ステップで振り分けられた前記リクエストに基づいて、SQL文を生成するSQL作成ステップと、前記データベースサーバ装置が、前記SQL作成ステップで生成された前記SQL文に対して所定の処理を行ってSQL全体文を作成し、前記作成したSQL全体文を前記データベースシステムに送信するSQL処理ステップと、を備える。このようなリクエスト処理方法では、前記Webクライアントから一連の処理の実行が要求された場合に、前記リクエスト作成ステップにおいて、前記一連の処理に対応するリクエストを、前記単純なAPIを用いて複数のリクエストに分割して作成して送信し、前記SQL処理ステップにおいて、前記分割された複数のリクエストの全てに対して前記SQL作成ステップによる前記SQL文の生成が終了するまで、前記複数のリクエストの各リクエストに基づいて前記SQL作成ステップで生成された前記SQL文を一時保存し、前記分割された複数のリクエストの全てに対して前記SQL作成ステップによる前記SQL文の生成が終了した後に、前記一時保存した複数の前記SQL文を結合及び編集して前記SQL全体文を作成するSQL統合処理を実行する。
【発明の効果】
【0011】
本発明によれば、一連の処理の実行時にデータベースのロック時間の長期化を抑制するとともに、Webシステムの適用先を変更する際にデータベースサーバ装置の実装修正に関する負荷を低減することができる。
【図面の簡単な説明】
【0012】
【
図1】本発明の一実施形態に係るサーバシステムを含むWebシステムの全体構成例を示すブロック図である。
【
図2】
図1に示したサーバシステムの機能構成例を示すブロック図である。
【
図3】SQL処理の処理手順例を示すフローチャートである。
【
図4】応答データとして生成されるJSONデータの具体例を説明するための図である。
【
図5】SQL統合処理の処理手順例を示すフローチャートである。
【
図6】Webシステムにおける一連の処理の流れを示すシーケンス図である。
【
図7】DBMSに含まれるテーブルの一例を示す図である。
【
図8】APIに関するSQL文とJSONデータの具体例を示す図である。
【
図9】SQL統合処理の具体例を説明するための図である。
【発明を実施するための形態】
【0013】
以下、図面を参照して、本発明の一実施形態を詳述する。なお、一般にWebシステムは、Webサーバ装置とアプリケーション(AP)サーバ装置とが別々に存在する場合と、Webサーバ装置だけでAPサーバ装置の役割も担う(機能を有する)場合とがある。しかし、何れの構成であっても本発明に影響はなく、説明を簡略にするため、以下では、Webサーバ装置はAPサーバ装置の役割も担うとして説明する。
【0014】
図1は、本発明の一実施形態に係るサーバシステムを含むWebシステムの全体構成例を示すブロック図である。
【0015】
図1に示したように、Webシステム10は、本実施形態に係るサーバシステム100とDBMS130とを備えて構成され、サーバシステム100は、Webサーバ装置110及びデータベース(DB)サーバ装置120を備える。Webサーバ装置110はWebクライアント20に接続され、DBサーバ装置120はデータベース管理システム(DBMS)130に接続される。なお、本実施形態において、DBMS130はユーザ側が準備してもよいことを想定して一般的なDBMSとし、Webシステム10は、プラットフォーム的な位置付けであり、Webシステム10の構成を修正することによって、異なる適用先(案件)にも適用され得るものとする。
【0016】
Webクライアント20は、データベースに対するデータ処理をWebシステム10に要求するクライアントであって、当該要求はWebサーバ装置110に入力される。Webシステム10ではWebクライアント20からの要求に応じて後述する処理を実行し、その結果として得られたデータを、Webサーバ装置110からWebクライアント20に返す。
【0017】
サーバシステム100において、DBサーバ装置120はHTTPサーバであり、Webサーバ装置110はHTTPによる通信を行うサーバである。Webサーバ装置110及びDBサーバ装置120は、CPU(Central Processing Unit)等のプロセッサ、RAM(Random Access Memory)等の主記憶装置、及びHDD(Hard Disk Drive)やSSD(Solid State Drive)等の補助記憶装置を有する。
【0018】
Webサーバ装置110は、任意のネットワークを介してWebクライアント20と接続され、DBサーバ装置120とHTTP通信で接続される。本実施形態では、Webサーバ装置110とDBサーバ装置120との間は、例えばJSON(JavaScript(登録商標) Object Notation)形式データで通信が行われる。詳細は後述するが、Webサーバ装置110は、Webクライアント20からの要求に応じて、DBMS130に対するデータの操作処理(データ処理)の実行をDBサーバ装置120にHTTP通信経由で依頼する。この依頼を以下ではリクエストと呼ぶ。
【0019】
DBサーバ装置120は、比較的単純なAPIを提供する。本実施形態において「単純なAPI」とは、具体的には例えば、1つのデータグループに対して更新、保存、または取得のうちの1処理を行うAPIを意味する。なお、本実施形態の変形例として、DBサーバ装置120が提供する「単純なAPI」を必ずしも1処理を行うAPIに限定せず、比較的単純な実装が可能な範囲で、少数の処理を行うAPIを「単純なAPI」として提供するようにしてもよい。
【0020】
HTTPサーバで構成されるDBサーバ装置120は、Webサーバ装置110との間をHTTPプロトコルで通信し、HTTPプロトコル上でJSON等の汎用的なデータフォーマットを利用してデータの送受信を行う。そして、DBサーバ装置120は、Webサーバ装置から受信したリクエストに基づいて、利用するDBMS130に対応するSQL文を生成し、DBMS130に対してデータ処理を要求する。なお、DBサーバ装置120とDBMS130との間は、例えばJDBC(Java(登録商標) DataBase Connectivity)ライブラリ等を利用して接続される。
【0021】
DBMS130は、データベースシステムの運用及び管理を行う。DBMS130は、Webシステム10(DBサーバ装置120)から受信したSQL文に応じて、データベースに記録されているデータを用いたデータ処理を実行し、その処理結果をWebシステム10に返す。本実施形態においてDBMS130はユーザ側が準備することを想定するため、様々なベンダによって提供される一般的なDBMSであると考えてよい。
【0022】
なお、一般にデータベースシステムは、厳密には、データを保存するデータベースとそれを管理するDBMSとに分けられるが、本発明においてデータベースシステムの構成を詳細に区別する意味はあまりない。そのため、本発明の説明では、DBMS130をデータベースシステムと同義に用いることがある。具体的には例えば、「DBMS130に保存されているデータ」や「DBMS130のデータ」は、データベースシステム(データベース)に保存されているデータを意味する。また例えば、「DBMS130に変更を加える」とは、データベースシステム(データベース)に保存されているデータを変更することを意味する。
【0023】
また、
図1においてDBMS130は独立した装置のように示されているが、本実施形態はこれに限定されるものではなく、例えばDBMS130がDBサーバ装置120と同一の装置内に設けられてもよい。
【0024】
本実施形態のWebシステム10は、上記のようにWebサーバ装置110とDBMS130との間にDBサーバ装置120が設けられて構成されることにより、Webサーバ装置110(サーバシステム100)が、DBMS130の構成を考慮することなく、DBMS130に処理を依頼することが可能となる。また、このような構成は、Webサーバ装置がDBMSに直接接続されるWebサーバの構成と比較したとき、異なるDBMSに対応する際にWebサーバ装置側の修正が不要であるという利点がある。
【0025】
次に、本実施形態に係るサーバシステム100の機能的な構成について詳しく説明する。
【0026】
図2は、
図1に示したサーバシステムの機能構成例を示すブロック図である。
図2に示したように、サーバシステム100において、Webサーバ装置110は、リクエスト作成部111を有し、DBサーバ装置120は、リクエスト処理部121、SQL作成部122、及びSQL処理部123を有する。
【0027】
Webサーバ装置110のリクエスト作成部111は、Webクライアント20からの要求に応じて、DBMS130に対する処理要求をDBサーバ装置120にHTTP通信経由で依頼する機能を有する。また、リクエスト作成部111は、DBサーバ装置120から応答として受信したデータの中に含まれる動的パラメータ名を利用して、DBMS130に対する次の処理要求を生成し、DBサーバ装置120に送信する機能を有する。
【0028】
リクエスト作成部111によるDBサーバ装置120に対する依頼(リクエスト)は、HTTPリクエストによって行われる。このHTTPリクエストの中には、データとしてリクエストIDと終了フラグのデータが渡される。このデータはURLの一部として含めてもよいし、HTTP通信において送受信するJSONデータの一部として含めてもよい。
【0029】
リクエストIDは、DBMS130に関する一連の処理を識別するためのIDであり、一連の処理に対して同一のリクエストIDが付与される。言い換えれば、異なるリクエストIDであれば、DBMS130に関して異なる一連の処理であることを意味する。リクエストIDは、後述するSQL処理部123において、複数の処理リクエストを同じグループとして識別するために用いられる。
【0030】
終了フラグは、例えば「true」または「false」のように2つの識別可能な値で構成され、当該HTTPリクエストがDBMS130に関する一連の処理の最後のリクエストであるか否かを示す情報である。具体的には、同一のリクエストIDを有する複数のHTTPリクエスト(すなわち、一連の処理を示す複数のHTTPリクエスト)において、終了フラグが「false」であれば、当該HTTPリクエストは一連の処理の最後のリクエストではないことを意味し、終了フラグが「true」であれば、当該HTTPリクエストは一連の処理の最後のリクエストであることを意味する。この終了フラグも、後述するSQL処理部123による処理で用いられる。
【0031】
DBサーバ装置120のリクエスト処理部121は、DBサーバ装置120が提供するAPIを介してDBMS130に対する複数の処理要求(リクエスト)をWebサーバ装置110から受け取り、各リクエストに含まれるリクエストデータを解析し、処理を対応するSQL作成部122に振り分ける(割り当てる)機能を有する。より詳しくは、リクエスト処理部121は、Webサーバ装置110のリクエスト作成部111からHTTPリクエストを受信する。HTTPリクエストの主なメソッドとして、GET、PUT、POST、DELETEがあり、リクエスト処理部121は、HTTPメソッド及びURLに基づいて、対応するSQL作成部122にHTTPリクエストの処理を割り当てる。
【0032】
なお、リクエスト処理部121による上記の処理、すなわち、HTTPメソッド及びURLに応じて処理を振り分ける処理は、一般的なWebサーバで一般的に用いられる処理であるため、詳細な説明を省略する。
【0033】
DBサーバ装置120のSQL作成部122は、リクエスト処理部121によって割り当てられたHTTPリクエストに対応するSQL文を生成し、生成したSQL文をSQL処理部123に送る機能を有する。また、SQL作成部122は、SQL処理部123で処理した結果を含む応答(HTTPレスポンス)をWebサーバ装置110のリクエスト作成部111に返信する機能を有する。HTTPレスポンスを受信したリクエスト作成部111は、受信したデータを加工処理したうえで、Webクライアント20に応答を返す。なお、上記のWebクライアント20に応答を返す処理は、さらにリクエスト処理部121を介して行ってもよいし、またはSQL処理部123が単独で行うようにしてもよい。
【0034】
SQL作成部122による上記処理は、各HTTPリクエストに対応するSQL文を単純に生成する処理であり、これは一般的なWebサーバで一般的に用いられる処理であるため、詳細な説明を省略する。但し、SQL作成部122の処理に関して以下の点を補足する。HTTPリクエストに対応するSQL文の生成においてHTTPリクエストに含まれる値(数字や文字列等の固定値)によりSQL文の条件節(WHERE節)等の値を可変にする場合、これらの値(固定パラメータ)をWebサーバ装置110がHTTPリクエストに含めることがある。この固定パラメータに関して、本実施形態ではSQL作成部122は処理を行わずにSQL処理部123に渡し、SQL処理部123が固定パラメータを処理するものとする。このような処理も一般的に用いられている処理であるため、さらに詳細な説明は省略する。以降の説明では、特に断りのない限り、動的パラメータ及び固定パラメータを区別する必要がない場合に、単にパラメータと記述する。
【0035】
DBサーバ装置120のSQL処理部123は、大別して以下の第1~第3のSQL処理機能を有する。第1のSQL処理機能は、Webクライアント20からの要求に対応してDBサーバ装置120の内部(SQL作成部122)で生成された複数のSQL文を連結したり編集したりしたうえで、DBMS130に送信する機能である。第2のSQL処理機能は、DBMS130からのデータ取得要求に対して、数字や文字列の固定値とは別に動的パラメータ名を定義してWebサーバ装置110に返す機能である。第3のSQL処理機能は、Webクライアント20からの要求に対応してSQL作成部122で生成されたSQL文に含まれる動的パラメータ名と、Webサーバ装置110のリクエスト作成部111からAPIを介して受信したDBMS130への処理要求に含まれる動的パラメータ名とを対応付けてSQL文を編集する機能である。
【0036】
これら第1~第3のSQL処理機能を有するSQL処理部123によって実行されるSQL処理について、以下に詳しく説明していく。
【0037】
図3は、SQL処理の処理手順例を示すフローチャートである。SQL処理部123は、HTTPリクエスト及び当該HTTPリクエストに関してSQL作成部122で生成されたSQL文を受信するごとに、
図3に示すSQL処理を実行する。
【0038】
図3によればまず、SQL処理部123は、受信したHTTPリクエストに含まれるリクエストIDを確認することによって、当該HTTPリクエストに関して生成されたSQL文が属する一連の処理のグループを識別する(ステップS11)。前述したようにリクエストIDはDBMS130に対する一連の処理に対して同一値が設定されるため、SQL処理部123は、リクエストIDに基づいてグループを識別することで、以前に受信したHTTPリクエストによって生成済みのSQL文が今回の一連の処理に用いられるものであるか否かを判断することができる。
【0039】
次に、SQL処理部123は、受信したHTTPリクエストに含まれる終了フラグを確認する(ステップS12)。ステップS12において終了フラグが「true」ではない、すなわち「false」であった場合は(ステップS12のNO)、一連の処理が当該HTTPリクエストで終了しないことを意味し、この場合はステップS13に移行する。一方、ステップS12において終了フラグが「true」であった場合は(ステップS12のYES)、一連の処理が当該HTTPリクエストで終了することを意味し、この場合は後述するステップS16に移行する。
【0040】
ステップS13では、SQL処理部123は、当該HTTPリクエストに関してSQL作成部122で生成されたSQL文を、当該HTTPリクエストに含まれているリクエストID及びパラメータ情報とともに(リクエストIDに関連付けて)、SQL処理部123の内部バッファに保存する。
【0041】
ステップS13の処理に次いで、SQL処理部123は、当該HTTPリクエストに関して生成されたSQL文に対して、当該HTTPリクエストに含まれている固定パラメータ値を適用した上で、適用後のSQL文をDBMS130に送る処理を実行してもよい(ステップS14)。ステップS14の処理は、DBMS130からの取得処理に限定される。言い換えれば、DBMS130に対して変更を加えない処理に限定して、SQL処理部123は、ステップS14の処理を実行してもよい。ステップS14の処理の実行可否は、実装するSQL処理部123側が毎回判断するようにしてもよいし、あるいは、ステップS14の処理を実行するか否かを判断するためのフラグをHTTPリクエストに別途追加し、SQL処理部123がこのフラグに基づいて判断するようにしてもよい。何れにしても、ステップS14の処理を実行した場合には、SQL処理部123は、DBMS130に対して変更を加えることなく、DBMS130に保存されているデータを参考として取得することができる。
【0042】
そして、ステップS13またはS14の処理後、SQL処理部123は、当該HTTPリクエストに対する応答データを生成し、生成した応答データを含むHTTPレスポンスをWebサーバ装置110に送信し(ステップS15)、SQL処理を終了する。
【0043】
ここで、ステップS15で返すHTTPレスポンスについて具体的に説明する。例えばPUT、POST、またはDELETEメソッドのHTTPリクエストに対しては、SQL処理部123は、単にそのHTTPリクエストを受け付けたことを示す「HTTP 200」の応答を返すとしてもよいし、応答データとしてJSONデータを付加することによって、HTTPリクエストを正しく受け付けたことを示す応答を返すとしてもよい。但し、一般的なWebシステムにおけるHTTP通信では、上記の応答を返すことによってHTTPリクエストに含まれる処理がDBMS130に対して完了することを意味するが、本実施形態のWebシステム10の場合は、上記の応答を返したステップS15の段階では、DBMS130に対して何ら変更は加えられていない点で異なる。
【0044】
一方、GETメソッドのHTTPリクエストに対しては、SQL処理部123は、当該HTTPリクエストで取得する各データに対応する動的パラメータ名を含む形式で、Webサーバ装置110にHTTPレスポンスを返す。後述する
図4には、このようなHTTPレスポンスに含まれる応答データの具体例として、JSONデータが示されている。SQL処理部123は、生成したJSONデータを含むHTTPレスポンスをWebサーバ装置110に送信して、SQL処理を終了する。
【0045】
図4は、応答データとして生成されるJSONデータの具体例を説明するための図である。
図4に示したSQL文210は、GETメソッドのHTTPリクエストを受けて、SQL作成部122が生成するSQL文の一例である。そしてJSONデータ220は、
図3のステップS15において、SQL文210を基に、SQL処理部123が生成するJSONデータの一例である。
【0046】
JSONデータ220について詳しく説明する。
図4に示したように、JSONデータ220は、「data」ブロックと「param」ブロックの2つのブロックに大別できる。
【0047】
このうち、dataブロックは、文字列または数字の固有値が記述されている。このようなdataブロックは、当該HTTPリクエストが単独でDBMS130によって処理される場合に、DBサーバ装置120からWebサーバ装置110に返すデータである。つまり、当該HTTPリクエストの終了フラグが「true」に設定された単独リクエストの場合には、HTTPレスポンスに含める応答データとして当該dataブロック(具体的には、「A」や「1」等)が含まれる。
【0048】
一方、paramブロックは、dataブロックの各データ項目に対応する動的パラメータ名が記述されている。具体的には、SQL文210のSELECT文のなかに含まれるカラム名(「A」,「B」等)か、SELECT文のなかでASで指定されたカラムの別名(「API_A_PARAM_A」等)が記述されている。そして、GETメソッドのHTTPリクエストに対するHTTPレスポンスの場合、応答データとして生成されるJSONデータには、上記のような動的パラメータ名を記述したparamブロックが必ず含まれる。さらに、SQL処理部123によってステップS14の処理が行われた場合に限り、生成されるJSONデータにdataブロックも含まれる。なお、
図4に示したJSONデータ220のdataブロックやparamブロックは例示に過ぎず、本実施形態による実際のフォーマットは、これに限定されるものではない。
【0049】
図3のSQL処理の説明に戻る。前述したように、ステップS12において終了フラグが「true」であった場合には(ステップS12のYES)、一連の処理が当該HTTPリクエストで終了することを意味し、ステップS16~S19の処理が実行される。
【0050】
このときまず、ステップS16において、SQL処理部123は、内部バッファから、以前のSQL処理で実行されたステップS13の処理で内部バッファに一時保存したSQL文のうち、当該HTTPリクエストと同じリクエストIDが付与されたHTTPリクエストに含まれるSQL文やパラメータを全て取得する。
【0051】
次に、SQL処理部123は、ステップS16で取得した複数のSQL文を、変数名やロック関係の処理に着目して結合する(ステップS17)。ステップS17の処理はSQL統合処理と称し、その詳細な処理手順は
図5を参照しながら後述する。
【0052】
さらに、SQL処理部123は、ステップS17のSQL統合処理で結合したSQL文をDBMS130に送信してデータ処理を依頼する(ステップS18)。そしてSQL処理部123は、DBMS130からのデータ処理の応答に基づいて、応答データであるJSONデータを生成し、生成した応答データを含むHTTPレスポンスをWebサーバ装置110に送信し(ステップS19)、SQL処理を終了する。
【0053】
なお、前述したステップS15の場合と異なり、ステップS19の段階では、当該HTTPリクエストのリクエストIDが示す一連の処理についてのSQL処理が完了するため、ステップS19においてWebサーバ装置110に返す応答データは、一般的なWebシステムにおける一連の処理の応答データと同様である。
【0054】
図5は、SQL統合処理の処理手順例を示すフローチャートである。
図5に示したSQL統合処理は、
図3のステップS17の処理に相当し、SQL処理部123によって実行される。
【0055】
図5によればまず、SQL処理部123は、
図3のステップS16で取得した複数のSQL文に対して、HTTPリクエストに含まれるパラメータを代入した後、これらを時系列順に単純に連結する(ステップS21)。以降、ステップS21で連結したSQL文をSQL全体文と称する。
【0056】
次に、SQL処理部123は、ステップS21で連結したSQL全体文のなかに、特定の処理(例えば、ロック処理やコミット処理)が存在するか否かを確認し(ステップS22)、上記特定の処理が存在する場合には(ステップS22のYES)、ステップS23に移行し、上記特定の処理が存在しない場合には(ステップS22のNO)、ステップS23をスキップしてステップS24に移行する。
【0057】
ステップS23では、SQL処理部123は、SQL全体文に含まれる上記特定の処理に関するSQL文の順序を入れ替えて整列する。具体的には、SQL処理部123は、ロック処理に関する処理の文をSQL全体文の最初に移動し、コミット処理の文をSQL全体文の最後に移動する。ステップS23で整列されることにより、SQL全体文は、一連の処理全体に跨ってロック及びコミット処理を行うSQL文となる。
【0058】
ステップS23の処理後またはステップS22でNOと判定された場合、SQL処理部123は、HTTPリクエストに動的パラメータ名が含まれているか否かを確認する(ステップS24)。ステップS24において動的パラメータ名が含まれていない場合には(ステップS24のNO)、SQL処理部123はSQL統合処理を終了する。なお、HTTPリクエストに含まれるパラメータが固定パラメータであれば、SQL処理部123はそのパラメータをSQL全体文に適用する。
【0059】
一方、ステップS24においてHTTPリクエストに動的パラメータ名が含まれる場合には(ステップS24のYES)、SQL処理部123は、当該動的パラメータのデータ取得に関するSELECT関連のSQL文をSQL全体文から探し、該当するSQL文を上記動的パラメータ名が用いられている箇所に組み込む(ステップS25)。なお、SQL文のなかには、複数の値を取得するSELECT文が存在することがあるが、このような場合、SQL処理部123は、当該動的パラメータ名の値に限定して取得するように、SELECT文を修正する。ステップS25の処理後、SQL処理部123はSQL統合処理を終了する。
【0060】
以上に説明したように、本実施形態に係るサーバシステム100を含むWebシステム10では、Webクライアント20からの要求に応じて、Webサーバ装置110が、DBサーバ装置120が提供する単純なAPIを利用して、DBMS130に対する一連の処理のリクエストを複数の処理リクエストに分割してDBサーバ装置120に依頼することができる。そして、DBサーバ装置120が、分割して渡された複数の処理リクエストに基づいて生成したSQL文を統合してからDBMS130にデータ処理を依頼することによって、一連の処理のリクエストが処理全体に跨ってロック処理やコミット処理を実行するものであっても、適切に対応したデータ処理をDBMS130に依頼することができる。
【0061】
図6には、Webシステム10における一連の処理の流れがシーケンス図に示されている。繰り返しになるため、
図6の個々の処理について詳述することは省略し、DBサーバ装置120による処理の対応だけ示す。
図6において、Webサーバ装置110からステップS31のHTTPリクエスト(API_Aリクエスト、終了フラグはfalse)を受けてDBサーバ装置120が実行する処理(ステップS32~S33)は、
図3のSQL処理のステップS11~S15の処理に相当する。また、
図6において、Webサーバ装置110からステップS34のHTTPリクエスト(API_Bリクエスト、終了フラグはtrue)を受けてDBサーバ装置120が実行する処理(ステップS35~S36)は、
図3のSQL処理のステップS11~S12,S16~S19の処理に相当する。
図6に示す処理が行われる。ここで特に、ステップS35では、SQL結合処理が行われた後のSQL全体文を用いてDBMS130への処理依頼が行われることによって、複数のHTTPリクエストに基づく複数の処理(API_A及びAPIB)を、一連の処理を跨いで実行することができる。
【0062】
上述した本実施形態に係るサーバシステム100を含んで構成されるWebシステム10は、開発したプラットフォームを用いて異なる案件に適用する際にWebサーバ装置110の修正量が大きいシステム、かつDBサーバ装置120の主目的がデータ保存であるシステムに対して特に有効である。この特に有効なシステムの具体例として、KPI(Key Performance Indicator)計算システムやシミュレーションシステムが挙げられる。これらのシステムでは、主に複雑な計算を伴うため、DBサーバ装置120よりもWebサーバ装置110側で計算を行うことが一般的である。また、これらのシステムでは一般的に、DBサーバ装置120よりもWebサーバ装置110の方が実装規模が大きくなること、及び、DBサーバ装置120側に求められる機能が比較的単純なものになる傾向がある。
【0063】
以下では、このようなシステムにおける用途を例として、
図7~
図9の具体例を参照しながら、本実施形態のWebシステム10による実施例を説明する。
【0064】
図7は、DBMSに含まれるテーブルの一例を示す図である。
図7に例示したテーブル230において、行231には各カラムの名称が記載され、行232以降の各行には、テーブル230の各カラムに対応する値が設定されている。本実施例では、「一連の処理」の一例として、テーブル230の行232の値を別の行にコピーし、さらに一部のカラムの値を変更するケースについて、具体的な処理手順を説明する。
【0065】
図8は、APIに関するSQL文とJSONデータの具体例を示す図である。
図8には、DBサーバ装置120に対するHTTPリクエストに伴って生成されるSQL文240,260と、これらのHTTPリクエストに伴う入力または出力のJSONデータ250,270が示されている。詳細は後述するが、SQL文240は、GETメソッドのHTTPリクエストに応じて生成されるSQL文の具体例であり、SQL文260は、PUTメソッドのHTTPリクエストに応じて生成されるSQL文の具体例である。
【0066】
本実施例における「一連の処理」に応じたDBMS130に対する処理は、テーブル230の行232の値を取得する処理と、テーブル230の特定の行の値を更新する処理と、に分割することができ、それぞれGETメソッドとPUTメソッドのHTTPリクエストという形で定義することができる。
【0067】
そこでまず、Webサーバ装置110のリクエスト作成部111は、リクエストIDを100とし、終了フラグをfalseとしたGETメソッドであるHTTPリクエストを、DBサーバ装置120に送信する。このとき、上記HTTPリクエストにテーブル230の行232を識別するために、「ColumnA」の「1」の値も、固定パラメータとしてDBサーバ装置120に送信される。なお、Webサーバ装置110側は、一連の処理内容を把握しているため、リクエストIDや終了フラグを適切に設定することが可能である。
【0068】
次に、DBサーバ装置120では、リクエスト作成部111からのHTTPリクエストを受けて、リクエスト処理部121による処理の振り分けと、SQL作成部122によるSQL文(
図8のSQL文240)の生成が行われるが、これらは一般的な処理を流用可能であるため、詳細な説明を省略する。
【0069】
次に、SQL処理部123は、SQL文240に対して、
図3に示したSQL処理を実行する。まずSQL処理部123は、ステップS11で、SQL文240がリクエストIDが100のSQL文であることを把握し、ステップS12で、終了フラグがfalseである(trueではない)ことを確認する。終了フラグがfalseであるため、SQL処理部123は、ステップS13で、SQL文240とリクエストIDとパラメータを内部バッファに保存する。
【0070】
さらに、SQL処理部123は、ステップS14で、SQL文240の「@VALUE」の箇所に、HTTPリクエストで渡された固定パラメータを設定し、DBMS130に処理を依頼する。GETメソッドにより生成されたSQL文240は、
図3で前述したステップS14の実行に関する条件「DBMS130からの取得処理に限定される」を満たすためである。
【0071】
その後、SQL処理部123は、ステップS15の処理として、DBMS130からの応答とSQL文240とに基づいて、JSONデータ250を生成する。
図8に示すように、JSONデータ250は、dataブロックとparamブロックを含む形式となっているが、dataブロックが含まれるのは、ステップS14の処理が行われたためである。一方、paramブロックには、SQL文240において各カラム名(「ColumnA」や「ColumnB」等)に対して「AS」を用いて示された、各カラム名の別名(「GETAPI_COLA」や「GETAPI_COLB」等)が、動的パラメータ名として記載されている。そして、SQL処理部123は、このJSONデータ250を、HTTPレスポンスとしてWebサーバ装置110(リクエスト作成部111)に返す。この応答は、GETメソッドのHTTPレスポンスであるが、この段階では、DBMS130に対して変更は加えられていない。
【0072】
次に、Webサーバ装置110のリクエスト作成部111は、GETメソッドのHTTPレスポンスを受けて、リクエストIDを同じく100とし、終了フラグをtrueとしたPUTメソッドであるHTTPリクエストを、DBサーバ装置120に送信する。このとき、リクエスト作成部111は、先のGETメソッドのHTTPレスポンスに基づいて、JSONデータ270を生成し、これをHTTPリクエストに含めてDBサーバ装置120に送信する。ここで動的パラメータ名として指定するパラメータについては、動的パラメータ名であることを明記するために「param()」を付与する。なお、本発明の派生例として、このとき単に動的パラメータを生成するのみならず、例えばMAX()関数等を動的パラメータを引数として指定する方式でJSONデータ270を生成し、後述するSELECT文のなかでMAX()関数を使うことで、その最大値を指定するような方法を採用してもよいし、動的パラメータを含む四則演算の数式として表現する方法を採用してもよい。
【0073】
次に、DBサーバ装置120では、リクエスト作成部111からのHTTPリクエストを受けて、リクエスト処理部121によって処理が振り分けられ、SQL作成部122によってSQL文260が生成されてSQL処理部123に渡される。ここで、
図8に示すSQL文260の「@VALUE_B」、「@VALUE_X」、「@VALUE_A」は、JSONデータ270に含まれる、対応するアルファベット(B,X,A)のパラメータを設定することを意味する。
【0074】
次に、SQL処理部123は、SQL文260に対して、
図3に示したSQL処理を実行する。具体的には、SQL処理部123は、ステップS11で、SQL文260が「100」のリクエストIDに紐付いたSQL文であることを把握し、ステップS12で、終了フラグがtrueであることを確認する。終了フラグがtrueであるため、SQL処理部123は、ステップS16で、同じリクエストID「100」をキーとして、SQL文240及びそれに関連するパラメータを内部バッファから取得する。そして、ステップS17で、SQL処理部123は、SQL文240とSQL260とを統合する。このSQL統合処理の具体的手順は、
図9を参照しながら後述する。
【0075】
さらに、SQL処理部123は、ステップS18において、ステップS17で統合したSQL文をDBMS130に送信してデータ処理を依頼する。そしてステップS19では、DBMS130からの応答を基に、SQL処理部123はHTTPレスポンスを作成してWebサーバ装置110(リクエスト作成部111)に返す。この応答は、リクエストID「100」を付与した一連の処理のリクエストに対するHTTPレスポンスであり、一連の処理のリクエストに応じてDBMS130のデータは変更されている。但し、上記応答に、PUTメソッドのHTTPレスポンスという意味を別途持たせてもよい。
【0076】
図9は、SQL統合処理の具体例を説明するための図である。
図9には、
図8に示したSQL文240及びSQL260に対してSQL処理部123がSQL統合処理(
図5参照)を実行したときの、統合途中のSQL文280と、統合後のSQL文290とが示されている。
【0077】
SQL統合処理においてまず、SQL処理部123は、ステップS21で、SQL文240及びSQL文260に対して、HTTPリクエストに含まれるパラメータを代入し、さらに時系列に基づいて単純連結する。なお、ここで動的パラメータ名として指定されているパラメータについては、動的パラメータ名であることを明記するために「param()」を付与する。以上の処理の結果、SQL文280が生成される。
【0078】
具体的には
図9を参照すると、SQL文280の前半部281には、GETメソッドによって生成されたSQL文240をベースとするSQL文が記載されており、「@VALUE」のパラメータには、「ColumnA」の固定パラメータとして送信された「1」が代入されている。また、後半部282には、PUTメソッドによって生成されたSQL文260をベースとするSQL文が記載されている。さらに、後半部282においては、「@VALUE_A」のパラメータには、JSONデータ270を参照して「2」の固定パラメータが代入される一方、「@VALUE_B」や「@VALUE_X」等のパラメータには、JSONデータ270を参照して、動的パラメータ名を用いた「param(GETAPI_COLB)」や「param(GETAPI_COLX)」が付与されていることが分かる。
【0079】
次に、SQL処理部123は、SQL文280に対して、ステップS22~S25の処理を実行する。具体的には、SQL文280に存在する「SELECT *」で始まる文は、ロック取得のための文であるから、SQL文280の最初に移動させる。また、「COMMIT」文は、既にSQL文280の最後のみに存在するため、移動させずにこの位置を維持する。さらに、SQL処理部123は、SQL文280の後半部282に含まれる「param()」中の動的パラメータについて、動的パラメータを取得するSQL文をSQL文280から探し、当該SQLについて上記動的パラメータのみを取得するように、すなわち、他のパラメータを取得しないように、SQL文を編集してparam()の箇所を置き換える。以上の処理の結果、SQL文290が生成される。
【0080】
そして、SQL処理部123は、
図5のステップS18で説明したように、統合後のSQL文290をDBMS130に送信してデータ処理を依頼することにより、複数のAPIに跨って、適切にロック及びコミット処理を実行させることができる。
【0081】
なお、上記の実施例では、単一のテーブル230を例にとって説明したが、本実施形態は複数のテーブルに対する処理を含む場合でも同様に実現可能である。例えば、複数のテーブルに対して値の取得や更新を行う場合、各テーブルに対してGETメソッド及びPUT、若しくはPOSTメソッドをそれぞれ準備し、上記説明と同様に処理を実行することにより、複数のテーブルに対しても、正常にロック及びコミットの処理を実行することができる。
【0082】
また、上記の実施例において、特定のテーブル(例えばテーブルA)の値のみを取得して、別のテーブル(例えばテーブルB)に値をコピーする場合には、テーブルAに対するロックが働かない。これに対してテーブルAに対するロックを確保したい場合には、GETメソッドにおいて、値の取得元のテーブルAのロックを取得しないバージョンのAPIとは別に、値の取得元のテーブルAに対してロックを取得するバージョンのAPIを準備すればよい。このような複数のバージョンのAPIを提供することで、テーブルAに対するロックを働かせることも可能であることは、これまでの説明から容易に想像できる。
【0083】
以上に説明したように、本実施形態に係るサーバシステム100によれば、DBサーバ装置120が単純なAPIを提供し、Webサーバ装置110がリクエストID及び終了フラグを用いて、上記単純なAPIを組み合わせて利用することで、DBサーバ装置120側の処理を制御し、DBサーバ装置120を介して、DBMS130に対して希望する処理を依頼することができる。
【0084】
すなわち、本実施形態に係るDBサーバ装置120は、Webサーバ装置110に提供する機能を単純化しながらも、Webサーバ装置110からDBMS130に対する比較的複雑な処理(具体的には一連の処理に跨ったロックやコミット等の処理)の依頼に対応することができ、一連の処理の実行時にDBMS130(データベース)のロック時間を過剰に長期化することなく、必要最低限な時間に抑制することができる。
【0085】
さらに、本実施形態に係るDBサーバ装置120は、比較的単純な機能の実装で済む(複雑なAPIを提供可能な機能を実装しなくてよい)ことから、従来のWebシステムに用いられるDBサーバ装置と比べて、DBサーバ装置120の実装規模を小さく抑えることができる。
【0086】
さらに、このようなDBサーバ装置120によれば、実装する機能を単純化できることで、Webシステム10を異なる案件に適用する場合に、DBサーバ装置120における実装の修正対象を最小化することに期待でき、主にWebサーバ装置110側の修正によってWebシステム10の異なる案件への適用を実現することができる。
【0087】
言い換えれば、本実施形態に係るDBサーバ装置120によれば、Webシステム10(あるいはサーバシステム100)におけるDBサーバ装置120側の負荷を下げることができ、Webシステム10による様々なDBMS130への対応や、異なる案件への適用に際して、主にWebサーバ装置110側で修正を行うことによって対応することが可能となる。
【0088】
一方、本実施形態に係るサーバシステム100では、Webサーバ装置110は、複数のAPIが含まれる1つのHTTPリクエストによってDBMSに対する一連の処理を依頼していた従来のWebサーバ装置とは異なり、DBサーバ装置120から提供される単純なAPIを組み合わせて、DBMS130に対する一連の処理をDBサーバ装置120に依頼できることから、Webシステム10を異なる案件に適用する場合にWebサーバ装置110側で必要となる修正は、上記の従来のWebサーバ装置に比べて、修正規模を小さくしたり、修正難易度を低くしたりすることに期待できる。すなわち、サーバシステム100(あるいはWebシステム10)全体における修正規模や修正難易度を抑える効果が得られる。
【0089】
また、本実施形態に係るサーバシステム100では、Webサーバ装置110が、DBMS130に対する詳細処理を制御可能であることから、Webサーバ装置110とDBサーバ装置120との間の処理の仕様の擦り合わせを小さく抑えることができる。
【0090】
なお、本発明は上記した実施形態及び実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施形態及び実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。例えば、上記実施形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【0091】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。
【0092】
また、図面において制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実施には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【0093】
10 Webシステム
20 Webクライアント
100 サーバシステム
110 Webサーバ装置
111 リクエスト作成部
120 データベース(DB)サーバ装置
121 リクエスト処理部
122 SQL作成部
123 SQL処理部
130 データベース管理システム(DBMS)
210,240,260,280,290 SQL文
220,250,270 JSONデータ
230 テーブル