特許第6211949号(P6211949)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社東芝の特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6211949
(24)【登録日】2017年9月22日
(45)【発行日】2017年10月11日
(54)【発明の名称】データベース装置
(51)【国際特許分類】
   G06F 12/00 20060101AFI20171002BHJP
【FI】
   G06F12/00 513D
【請求項の数】1
【全頁数】32
(21)【出願番号】特願2014-24518(P2014-24518)
(22)【出願日】2014年2月12日
(65)【公開番号】特開2015-153014(P2015-153014A)
(43)【公開日】2015年8月24日
【審査請求日】2016年9月21日
(73)【特許権者】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(74)【代理人】
【識別番号】110001612
【氏名又は名称】きさらぎ国際特許業務法人
(72)【発明者】
【氏名】高橋 健治
(72)【発明者】
【氏名】金松 基孝
【審査官】 福田 正悟
(56)【参考文献】
【文献】 特開2011−165148(JP,A)
【文献】 嶋村 誠 他,Key-Value Store型DBMSにおけるSQLアクセス機能の実装と評価,FIT2012 第11回情報科学技術フォーラム 講演論文集 第2分冊,2012年 8月21日,pp.109-114
【文献】 祐成 光樹 他,データ管理/処理基盤,NEC技報 第65巻 第2号,日本電気株式会社,2012年 9月 1日,pp.30-33
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/00
(57)【特許請求の範囲】
【請求項1】
索引データと実データとをペアで保存するデータベース方式でデータを記憶する記憶手段と、
索引データと実データとをペアで保存するデータベース方式のためのデータベース言語である第1のデータベース言語で記述された第1のコマンドを受け取ると、当該第1のコマンドに応じて前記記憶手段に記憶されたデータを操作するデータ処理手段と、
前記第1のデータベース言語とは別のデータベース言語である第2のデータベース言語で記述された第2のコマンドを受け取ると、この第2のコマンドをシリアライズさせて、索引データと実データとからなるデータを生成させ、このデータを前記データ処理手段に渡す第2コマンド実行手段と、
前記第1のデータベース言語で記述された第1のコマンドを受け取ると、前記第1のコマンドをシリアライズさせて、索引データと実データとからなるデータを生成させ、このデータを前記データ処理手段に送信させる第1コマンド処理手段と、
前記第1のデータベース言語で記述された第1のコマンドをアプリケーションから受け取った場合、この第1のコマンドを前記第1コマンド処理手段に渡し、前記第2のデータベース言語で記述された第2のコマンドを受け取ると、当該第2のコマンドを前記第2コマンド実行手段に送信させるインタフェース手段と、
前記インタフェース手段から第2のコマンドを受け取ると、当該第2のコマンドが前記第1コマンド処理手段により処理可能か否かを判定し、処理可能と判定した場合、当該第2のコマンドを前記第1コマンド処理手段に渡す判定手段と
を有するデータベース装置。
【発明の詳細な説明】
【技術分野】
【0001】
本明細書に記載の実施の形態は、データベース装置に関する。
【背景技術】
【0002】
インターネットの普及や、コンピュータの処理速度の向上などに伴い生成される、大容量のデジタルデータであるビッグデータが注目されている。ビッグデータは、単に大容量であるだけでなく、非定型でかつリアルタイム性が高い。従来のデータベース管理システムでは、データを定型化して蓄積し、その後で処理分析するため、相反する性質を持つビッグデータを扱うことは困難とされていた。しかし、近年、ビッグデータを高速かつ簡単に分析できる技術が登場し、ビッグデータを活用すれば、これまで予想できなかった新たなパターンやルールを発見できることが明らかとなった。そこで、ビッグデータなどの大規模データ処理を高速に行いたいという技術的要請が高まっている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2011−165148号公報
【特許文献2】特開2011−2905号公報
【特許文献3】特開2005−157718号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
大規模データ処理を高速に行う技術の一つとしてRDBMS(Relational DataBase Management System)があるが、RDBMSは内部処理が複雑なため、処理を高速に行うことができないという問題がある。
【0005】
SQLでのデータ取得や操作は、通常、RDBMSであるため高速に実行できない。一方、KVS (Key Value Store)型データベースでは処理を高速に行うことができるが、通常はSQLを解釈できないため、既存のSQLアプリケーションから使用することができないという問題がある。
【0006】
KVS型データベースで複数valueを持たせる場合、アプリケーション側でvalueのシリアライズを行うことになるが、アプリケーションでシリアライズを行う場合、アプリケーションとデータベースでそれぞれテーブル構造を持つことになるため、テーブル構造を変更することが難しいという問題がある。
【0007】
本発明の目的は、データ処理を高速で実行することを可能にしつつ、アプリケーションでシリアライズを行う場合であっても、テーブル構造を変更することが容易である、大規模データ処理の技術を提供することにある。
【課題を解決するための手段】
【0008】
本発明の実施の形態はデータベース装置として提案される。このデータベース装置は、記憶手段と、データ処理手段と、第2コマンド実行手段と、第1コマンド処理手段と、インタフェース手段とを有する。
記憶手段は、索引データと実データとをペアで保存するデータベース方式でデータを記憶する。
【0009】
データ処理手段は、索引データと実データとをペアで保存するデータベース方式のためのデータベース言語である第1のデータベース言語で記述された第1のコマンドを受け取ると、当該第1のコマンドに応じて記憶手段に記憶されたデータを操作する。
【0010】
第2コマンド実行手段は、第1のデータベース言語とは別のデータベース言語である第2のデータベース言語で記述された第2のコマンドを受け取ると、この第2のコマンドをシリアライズさせて、索引データと実データとからなるデータを生成させ、このデータをデータ処理手段に渡す。
【0011】
第1コマンド処理手段は、第1のデータベース言語で記述された第1のコマンドを受け取ると、第1のコマンドをシリアライズさせて、索引データと実データとからなるデータを生成させ、このデータをデータ処理手段に送信させる。
【0012】
インタフェース手段は、第1のデータベース言語で記述された第1のコマンドをアプリケーションから受け取った場合、この第1のコマンドを第1コマンド処理手段に渡し、第2のデータベース言語で記述された第2のコマンドを受け取ると、当該第2のコマンドを第2コマンド実行手段に送信させる。
【図面の簡単な説明】
【0013】
図1】第1の実施の形態にかかるデータベース装置を含む情報処理システムの構成例を示す機能ブロック図
図2】データベース装置の構成例を示す機能ブロック図
図3】テーブル作成処理の一例を示すフローチャート
図4図3のフローチャートに続くフローチャート
図5図3及び図4のフローチャートに対応する、テーブル作成処理のシーケンス図
図6】テーブル内容等変更通知処理の一例を示すフローチャート
図7図6のフローチャートに対応する、テーブル内容等変更通知処理のシーケンス図
図8】テーブル削除処理の一例を示すフローチャート
図9図8のフローチャートに続くフローチャート
図10図8及び図9に示したフローチャートに対応する、テーブル削除処理のシーケンス図
図11】KVS用APIデータ登録処理の一例を示すフローチャート
図12図11に続くフローチャート
図13図11及び図12に示したフローチャートに対応する、KVS用APIデータ登録処理のシーケンス図
図14】テーブルスキーマ情報取得処理の一例を示すフローチャート
図15図14のフローチャートに対応する、テーブルスキーマ情報取得処理のシーケンス図
図16】SQLデータ登録処理の一例を示すフローチャート
図17図16に続くフローチャート
図18図16及び図17に示したフローチャートに対応する、SQLデータ登録処理のシーケンス図
図19】KVS用APIデータ取得処理の一例を示すフローチャート
図20図19に示したフローチャートに対応する、KVS用APIデータ取得処理のシーケンス図
図21】SQLデータ取得処理の一例を示すフローチャート
図22図21のフローチャートに続くフローチャート
図23図21及び図22のフローチャートに対応する、SQLデータ取得処理のシーケンス図
図24】第2の実施の形態にかかるデータベース装置の構成例を示す機能ブロック図
【発明を実施するための形態】
【0014】
以下、図面を参照して本発明の実施の形態にかかるデータベース装置を説明する。
[0.用語の定義]
本明細書中で使用する用語の定義を述べる。
【0015】
[0.1.データベース言語]
「データベース言語」とは、データベースを扱うためのコンピュータ言語のことをいう。
【0016】
[0.2.SQL]
「SQL」とは、リレーショナルデータベース管理システム (RDBMS) において、データの操作や定義を行うためのデータベース言語(問い合わせ言語)をいう。主にリレーショナルデータベースで使用される。
【0017】
[0.3.KVS(Key Value Store)]
KVS(Key Value Store)とは、Keyとなる索引データと、Valueとなる実データをペアで保存するデータベース方式をいう。Keyによる検索が高速に実行できる。
【0018】
[0.4.テーブルスキーマ情報]
「テーブルスキーマ情報」とは、データベースにおいて、テーブル作成時などに指定した、各フィールド名や属性など、テーブルの構造に関する情報をいう。
【0019】
[0.5.シリアライズ]
「シリアライズ」とは、テキストや数値などの複数データを、一つの文字列に変換する処理をいう。
【0020】
[0.6.デシリアライズ]
「デシリアライズ」とは、シリアライズされたデータを、元の複数データに戻す処理をいう。
【0021】
[1.第1の実施の形態]
本発明の第1の実施の形態は、データベース装置として提案される。このデータベース装置は、SQLと、KVS用APIという複数のデータ操作手段を備え、KVS用APIにより、速度が遅いというSQLの課題を解決し、既存のアプリケーションで使用される場合が多いSQLでも操作できる装置である。KVS用APIは本実施の形態の第1のデータベース言語に相当し、SQLは本実施の形態の第2のデータベース言語に相当する。
【0022】
データベース装置は、コンピュータ、ワークステーション、サーバなどの情報処理装置であって、この情報処理装置は、演算処理装置(CPU)、主メモリ(RAM)、読み出し専用メモリ(ROM)、入出力装置(I/O)、及び必要な場合にはハードディスク装置等の外部記憶装置を具備している装置である。
【0023】
[1.1.構成例]
本発明の実施の形態にかかるデータベース装置の構成について説明する。図1は、本実施の形態にかかるデータベース装置を含む情報処理システムの構成例を示す機能ブロック図である。情報処理システム1は、データベース装置10と、データベース装置10にネットワーク20を介して接続可能な端末装置30とを有する。
【0024】
端末装置30は、パーソナルコンピュータ、タブレットコンピュータ、携帯端末などの情報処理装置であって、データベース装置10と通信可能な装置であればどのようなものでもよい。端末装置30は、データベース装置10に対してデータの検索、データの登録、データの更新などの処理要求をネットワークを介して送信し、この処理要求に応じてデータベース装置10が処理を行った結果を、ネットワークを介して受信する。
【0025】
データベース装置10は、アプリケーションサーバ100と、アプリケーションサーバ100に接続されたデータベースサーバ200を有している。なお、図1に示す構成例では、アプリケーションサーバ100とデータベースサーバ200はネットワーク20ではなく、専用通信線を介して接続されている構成として図示したが、ネットワーク20若しくはネットワーク20とは別のネットワークを介して接続される構成としてもかまわない。
【0026】
図2に、データベース装置10の構成例を示す機能ブロック図を掲げる。なお、機能ブロック図中に示す構成要素は、データベース装置の機能を機能ごとにまとめてブロックとして捉えたものであり、データベース装置が各構成要素に対応する基板、装置、回路、部品などの物理的構成要素を備えていなければならないことを意味するわけではない。また、「接続」とは、データ、情報、命令などの送信及び/又は受信、受け取り、受け渡しなどが可能な状態になっていることをいい、互いに配線で連結されているような物理的な接続に限られる意味ではない。本明細書中の他の構成要素の機能ブロック図の説明についても同様である。
【0027】
本発明の実施の形態にかかるデータベース装置は、アプリケーションサーバ100と、アプリケーションサーバ100に接続されたデータベースサーバ200を有している。アプリケーションサーバ100はネットワーク20に接続されており、ネットワーク20を介して端末装置30と通信可能である。
【0028】
[1.1.1.アプリケーションサーバ]
アプリケーションサーバ100は、データベースサーバ200が提供するデータベースを利用して、サービスを端末装置30に提供する機能を有する。
アプリケーションサーバ100は、アプリケーション部400と、アプリケーション部400に接続されたデータベースクライアント300を有する。
アプリケーション部400は、端末装置30から受信した処理要求に基づいて、KVS用APIを呼び出すか、又はSQL文を生成する。
【0029】
データベースクライアント300は、アプリケーション部400からKVS用APIの呼び出しを受けた場合は、アプリケーション部400から渡されたデータのシリアライズを実行し、シリアライズ後のデータを含むKVS型コマンドを生成してデータベースサーバ200に送信する。また、データベースクライアント300は、アプリケーション部400からSQL文を受信した場合は、そのSQL文が簡単なSQL文か否かを判断し、簡単なSQL文であると判断した場合は、そのSQL文に基づいてKVS型コマンドを生成してデータベースサーバ200に送信し、一方、簡単なSQL文ではないと判断した場合は、そのSQL文をデータベースサーバに送信する。
【0030】
[1.1.1.1.データベースクライアント]
図2を参照しながら、データベースクライアント300の構成例を説明する。データベースクライアント300は、インタフェース部301と、インタフェース部301に接続された処理一次判断部302と、処理一次判断部302に接続されたクライアント側送受信部306及びKVS型コマンド処理部303と、KVS型コマンド処理部303に接続されたクライアント側シリアライズ処理部304及びスキーマ情報キャッシュ305とを有する。なお、インタフェース部301は、アプリケーション部400と接続されており、クライアント側送受信部306は後述するサーバ側送受信部201に接続されている。
【0031】
インタフェース部301は、アプリケーション部400からSQL文若しくはKVS用API呼び出しを受信し、受信した内容がSQL文である場合はそのSQL文を処理一次判断部302に渡し、一方受信した内容がKVS用API呼び出しである場合は、KVS用API呼び出しからKVS型コマンドを生成して、このKVS型コマンドをKVS型コマンド処理部303に渡す。インタフェース部301は、本実施の形態のインタフェース手段に相当する。
【0032】
KVS型コマンド処理部303は、スキーマ情報キャッシュ305からテーブルスキーマ情報を取得し、クライアント側シリアライズ処理部304にテーブルスキーマ情報とKVS型コマンドを渡し、シリアライズされたデータを含むKVS型コマンドを生成させる。KVS型コマンド処理部303は、実施の形態の第1コマンド処理手段に相当する。
【0033】
クライアント側シリアライズ処理部304は、受け取ったKVS型コマンドに含まれる複数の要素(数値、文字列など)を、スキーマ情報キャッシュ305に記憶されたテーブルスキーマ情報を参照して、シリアライズし、シリアライズした後のKVS型コマンドを出力する。
【0034】
処理一次判断部302は、インタフェース部301から受け取ったSQL文が簡単なSQL文か否かを判断し、簡単なSQL文であると判断した場合は、そのSQL文に基づいてKVS型コマンドを生成し、そのKVS型コマンドをKVS型コマンド処理部303に渡し、一方、受け取ったSQL文が簡単なSQL文でないと判断した場合は、そのSQL文をクライアント側送受信部306に渡す。処理一次判断部302は、本実施の形態の判断手段に相当する。
【0035】
ここでいう「簡単なSQL文」とは、基本的には、同等の処理を行うKVS用APIが存在するかどうかという基準で判断する。同等の処理を行うKVS用APIが存在するSQL文は、「簡単なSQL文」である。
なお、簡単なSQL文の例としては、「SELECT * FROM table1」のようなSQL文であり、簡単でないSQL文の例:としては、「SELECT * FROM table1 WHERE value >20;」のようなSQL文である。
クライアント側送受信部306は、後述するサーバ側送受信部201と協働してデータの送受信を行う。
【0036】
[1.1.1.2.データベースサーバ]
データベースサーバ200は、データベースクライアント300の要求に応じて、データベースへのデータの登録、取得、削除、更新、等を実行する。データベースサーバ200は、KVS用API及びSQLの双方を扱える。データベースサーバ200は、SQLのパラメータをシリアライズ、デシリアライズする。データベースサーバ200は、データはシリアライズしてKVS形式でレコード単位で保存する。
【0037】
データベースサーバ200は、サーバ側送受信部201と、サーバ側送受信部201に接続されたSQL字句解釈部202と、SQL字句解釈部202に接続されたSQLコマンド実行部203と、SQLコマンド実行部203に接続されたKVSデータ処理部206、サーバ側シリアライズ処理部204、スキーマ情報管理部205と、KVSデータ処理部206に接続されたキャッシュメモリ207、ストレージ208とを有しているKVSデータ処理部206及びSQLコマンド実行部203はサーバ側送受信部201に接続されている。サーバ側送受信部201は、クライアント側送受信部306に接続されている。
サーバ側送受信部201は前述したクライアント側送受信部306と協働してデータの送受信を行う。
SQL字句解釈部202は、SQL文であるテキストデータを解析して、構文木を出力する。
【0038】
SQLコマンド実行部203は、SQL字句解釈部202より出力された構文木に含まれるSQLコマンドを実行し、実行結果を出力する。このSQLコマンド実行部203がSQLコマンドをKVS型コマンドに変換してKVS型データ処理部に渡す。SQLコマンド実行部203は、本実施の形態の第2コマンド実行手段に相当する。
【0039】
サーバ側シリアライズ処理部204は、SQL文から、Key及びvalueに相当する要素を取り出し、当該SQL文に対応する、シリアライズされたデータであるKVS形式のデータを生成し、出力する。
【0040】
スキーマ情報管理部205は、ストレージ208及びキャッシュメモリ207に記憶されているテーブルの各フィールド名や属性などのテーブルスキーマ情報を記憶し、テーブルの構成が変更された場合は、変更後のテーブルスキーマ情報に更新する。
【0041】
KVSデータ処理部206は、KVS型コマンドに応じてストレージ208又はキャッシュメモリ207にデータの登録、更新、変更、削除を行い、ストレージ208又はキャッシュメモリ207から指定された条件に合うデータを読み出す。KVSデータ処理部206は、本実施の形態のデータ処理手段に相当する。
ストレージ208は、KVS型データからなるテーブルを非揮発的に記憶する。
キャッシュメモリ207はKVS型データからなるテーブルの全部又は一部を一時的に記憶する。
【0042】
[1.2.KVS用APIとSQLそれぞれのデータ登録フローの具体例]
KVS用APIとSQLそれぞれのデータ登録フローの具体例を以下に示す。
[1.2.1.KVS用APIのデータ登録]
アプリケーション部400が以下のメッセージをKVS用APIとしてデータベースクライアント300に渡した例を述べる。
set tbl1 “coffee”, 280, 1126, “drink”
【0043】
上記メッセージを受け取ったデータベースクライアント300、より詳しくはクライアント側シリアライズ処理部304は、データベースサーバ200がKVS形式でこのデータを保存できるように、上記メッセージ中のデータのシリアライズを行う。
データのシリアライズは、所定の書き換え規則を用いて行う。書き換え規則の例を以下に示す。
(1)データが整数である場合、 「i***」(*は数字)と書き変える
(2)データが文字列である場合、「 t文字数-***」(*は文字)と書き換える
なお、データの属性はスキーマ情報キャッシュ305に格納されているテーブルスキーマ情報を参照して決定する。
【0044】
上記「set tbl1 “coffee”, 280, 1126, “drink”」をこの書き換え期し奥によって書き換えてシリアライズしたデータは以下のようになる。
set tbl1 “coffee”, “i280i1126t5-drink”
【0045】
データベースクライアント300は、シリアライズしたデータをデータベースサーバ200に送信し、データベースサーバ200はシリアライズしたデータを記憶する。
【0046】
上記シリアライズされたデータにおいて、"coffee"がKeyであり、“i280i1126t5-drink”がvalueである。データベースサーバ200は、上記のようなKeyとvalueが対となっているレコードの集合であるテーブルを記憶する。
【0047】
テーブルの例を以下に示す。
「Key」 「Value」
coffee i280i1126t5-drink
tea i280i1024t5-drink
pasta i800i0543t4-food
【0048】
[1.2.2.SQLのデータ登録]
上記「set tbl1 “coffee”, 280, 1126, “drink”」と同一の内容をSQLを用いてデータベースサーバ200に登録させる例を示す。
アプリケーション部400は、以下のSQLコマンドをデータベースクライアント300に渡す。
INSERT INTO tbl1 VALUES (‘coffee’, 280, 1126, ‘drink’);
【0049】
上記SQLコマンドを受け取ったデータベースクライアント300は、このSQLコマンドが高速処理可能か否かを判断し、高速処理が不可であると判定した場合、このSQLコマンドをそのままデータベースサーバ200に送信する。
【0050】
上記SQLコマンドを受信したデータベースサーバ200は、SQLコマンドに含まれるデータをシリアライズして、Keyとvalueの対からなるレコードを生成し、このレコードを格納する。データのシリアライズは、所定の書き換え規則を用いて行い、書き換え規則はKVS用APIについて用いる書き換え規則と同一である。
上記SQLコマンドを書き換え規則を用いてシリアライズしたデータは以下のとおりである。
“coffee”, “i280i1126t5-drink”
このデータはKVS用APIの場合に生成されたシリアライズされたデータと同一内容となる。
データベースサーバ200は、上記データを一つのレコードとしてテーブルにつけくわえることにより、データ登録を行う。
【0051】
[2.動作例]
本実施の形態にかかるデータベース装置の動作を説明する。
[2.1.テーブル作成処理]
データベース装置が実行するテーブル作成処理を説明する。テーブル作成処理は、データベースサーバ200に新たにテーブルを作成させ、これを記憶させる処理である。図3は、テーブル作成処理の一例を示すフローチャートであり、図4は、図3のフローチャートに続くフローチャートである。以下、これらフローチャートを参照しながらテーブル作成処理を説明する。
【0052】
テーブル作成処理において、まず、データベース装置10、より詳しくはアプリケーション部400は、データベースクライアント300のインタフェース部にSQLコマンドを入力する(S10)。
【0053】
次にデータベース装置10、より詳しくはインタフェース部301は、受け取ったSQLコマンドを処理一次判断部302に渡し、処理一次判断部302は、このSQLコマンドは高速処理が可能かどうか判断する(S11)。この説明では高速処理が不可であると判断したものとして、以下の説明を行う。なお、前述の「簡単なSQL文」は高速処理可能であると判断し、「簡単なSQL文」でない場合は高速処理可能でないと判断する。
高速処理が不可であると判断した処理一次判断部302は、このSQLコマンドをクライアント側送受信部306に渡す。
【0054】
次にデータベース装置10、より詳しくはデータベースクライアント300のクライアント側送受信部306は、SQLコマンドをデータベースサーバ200のサーバ側送受信部201に送信する(S12)。
【0055】
次に、データベース装置10、より詳しくはデータベースサーバ200のサーバ側送受信部201は、クライアント側送受信部306からSQLコマンドを受信する(S13)。
【0056】
次に、データベース装置10、より詳しくはサーバ側送受信部201はSQL字句解釈部202にSQLコマンドを渡す。SQLコマンドを受け取ったSQL字句解釈部202はこのSQLコマンドを解釈し、解釈結果をSQLコマンド実行部203に渡す(S14)。
【0057】
次にデータベース装置10、より詳しくはSQLコマンド実行部203は、SQLコマンドの解釈結果からテーブルスキーマ情報を生成し、これをスキーマ情報管理部205に渡す(S15)。
【0058】
次にデータベース装置10、より詳しくはSQLコマンド実行部203は、SQLコマンドの解釈結果から、テーブルに登録するデータのKey、valueを取り出し、これらをサーバ側シリアライズ処理部204に渡す。サーバ側シリアライズ処理部204は受け取ったKey、valueをシリアライズ処理し、シリアライズされたデータであるKVSデータを生成してSQLコマンド実行部203に返す(S16)。KVSデータを受け取ったSQLコマンド実行部203はこのKVSデータをKVSデータ処理部206に渡す。
【0059】
データベース装置10、より詳しくはKVSデータ処理部206は、受け取ったKVSデータをキャッシュメモリ207又はストレージ208に記憶させ、データ登録を実行する(S17)。
【0060】
上記データ登録が完了すると、データベース装置10、より詳しくはKVSデータ処理部206は、SQLコマンド実行部203に実行結果を通知する(S18)。
次にデータベース装置10、より詳しくはSQLコマンド実行部203はサーバ側送受信部201に実行結果を通知する(S19)。
次にデータベース装置10、より詳しくはサーバ側送受信部201は、接続中の各データベースクライアント300にテーブル作成を通知する(S20)。
【0061】
また、データベース装置10、より詳しくはサーバ側送受信部201は、SQLコマンド発行元のデータベースクライアント300のクライアント側送受信部306に実行結果を通知する(S21)。クライアント側送受信部306は実行結果を受け取ると、この実行結果をインタフェース部301に通知する。
【0062】
データベース装置10、より詳しくはデータベースクライアント300のインタフェース部301は、アプリケーション部400に実行結果を通知する(S22)。アプリケーション部400は、自らが発行したSQLコマンドに応じてテーブル登録が完了したことを知る。
以上でテーブル登録処理が終了する。
【0063】
図5に、上記図3及び図4のフローチャートに対応する、テーブル作成処理のシーケンス図を示す。
アプリケーション部400がSQLコマンド「CREATE TABLE」を、データベースクライアント300のインタフェース部301に送信する(S101)と、インタフェース部301はこのSQLコマンド「CREATE TABLE」を処理一次判断部302に送信し(S102)、処理一次判断部302はクライアント側送受信部306に送信する(S103)。クライアント側送受信部306はこのSQLコマンド「CREATE TABLE」をデータベースサーバ200のサーバ側送受信部201に送信する(S104)。
【0064】
このSQLコマンド「CREATE TABLE」を受信したデータベースサーバ200のサーバ側送受信部201はSQL字句解釈部202にSQLコマンド「CREATE TABLE」送信する(S105)。
【0065】
SQLコマンド「CREATE TABLE」を受信したSQL字句解釈部202は、SQLコマンド「CREATE TABLE」の字句解釈を実行し(S106)、字句解釈の結果に基づいてテーブル作成実行命令をSQLコマンド実行部203に送信する(S107)。
【0066】
テーブル作成実行命令を受信したSQLコマンド実行部203は、テーブル作成実行命令からテーブルスキーマ情報を生成し、このテーブルスキーマ情報をスキーマ情報管理部205に送信する(S108)。
【0067】
テーブルスキーマ情報を受信したスキーマ情報管理部205は、このテーブルスキーマ情報を記憶し、テーブルスキーマ情報の記憶を行ったことをSQLコマンド実行部203に通知する(S109)。
【0068】
テーブルスキーマ情報の記憶を行った通知を受け取ったSQLコマンド実行部203は、サーバ側シリアライズ処理部204に生成させたシリアライズ化されたデータを登録する要求をKVSデータ処理部206に送信する(S110)。
【0069】
前記要求を受信したKVSデータ処理部206は、シリアライズ化されたデータを格納させる要求を、キャッシュメモリ207又はストレージ208に送信する(S111)。キャッシュメモリ207又はストレージ208は、この要求に応じて、シリアライズ化されたデータを格納する。データの格納を完了したキャッシュメモリ207又はストレージ208は、データの登録が完了した通知をKVSデータ処理部206に送信する(S112)。KVSデータ処理部206はデータの登録が完了した通知をSQLコマンド実行部203に送信する(S113)。
【0070】
このデータの登録が完了した通知はSQL字句解釈部202、サーバ側送受信部201、クライアント側送受信部306、処理一次判断部302、インタフェース部301を順に経由してアプリケーション部400へ送信される(S114〜S119)。
以上で、テーブル作成処理は終了する。
【0071】
[2.2.テーブル内容等変更通知処理]
データベース装置10のテーブル内容等の変更があった場合、データベースサーバ200からデータベースクライアント300へ通知する処理である、テーブル内容等変更通知処理を説明する。図6は、テーブル内容等変更通知処理の一例を示すフローチャートである。また、図7に、上記図6のフローチャートに対応する、テーブル内容等変更通知処理のシーケンス図を示す。以下、図6及び図7を参照しながらテーブル内容等変更通知処理を説明する。
【0072】
テーブル内容の変更が発生すると、テーブル作成等を実行したデータベースサーバ200は、接続中の各データベースクライアント300に変更内容を通知するメッセージを送信する(S30)。
【0073】
データベース装置10、より詳しくはデータベースクライアント300のクライアント側送受信部306は、上記変更内容を通知するメッセージを受信する(S31)。
【0074】
クライアント側送受信部306は、変更内容を通知するメッセージをKVSコマンド処理部303に渡し、KVSコマンド処理部303は変更内容を通知するメッセージを取得する(S32)。
変更内容を通知するメッセージを取得したKVSコマンド処理部303は、変更内容をスキーマ情報キャッシュ305に保存させる(S33)。
【0075】
その後、スキーマ情報キャッシュ305からKVSコマンド処理部303、クライアント側送受信部306を経由してサーバ側送受信部201に実行結果を送信する(S34、S35、S36)。
以上でテーブル内容等変更通知処理が終了する。
【0076】
[2.3.テーブル削除処理]
データベース装置10が実行するテーブル削除処理を説明する。テーブル削除処理は、データベースサーバ200からテーブルを削除させる処理である。図8は、テーブル削除処理の一例を示すフローチャートであり、図9図8のフローチャートに続くフローチャートである。以下、このフローチャートを参照しながらテーブル削除処理を説明する。
【0077】
テーブル削除処理において、まず、データベース装置10、より詳しくはアプリケーション部400は、データベースクライアント300のインタフェース部301にテーブル削除を要求するSQLコマンド「DROP TABLE 」を入力する(S40)。
【0078】
次にデータベース装置10、より詳しくはインタフェース部301は、受け取ったSQLコマンド「DROP TABLE 」を処理一次判断部302に渡し、処理一次判断部302は、このSQLコマンドは高速処理が可能かどうか判断する(S41)。この説明では高速処理が不可であると判断したものとして、以下の説明を行う。なお、前述の「簡単なSQL文」は高速処理可能であると判断し、「簡単なSQL文」でない場合は高速処理可能でないと判断する。
なお、ステップS41において高速処理が可能と判断した場合は、処理一次判断部302は当該SQLコマンドに対応するKVS型コマンドを生成し、このKVS型コマンドをKVSコマンド処理部303に渡し、当該KVS型コマンドを実行させる。
【0079】
さて、ステップS41において高速処理が不可であると判断した処理一次判断部302は、このSQLコマンド「DROP TABLE 」をクライアント側送受信部306に渡す。次にデータベース装置10、より詳しくはデータベースクライアント300のクライアント側送受信部306は、SQLコマンド「DROP TABLE 」をデータベースサーバ200のサーバ側送受信部201に送信する(S42)。
【0080】
次に、データベース装置10、より詳しくはデータベースサーバ200のサーバ側送受信部201は、クライアント側送受信部306からSQLコマンド「DROP TABLE 」を受信する(S43)。
【0081】
次に、データベース装置10、より詳しくはサーバ側送受信部201はSQL字句解釈部202にSQLコマンド「DROP TABLE 」を渡す。SQLコマンド「DROP TABLE 」を受け取ったSQL字句解釈部202はこの。SQLコマンド「DROP TABLE 」を解釈し、解釈結果をSQLコマンド実行部203に渡す(S44)。
【0082】
次にデータベース装置10、より詳しくはSQLコマンド実行部203は、SQLコマンドの解釈結果からステーブルスキーマ情報を生成し、これをスキーマ情報管理部205に渡す(S45)。
【0083】
次にデータベース装置10、より詳しくはSQLコマンド実行部203は、KVSデータ処理部206にテーブル削除を要求し、KVSデータ処理部206はキャッシュメモリ207又はストレージ208にアクセスしてテーブル削除を実行する(S46)。
上記データ削除が完了すると、データベース装置10、より詳しくはKVSデータ処理部206は、SQLコマンド実行部203に実行結果を返す(S47)。
次にデータベース装置10、より詳しくはSQLコマンド実行部203はサーバ側送受信部201に実行結果を渡す(S48)。
【0084】
次にデータベース装置10、より詳しくはサーバ側送受信部201は、接続中の各データベースクライアント300のクライアント側送受信部306にテーブル削除の通知を送信する(S49)。
【0085】
また、データベース装置10、より詳しくはサーバ側送受信部201は、前述したSQLコマンド「DROP TABLE 」発行元のデータベースクライアント300のクライアント側送受信部306に実行結果を送信する(S50)。クライアント側送受信部306は実行結果を受信すると、この実行結果をインタフェース部301に渡す。
【0086】
データベース装置10、より詳しくはデータベースクライアント300のインタフェース部301は、アプリケーション部400に実行結果を通知する(S51)。アプリケーション部400は、自らが発行したSQLコマンド「DROP TABLE 」に応じてテーブル削除が完了したことを知る。
以上でテーブル削除処理が終了する。
図10に、上記図8及び図9に示したフローチャートに対応する、テーブル削除処理のシーケンス図を示す。
【0087】
アプリケーション部400がSQLコマンド「DROP TABLE」を、データベースクライアント300のインタフェース部301に送信する(S201)と、インタフェース部301はこのSQLコマンド「DROP TABLE」を処理一次判断部302に送信し(S202)、処理一次判断部302はこのSQLコマンド「DROP TABLE」をクライアント側送受信部306に送信する(S203)。クライアント側送受信部306はこのSQLコマンド「DROP TABLE」をデータベースサーバ200のサーバ側送受信部201に送信する(S204)。
【0088】
このSQLコマンド「DROP TABLE」を受信したデータベースサーバ200のサーバ側送受信部201はSQL字句解釈部202にSQLコマンド「DROP TABLE」を渡す(S205)。
【0089】
SQLコマンド「DROP TABLE」を受信したSQL字句解釈部202は、SQLコマンド「DROP TABLE」の字句解釈を実行し(S206)、字句解釈の結果に基づいてテーブル削除実行命令をSQLコマンド実行部203に渡す(S207)。
SQLコマンド実行部203は、テーブル削除の要求をKVSデータ処理部206に渡す(S208)。
【0090】
前記要求を受信したKVSデータ処理部206は、キャッシュメモリ207又はストレージ208にアクセスし、テーブルの削除を命令する(S209)。キャッシュメモリ207又はストレージ208は、この命令に応じて、指定されたテーブルを削除する。テーブルの削除を完了したキャッシュメモリ207又はストレージ208は、実行結果をKVSデータ処理部206に返す(S210)。
KVSデータ処理部206は実行結果をSQLコマンド実行部203に渡す(S211)。
【0091】
テーブル削除の実行結果を受け取ったSQLコマンド実行部203は、スキーマ情報管理部205に、削除したテーブルに対応するテーブルスキーマ情報の削除要求を渡す(S212)。
【0092】
テーブルスキーマ情報削除要求を受信したスキーマ情報管理部205は、テーブルスキーマ情報を削除し、テーブルスキーマ情報削除の実行結果をSQLコマンド実行部203に返す(S213)。
【0093】
テーブルスキーマ情報削除の実行結果及びテーブル削除の実行結果は、SQL字句解釈部202、サーバ側送受信部201、クライアント側送受信部306、処理一次判断部302、インタフェース部301を順に経由してアプリケーション部400に送信される(S214〜S219)。これにより、アプリケーション部400は自らが発したSQLコマンドの実行結果を知る。
以上で、テーブル削除処理は終了する。
【0094】
[2.4.KVS用APIデータ登録処理]
データベース装置10が実行するKVS用APIデータ登録処理を説明する。KVS用APIデータ登録処理は、KVS用APIを用いてデータベースサーバ200にデータ登録をさせる処理である。図11は、KVS用APIデータ登録処理の一例を示すフローチャートであり、図12図11に続くフローチャートである。以下、このフローチャートを参照しながらKVS用APIデータ登録処理を説明する。
【0095】
KVS用APIデータ登録処理において、データベース装置10、より詳しくはアプリケーション部400がデータベースクライアント300のインタフェース部301にKVS用コマンドを送信する(S60)。
【0096】
データベース装置10、より詳しくはKVS型コマンド処理部303は、KVS用コマンドを受信する(S610)と、スキーマ情報キャッシュ305に当該KVS用コマンドに対応するテーブルのテーブルスキーマ情報が有るか否かを判定する(S62)。
【0097】
スキーマ情報キャッシュ305に当該KVS用コマンドに対応するテーブルのテーブルスキーマ情報が無いと判定した場合(S62、No)、KVS型コマンド処理部303は、データベースサーバ200に当該KVS用コマンドに対応するテーブルスキーマ情報を要求する(S63)。その後KVS型コマンド処理部303は、データベースサーバ200に当該KVS用コマンドに対応するテーブルスキーマ情報を取得できたか否かを判定する(S64)。
【0098】
データベースサーバ200から当該KVS用コマンドに対応するテーブルスキーマ情報を取得できなかったと判定した場合(S64,No)、KVS用APIデータ登録処理はエラーとなり終了する。一方、データベースサーバ200から当該KVS用コマンドに対応するテーブルスキーマ情報を取得できたと判定した場合(S64,Yes)、後述するステップS65に進む。
【0099】
前述のステップS62に戻ってKVS用APIデータ登録処理の説明を続ける。ステップS62においてスキーマ情報キャッシュ305に当該KVS用コマンドに対応するテーブルのテーブルスキーマ情報があると判定した場合(S62、Yes)、KVS型コマンド処理部303は、クライアント側シリアライズ処理部304にKVS用コマンドに含まれているvalueをシリアライズさせる(S65)。クライアント側シリアライズ処理部304はシリアライズされたデータをKVS型コマンド処理部303に返す。KVS型コマンド処理部303はシリアライズされたデータを受け取ると、このシリアライズされたデータを含むKVS用コマンドを生成し、このKVS用コマンドをクライアント側送受信部306に渡す。
クライアント側送受信部306は、データベースサーバ200のサーバ側送受信部201にこのKVS型コマンドを送信する(S66)。
【0100】
データベースサーバ200のサーバ側送受信部201はKVS型コマンドを受信する(S67)と、サーバ側送受信部201はこのKVS型コマンドをKVSデータ処理部206に渡す。
【0101】
KVSデータ処理部206は、このKVS型コマンドに応じて、キャッシュメモリ207又はストレージ208にデータ登録を実行するよう命令する(S68)。
【0102】
キャッシュメモリ207又はストレージ208は、上記命令に応じてデータ登録を実行し、実行後にKVSデータ処理部206を経由してサーバ側送受信部201にデータ登録の実行結果を渡す(S69)。
サーバ側送受信部201は、データベースクライアント300のクライアント側送受信部306に実行結果を送信する(S70)。
【0103】
クライアント側送受信部306は、データベースクライアント300のインタフェース部301に実行結果を渡し、インタフェース部301はアプリケーション部400に実行結果を送信する(S71)。これによりアプリケーション部400は、KVS用APIデータ登録の実行結果を知る。
以上で、KVS用APIデータ登録処理は終了する。
図13に、上記図11及び図12に示したフローチャートに対応する、KVS用APIデータ登録処理のシーケンス図を示す。
【0104】
まず、データベース装置10、より詳しくはアプリケーション部400がデータベースクライアント300のインタフェース部301にKVS用コマンドを渡す(S301)。
【0105】
データベース装置10、より詳しくはKVS型コマンド処理部303は、インタフェース部からこのKVS用コマンドを受け取ると、スキーマ情報キャッシュ305に当該KVS用コマンドに対応するテーブルのテーブルスキーマ情報を読み出すように要求する(S303)。
スキーマ情報キャッシュ305は、要求されたテーブルスキーマ情報があればそのテーブルスキーマ情報をKVS型コマンド処理部303に渡す(S304)。
【0106】
スキーマ情報キャッシュ305に要求されたテーブルスキーマ情報が無い場合、データベースクライアント300は、データベースサーバ200からそのテーブルスキーマ情報の取得を試みる(S305)。このステップS305の処理内容については別途後述する。
【0107】
さて、ステップS304において、スキーマ情報キャッシュ305が要求されたテーブルスキーマ情報を有し、そのテーブルスキーマ情報をKVS型コマンド処理部303に渡した場合、KVS型コマンド処理部303は、クライアント側シリアライズ処理部304にKVS用コマンドに含まれているvalueをシリアライズするよう要求する(S306)。
【0108】
ステップS306の要求に応じて、クライアント側シリアライズ処理部304はシリアライズされたデータを生成し、これをKVS型コマンド処理部303に返す(S307)。
KVS型コマンド処理部303はシリアライズされたデータを受け取ると、このシリアライズされたデータを含むKVS用コマンドを生成し、このKVS用コマンドをクライアント側送受信部306に渡す(S308)。
クライアント側送受信部306は、データベースサーバ200のサーバ側送受信部201にこのKVS型コマンドを送信する(S309)。
【0109】
データベースサーバ200のサーバ側送受信部201は、クライアント側送受信部306からKVS型コマンドを受信すると、このKVS型コマンドをKVSデータ処理部206に渡す(S310)。
【0110】
KVSデータ処理部206は、このKVS型コマンドに応じて、キャッシュメモリ207又はストレージ208にデータ登録を実行するように命令する(S311)。
キャッシュメモリ207又はストレージ208はステップS311の命令に応じてデータ登録(書き込)を実行し、KVSデータ処理部206を経由してサーバ側送受信部201にデータ登録の実行結果を渡す(S312、S313)。
サーバ側送受信部201は、データベースクライアント300のクライアント側送受信部306に実行結果を送信する(S314)。
【0111】
サーバ側送受信部201から実行結果を受信したクライアント側送受信部306は、データベースクライアント300のKVSコマンド処理部を経由してインタフェース部301に実行結果を渡し(S315、S316)、この実行結果を受け取ったインタフェース部301はアプリケーション部400に実行結果を送信する(S317)。これにより、アプリケーション部400はKVS用APIデータ登録の実行結果を知る。
以上で、図13に示したKVS用APIデータ登録処理のシーケンス図の説明を終了する。
【0112】
[2.5.テーブルスキーマ情報取得処理]
前掲の図13であるKVS用APIデータ登録処理のシーケンス図において、スキーマ情報キャッシュ305に要求されたテーブルスキーマ情報が無い場合、データベースクライアント300は、データベースサーバ200からそのテーブルスキーマ情報の取得を試みる(S305)処理であるテーブルスキーマ情報取得処理を行う。このステップS305のテーブルスキーマ情報取得処理について述べる。
【0113】
図14は、テーブルスキーマ情報取得処理の一例を示すフローチャートである。図14のフローチャートを参照しながら、テーブルスキーマ情報取得処理の一例を説明する。なお、この例ではスキーマ情報キャッシュ305に該当するテーブルスキーマ情報が記憶されていないことを前提として説明を行う。
【0114】
テーブルスキーマ情報取得処理において、データベース装置10、より詳しくはKVS型コマンド処理部303は、データベースクライアント300のスキーマ情報キャッシュ305に該当テーブルに対応するテーブルスキーマ情報が無いことを確認する(S80)。
【0115】
次にデータベース装置10、より詳しくはデータベースクライアント300のクライアント側送受信部306は、データベースサーバ200にテーブルスキーマ情報を要求するメッセージを送信する(S81)。
【0116】
次にデータベース装置10、より詳しくはデータベースサーバ200のサーバ側送受信部201は、上記メッセージを受信すると、スキーマ情報管理部205に上記メッセージにおいて指定されたテーブルスキーマ情報の読出しを要求する(S82)。
【0117】
スキーマ情報管理部205は、上記テーブルスキーマ情報を記憶しているか否かを判定する(S83)。上記テーブルスキーマ情報を記憶していると判定した場合(S83、Yes)、
【0118】
KVSデータ処理部206はキャッシュメモリ207又はストレージ208から当該テーブルスキーマ情報を読み出し、KVSデータ処理部206はテーブルスキーマ情報を取得する(S84)。この後、後述するステップS85に進む。
【0119】
一方、ステップS83において上記テーブルスキーマ情報を記憶していないと判定した場合(S83、No)、スキーマ情報管理部205はサーバ側送受信部201を経由してクライアント側送受信部306にテーブルスキーマ情報取得の実行結果を送信する。なお、ステップS84において、テーブルスキーマ情報の取得が成功している場合は、上記実行結果とともにテーブルスキーマ情報がクライアント側送受信部306に送信され、クライアント側送受信部306は実行結果(存在した場合はテーブルスキーマ情報を伴う)を受信する(S85)。クライアント側送受信部306は実行結果をKVS型コマンド処理部303に実行結果を渡す。
【0120】
なお、クライアント側送受信部306がテーブルスキーマ情報を受信した場合は、KVS型コマンド処理部303はそのテーブルスキーマ情報をスキーマ情報キャッシュ305に渡し、スキーマ情報キャッシュ305はそのテーブルスキーマ情報を記憶する(S86)。
以上で、テーブルスキーマ情報取得処理は終了する。
図15に、上記図14のフローチャートに対応する、テーブルスキーマ情報取得処理のシーケンス図を示す。
【0121】
テーブルスキーマ情報取得処理において、まずデータベースクライアント300のKVS型コマンド処理部303は、スキーマ情報キャッシュ305に該当するテーブルスキーマ情報を要求する(S401)。
【0122】
スキーマ情報キャッシュ305は、要求されたテーブルスキーマ情報の読出し結果をKVS型コマンド処理部303に渡す(S402)。なお、以降の説明は、スキーマ情報キャッシュ305が要求されたテーブルスキーマ情報を記憶していないものとして行う。
【0123】
スキーマ情報キャッシュ305から要求されたテーブルスキーマ情報を記憶していない通知を受けたKVS型コマンド処理部303は、クライアント側送受信部306にテーブルスキーマ情報取得要求を渡す(S403)。クライアント側送受信部306はテーブルスキーマ情報取得要求をサーバ側送受信部201に送信する(S404)。
【0124】
サーバ側送受信部201は、テーブルスキーマ情報取得要求を受信すると、スキーマ情報管理部205にテーブルスキーマ情報の有無の問い合わせを渡す(S405)。スキーマ情報管理部205は、要求されたテーブルスキーマ情報の有無をサーバ側送受信部201に返す(S406)。なお、以降の説明は、スキーマ情報管理部205が要求されたテーブルスキーマ情報有りとの情報をサーバ側送受信部201に返した場合を説明する。スキーマ情報管理部205が要求されたテーブルスキーマ情報無しとの情報をサーバ側送受信部201に返した場合は後述するステップS411に直ちに進む。
【0125】
スキーマ情報管理部205から要求されたテーブルスキーマ情報有りとの情報を受け取ったサーバ側送受信部201は、KVSデータ処理部206に当該テーブルスキーマ情報取得要求を渡す(S407)。
【0126】
テーブルスキーマ情報取得要求を受け取ったKVSデータ処理部206は、キャッシュメモリ207又はストレージ208に当該テーブルスキーマ情報の読出しを要求する(S408)。
【0127】
テーブルスキーマ情報の読出しの要求を受け取ったキャッシュメモリ207又はストレージ208は、当該テーブルスキーマ情報を読み出し、これをKVSデータ処理部206に返す(S409)。
【0128】
キャッシュメモリ207又はストレージ208からテーブルスキーマ情報を受け取ったKVSデータ処理部206は、このテーブルスキーマ情報をサーバ側送受信部201に渡す(S410)。
【0129】
サーバ側送受信部201はこのテーブルスキーマ情報をクライアント側送受信部306に送信する(S411)。なお、スキーマ情報管理部205が要求されたテーブルスキーマ情報無しとの情報をサーバ側送受信部201に返した場合は、サーバ側送受信部201は該当するテーブルスキーマ情報は無い旨のメッセージをクライアント側送受信部306に送信する。
【0130】
要求にかかるテーブルスキーマ情報、又は当該テーブルスキーマ情報は無い旨のメッセージを受信したクライアント側送受信部306は、これらをKVS型コマンド処理部303に渡す(S412)。
【0131】
テーブルスキーマ情報を受け取った場合、KVS型コマンド処理部303は当該テーブルスキーマ情報をスキーマ情報キャッシュ305に渡す(S413)。当該テーブルスキーマ情報は無い旨のメッセージを受信した場合は、そのままテーブルスキーマ情報取得処理は終了する。
【0132】
テーブルスキーマ情報を受け取ったスキーマ情報キャッシュ305は、当該テーブルスキーマ情報を記憶し、記憶した結果をKVS型コマンド処理部303に返す(S414)。
以上で、図15に示す、テーブルスキーマ情報取得処理のシーケンス図の説明を終了する。
【0133】
[2.6.SQLデータ登録処理]
SQLデータ登録処理について述べる。SQLデータ登録処理は、アプリケーション部400がデータ登録を要求するSQLコマンドを、データベースクライアント300へ渡した場合に、これに応じてデータベース装置10がデータ登録を行う処理である。
【0134】
図16は、SQLデータ登録処理の一例を示すフローチャートであり、図17図16に続くデータ登録処理のフローチャートである。以下、図16及び図17のフローチャートを参照しながらSQLデータ登録処理の一例を説明する。
【0135】
SQLデータ登録処理において、まず最初にアプリケーション部400はデータベースクライアント300のインタフェース部301にデータ登録を要求するSQLコマンドを送信する(S90)。インタフェース部301は、このSQLコマンドを処理一次判断部302に渡す。
このSQLコマンドを受け取った処理一次判断部302は、当該SQLコマンドが高速処理可能か否かを判定する(S91)。
【0136】
ステップS91において当該SQLコマンドが高速処理可能であると判定した場合(S91、可能)、処理一次判断部302は当該SQLコマンドに対応するKVS型コマンドを生成し、このKVS型コマンドをKVS型コマンド処理部303に渡す(S92)。その後前述したKVS用APIデータ登録処理と同様の処理が実行され、SQLデータ登録処理は終了する。
【0137】
一方、ステップS91において当該SQLコマンドが高速処理可能でないと判定した場合(S91、不可)、処理一次判断部302は当該SQLコマンドをクライアント側送受信部306に渡し、クライアント側送受信部306はこのSQLコマンドをサーバ側送受信部201に送信する(S93)。
データベースサーバ200のサーバ側送受信部201はSQLコマンドを受信する(S94)と、このSQLコマンドをSQL字句解釈部202に渡す。
SQL字句解釈部202はこのSQLコマンドを解釈し、解釈結果をSQLコマンド実行部203に渡す(S95)。
【0138】
SQLコマンド実行部203はスキーマ情報管理部205からSQLコマンドで指定されたテーブルのテーブルスキーマ情報をスキーマ情報管理部205に要求し、これを取得する。SQLコマンド実行部203はテーブルスキーマ情報とSQLコマンドに含まれるデータをサーバ側シリアライズ処理部204に渡す(S96)。サーバ側シリアライズ処理部204はテーブルスキーマ情報とSQLコマンドに含まれるデータからシリアライズされたデータを生成し、これをSQLコマンド実行部203に返す(S97)。
【0139】
SQLコマンド実行部203はシリアライズされたデータをKVSデータ処理部206に渡す。KVSデータ処理部206はキャッシュメモリ207又はストレージ208にアクセスし、シリアライズされたデータをキャッシュメモリ207又はストレージ208に書き込む(S98)。
【0140】
キャッシュメモリ207又はストレージ208は、キャッシュメモリ207又はストレージ208に書き込んだ結果である実行結果をSQLコマンド実行部203に渡す(S99)。
【0141】
SQLコマンド実行部203はサーバ側送受信部201にこの実行結果を渡す(S100_1)。サーバ側送受信部201は、クライアント側送受信部306この実行結果を送信する(S100_2)。
【0142】
クライアント側送受信部306は、処理一次判断部302、インタフェース部301を経由してこの実行結果をアプリケーション部400に渡す(S100_3)。アプリケーション部400は要求したデータ登録の実行結果を取得する。
以上で、SQLデータ登録処理は終了する。
【0143】
図18に、上記図16及び図17に示したフローチャートに対応する、SQLデータ登録処理のシーケンス図を示す。なお、本シーケンス図では、処理一次判断部302で高速処理が不可であると判定された場合の流れを説明する。
【0144】
SQLデータ登録処理において、アプリケーション部400は、データ登録を要求するSQLコマンド「INSERT」をインタフェース部301に渡す(S501)。このSQLコマンド「INSERT」を受け取ったインタフェース部301は、SQLコマンド「INSERT」を処理一次判断部302に渡す(S502)。このSQLコマンド「INSERT」を受け取った処理一次判断部302は、高速処理が不可であると判定し、このSQLコマンド「INSERT」をクライアント側送受信部306に渡す(S503)。
【0145】
クライアント側送受信部306は、このSQLコマンド「INSERT」をデータベースサーバ200のサーバ側送受信部201に送信する(S504)。SQLコマンドを受信したサーバ側送受信部201はこのSQLコマンドをSQL字句解釈部202に渡す(S505)。このSQLコマンドを受け取ったSQL字句解釈部202は、SQL文の字句解釈を実行する(S506)。
SQL文の字句解釈を実行したSQL字句解釈部202は、SQLコマンド実行部203へ解釈結果を渡す(S507)。
【0146】
SQLコマンド実行部203はSQLコマンドで指定されたテーブルのテーブルスキーマ情報をスキーマ情報管理部205に要求する(S508)。スキーマ情報管理部205は、当該テーブルスキーマ情報がデータベースサーバ200内に記憶されている場合は、当該テーブルスキーマ情報をSQLコマンド実行部203に返す(S509)。
【0147】
テーブルスキーマ情報を取得したSQLコマンド実行部203は、SQLコマンドに含まれるデータ(Key, value)とテーブルスキーマ情報をサーバ側シリアライズ処理部204に渡す(S510)。
【0148】
データ(Key, value)とテーブルスキーマ情報を受け取ったサーバ側シリアライズ処理部204は、これらをシリアライズし、シリアライズされたデータをSQLコマンド実行部203に返す(S511)。
シリアライズされたデータを受け取ったSQLコマンド実行部203は、シリアライズされたデータをKVSデータ処理部206に渡す(S512)。
【0149】
シリアライズされたデータを受け取ったKVSデータ処理部206はキャッシュメモリ207又はストレージ208にアクセスし、シリアライズされたデータをキャッシュメモリ207又はストレージ208に書き込ませる(S513)。
【0150】
キャッシュメモリ207又はストレージ208は、書き込んだ結果を示す実行結果をKVSデータ処理部206に渡す(S514)。実行結果を受け取ったKVSデータ処理部206は、この実行結果をSQLコマンド実行部203に渡す(S515)。SQLコマンド実行部203は、この実行結果をSQL字句解釈部202に渡す(S516)。実行結果を受け取ったSQL字句解釈部202は、サーバ側送受信部201にこの実行結果を渡す(S517)。サーバ側送受信部201は、データベースクライアント300のクライアント側送受信部306この実行結果を送信する(S518)。
【0151】
実行結果を受信したクライアント側送受信部306は、処理一次判断部302、インタフェース部301を順に経由してこの実行結果をアプリケーション部400に渡す(S519、S520、S521)。
以上で、図18に示すSQLデータ登録処理のシーケンス図の説明を終了する。
【0152】
[2.7.KVS用APIデータ取得処理]
KVS用APIデータ取得処理について述べる。KVS用APIデータ取得処理は、アプリケーション部400がデータ取得(読出し)を要求するKVSコマンドを、データベースクライアント300へ渡した場合に、これに応じてデータベース装置10がデータ取得を行う処理である。
【0153】
図19は、KVS用APIデータ取得処理の一例を示すフローチャートである。図19のフローチャートを参照しながらKVS用APIデータ取得処理の一例を説明する。
【0154】
KVS用APIデータ取得処理において、まず最初にデータベースクライアント300のアプリケーション部400はデータ取得を要求するKVSコマンドをインタフェース部301に渡す(S110_1)。
【0155】
インタフェース部301はデータベースクライアントのクライアント側送受信部306にこのKVSコマンドを渡し、クライアント側送受信部306はデータベースサーバ200のサーバ側送受信部201にKVSコマンドを送信する(S110_2)。
【0156】
データベースサーバ200のサーバ側送受信部201は、このKVSコマンドを受信すると、KVSコマンド処理部303にこのKVSコマンドを渡す(S110_3)。
【0157】
KVSデータ処理部206は、キャッシュメモリ207又はストレージ208にアクセスし、キャッシュメモリ207又はストレージ208から、KVSコマンドで要求されているデータを取得する(S110_4)。
【0158】
KVSデータ処理部206は、データ取得処理の実行結果(取得したデータを含む)をサーバ側送受信部201に渡す(S110_5)。サーバ側送受信部201はこの実行結果をクライアント側送受信部306に送信する(S110_6)。
クライアント側送受信部306は、受信した実行結果をKVS型コマンド処理部303に渡す(S110_7)。
【0159】
KVS型コマンド処理部303は、実行結果に含まれるデータに対応するテーブルスキーマ情報をスキーマ情報キャッシュ305から読み出す(S110_8)。
【0160】
KVS型コマンド処理部303は、実行結果に含まれるデータ及びステップS110_8で取得したテーブルスキーマ情報をクライアント側シリアライズ処理部304に渡す。実行結果に含まれるデータ及びステップS110_8で取得したテーブルスキーマ情報をクライアント側シリアライズ処理部304は、データをデシリアライズしてデータからvalueを生成し、生成したvalueをKVS型コマンド処理部303返す(S110_9)。
【0161】
KVS型コマンド処理部303は、上記value及び実行結果をインタフェース部301に渡し、インタフェース部301は上記value及び実行結果をアプリケーション部400に渡す(S110_10)。
以上でKVS用APIデータ取得処理が終了する。
図20に、上記図19に示したフローチャートに対応する、KVS用APIデータ取得処理のシーケンス図を示す。
データベースクライアント300のアプリケーション部400はデータ取得を要求するKVSコマンドをインタフェース部301に渡す(S601)。
インタフェース部301はKVS型コマンド処理部303にこのKVSコマンドを渡す(S602)。
【0162】
KVS型コマンド処理部303はクライアント側送受信部306にこのKVSコマンドを渡す(S603)。KVSコマンドを受け取ったクライアント側送受信部306はデータベースサーバ200のサーバ側送受信部201にこのKVSコマンドを送信する(S604)。
【0163】
データベースサーバ200のサーバ側送受信部201は、このKVSコマンドを受信すると、KVSコマンド処理部303にこのKVSコマンドを渡す(S605)。
【0164】
KVSデータ処理部206は、キャッシュメモリ207又はストレージ208にアクセスし、キャッシュメモリ207又はストレージ208から、KVSコマンドで要求されているデータの読出しを要求する(S606)。
キャッシュメモリ207又はストレージ208は、データの読出し要求に応じて、KVSデータ処理部206にデータを返す(S607)。
【0165】
データを取得したKVSデータ処理部206は、データ取得処理の実行結果(取得したデータを含む)をサーバ側送受信部201に渡す(S608)。サーバ側送受信部201はこの実行結果をクライアント側送受信部306に送信する(S609)。
クライアント側送受信部306は、受信した実行結果をKVS型コマンド処理部303に渡す(S610)。
【0166】
KVS型コマンド処理部303は、実行結果に含まれるデータに対応するテーブルスキーマ情報をスキーマ情報キャッシュ305に要求し(S611)、スキーマ情報キャッシュ305は要求されたテーブルスキーマ情報をKVS型コマンド処理部303に渡す(S612)。
【0167】
KVS型コマンド処理部303は、実行結果に含まれるデータ及びステップS611,S612で取得したテーブルスキーマ情報をクライアント側シリアライズ処理部304に渡す(S613)。実行結果に含まれるデータ及びステップS611,S612で取得したテーブルスキーマ情報を受け取ったクライアント側シリアライズ処理部304は、データをデシリアライズしてデータからvalueを生成し、生成したvalueをKVS型コマンド処理部303に返す(S614)。
【0168】
KVS型コマンド処理部303は、上記value及び実行結果をインタフェース部301に渡す(S615)。インタフェース部301は上記value及び実行結果をアプリケーション部400に渡す(S616)。
以上で、図20に示す、KVS用APIデータ取得処理のシーケンス図の説明を終了する。
【0169】
[2.8.SQLデータ取得処理]
SQLデータ取得処理について述べる。SQLデータ取得処理は、アプリケーション部400がデータ取得(読出し)を要求するSQLコマンドを、データベースクライアント300へ渡した場合に、これに応じてデータベース装置10がデータ取得を行う処理である。
【0170】
図21は、SQLデータ取得処理の一例を示すフローチャートであり、図22図21のフローチャートに続くフローチャートである。図21及び図22のフローチャートを参照しながらSQLデータ取得処理の一例を説明する。
【0171】
SQLデータ取得処理において、最初にアプリケーション部400はデータベースクライアント300のインタフェース部301にデータ登録を要求するSQLコマンドを送信する(S120_1)。インタフェース部301は、このSQLコマンドを処理一次判断部302に渡す。
このSQLコマンドを受け取った処理一次判断部302は、当該SQLコマンドが高速処理可能か否かを判定する(S120_2)。
【0172】
ステップS120_2において当該SQLコマンドが高速処理可能であると判定した場合(S120_2、可能)、処理一次判断部302は当該SQLコマンドに対応するKVS型コマンドを生成し、このKVS型コマンドをKVS型コマンド処理部303に渡す(S120_3)。その後前述したKVS用APIデータ取得処理と同様の処理が実行され、SQLデータ取得処理は終了する。
【0173】
一方、ステップS120_2において当該SQLコマンドが高速処理可能でないと判定した場合(S120_2、不可)、処理一次判断部302は当該SQLコマンドをクライアント側送受信部306に渡し、クライアント側送受信部306はこのSQLコマンドをサーバ側送受信部201に送信する(S120_4)。
データベースサーバ200のサーバ側送受信部201はSQLコマンドを受信すると、SQLコマンドをSQL字句解釈部202に渡す(S120_5)。
SQL字句解釈部202はこのSQLコマンドを解釈し、解釈結果をSQLコマンド実行部203に渡す(S120_6)。
【0174】
SQLコマンド実行部203はSQLコマンドで指定されたテーブルのテーブルスキーマ情報をスキーマ情報管理部205に要求し、これを取得する。SQLコマンド実行部203はテーブルスキーマ情報とSQLコマンドに含まれるデータをKVSデータ処理部206に渡す(S120_7)。
【0175】
KVSデータ処理部206はキャッシュメモリ207又はストレージ208にアクセスし、シリアライズされたデータをキャッシュメモリ207又はストレージ208から読み出す(S120_8)。キャッシュメモリ207又はストレージ208は、シリアライズされたデータをKVSデータ処理部206に渡す。KVSデータ処理部206はシリアライズされたデータを含む実行結果をSQLコマンド実行部203に返す(S120_9)。
【0176】
SQLコマンド実行部203は、受け取ったシリアライズされているデータをサーバ側シリアライズ処理部204に渡す。サーバ側シリアライズ処理部204は、シリアライズされているデータをデシリアライズしてデシリアライズされたデータを生成する(S120_10)、
【0177】
サーバ側シリアライズ処理部204は、デシリアライズされたデータをSQLコマンド実行部203に返す。デシリアライズされたデータを受け取ったSQLコマンド実行部203は、サーバ側送受信部201にデータ取得の実行結果(デシリアライズされたデータを含む)を渡す(S120_11)。
【0178】
実行結果(デシリアライズされたデータを含む)を受け取ったサーバ側送受信部201は、クライアント側送受信部306この実行結果を送信する(S120_12)。
【0179】
実行結果を受信したクライアント側送受信部306は、処理一次判断部302、インタフェース部301を経由してこの実行結果をアプリケーション部400に渡す(S120_13)。
以上で、SQLデータ取得処理は終了する。
【0180】
図23に、上記図21及び図22のフローチャートに対応する、SQLデータ取得処理のシーケンス図を示す。なお、本シーケンス図では、処理一次判断部302で高速処理が不可であると判定された場合の流れを示すこととする。
【0181】
SQLデータ取得処理において、アプリケーション部400は、データ取得(読出し)を要求するSQLコマンドをインタフェース部301に渡す(S701)。このSQLコマンドを受け取ったインタフェース部301は、このSQLコマンドを処理一次判断部302に渡す(S702)。このSQLコマンドを受け取った処理一次判断部302は、高速処理が不可であると判定し、このSQLコマンドをクライアント側送受信部306に渡す(S703)。
【0182】
クライアント側送受信部306は、このSQLコマンドをデータベースサーバ200のサーバ側送受信部201に送信する(S704)。SQLコマンドを受信したサーバ側送受信部201はこのSQLコマンドをSQL字句解釈部202に渡す(S705)。このSQLコマンドを受け取ったSQL字句解釈部202は、SQL文の字句解釈を実行する(S706)。
SQLコマンドの字句解釈を実行したSQL字句解釈部202は、SQLコマンド実行部203へ解釈結果を渡す(S707)。
【0183】
SQLコマンド実行部203はSQLコマンドで指定されたテーブルのテーブルスキーマ情報をスキーマ情報管理部205に要求する(S708)。スキーマ情報管理部205は、当該テーブルスキーマ情報がデータベースサーバ200内に記憶されている場合は、当該テーブルスキーマ情報をSQLコマンド実行部203に返す(S709)。
【0184】
テーブルスキーマ情報を取得したSQLコマンド実行部203は、SQLコマンドに含まれるデータ(Key, value)をKVSデータ処理部206に渡す(S710)。
【0185】
データを受け取ったKVSデータ処理部206はキャッシュメモリ207又はストレージ208にアクセスし、シリアライズされたデータをキャッシュメモリ207又はストレージ208にデータ読み出しを要求する(S711)。キャッシュメモリ207又はストレージ208は、要求されたデータの読出しの実行結果(読み出したデータを含む)をKVSデータ処理部206に渡す(S712)。
KVSデータ処理部206は、キャッシュメモリ207又はストレージ208から取得したデータをSQLコマンド実行部203に渡す(S713)。
【0186】
データを受け取ったSQLコマンド実行部203は、ステップS708,709にて取得したテーブルスキーマ情報とともにこのデータをサーバ側シリアライズ処理部204に渡す(S714)。
【0187】
データ(Key, value)とテーブルスキーマを受け取ったサーバ側シリアライズ処理部204は、データをデシリアライズし、デシリアライズされたデータをSQLコマンド実行部203に返す(S715)。
【0188】
デシリアライズされたデータを受け取ったSQLコマンド実行部203は、デシリアライズされたデータを含む実行結果をSQL字句解釈部202に渡す(S716)。実行結果を受け取ったSQL字句解釈部202は、サーバ側送受信部201にこの実行結果を渡す(S717)。サーバ側送受信部201は、データベースクライアント300のクライアント側送受信部306この実行結果を送信する(S718)。
【0189】
実行結果を受信したクライアント側送受信部306は、処理一次判断部302、インタフェース部301を順に経由してこの実行結果をアプリケーション部400に渡す(S719、S720、S721)。
以上で、図23に示す、SQLデータ取得処理のシーケンス図の説明を終了する。
【0190】
[3.命令文の例]
アプリケーション部400からデータベースクライアント300に渡される命令文の例を示す。
(1)テーブルスキーマ情報作成(登録)を行わせる命令文の例は以下のとおりである。
SQL: CREATE TABLE テーブル名 ( key, value1, …);
(2)データ登録を行わせる命令文の例は以下のとおりである。
なお、データ登録は、SQL と KVS用APIのどちらを用いても実行可能である。
SQL: INSERT INTO テーブル名 VALUES( aa, bb, …);
KVS用API: set ( テーブル名, key, value1, value2, … );
put ( テーブル名, key, value1, value2, … );
(3)データ取得を行わせる命令文の例は以下のとおりである。
なお、データ取得はSQL と KVS用APIのどちらを用いても実行可能である。
SQL: SELECT カラム名 FROM テーブル名 WHERE 条件;
KVS用API: get ( テーブル名, key, *value1, *value2, … );
(4)データ削除を行わせる命令文の例は以下のとおりである。
なお、データ削除はSQL と KVSのどちらを用いても実行可能である。:
SQL: DELETE FROM テーブル名 WHERE 条件;
KVS用API: delete ( テーブル名, key );
【0191】
[4.第2の実施の形態]
第2の実施の形態を説明する。本発明の第2の実施の形態は、データベース装置として提案される。このデータベース装置は、SQLと、KVS用APIという複数のデータ操作手段を備え、KVS用APIにより、速度が遅いというSQLの課題を解決し、既存のアプリケーションで使用される場合が多いSQLでも操作できる装置である。
【0192】
第2の実施の形態にかかるデータベース装置は、コンピュータ、ワークステーション、サーバなどの情報処理装置であって、この情報処理装置は、演算処理装置(CPU)、主メモリ(RAM)、読み出し専用メモリ(ROM)、入出力装置(I/O)、及び必要な場合にはハードディスク装置等の外部記憶装置を具備している装置である。
【0193】
図24に、第2の実施の形態にかかるデータベース装置10の構成例を示す機能ブロック図を掲げる。なお、第1の実施の形態にかかるデータベース装置と同一の構成要素については、同一の参照符号を付しそれら構成要素の詳細な説明は省略する。
【0194】
本発明の実施の形態にかかるデータベース装置は、アプリケーションサーバ100と、アプリケーションサーバ100に接続されたデータベースサーバ200を有している。アプリケーションサーバ100はネットワーク20に接続されており、ネットワーク20を介して端末装置30と通信可能である。
【0195】
[4.1.アプリケーションサーバ]
アプリケーションサーバ100は、データベースサーバ200が提供するデータベースを利用して、サービスを端末装置30に提供する機能を有する。
アプリケーションサーバ100は、アプリケーション部400と、アプリケーション部400に接続されたデータベースクライアント300を有する。
【0196】
[4.1.1.データベースクライアント]
図24を参照しながら、データベースクライアント300の構成例を説明する。データベースクライアント300は、インタフェース部301と、インタフェース部301に接続されたクライアント側送受信部306とを有する。なお、インタフェース部301は、アプリケーション部400と接続されており、クライアント側送受信部306はサーバ側送受信部201に接続されている。
【0197】
[4.2.データベースサーバ]
データベースサーバ200は、サーバ側送受信部201と、サーバ側送受信部201に接続された処理一次判断部302及びKVS型コマンド処理部303と、処理一次判断部302に接続されたSQL字句解釈部202と、SQL字句解釈部202に接続されたSQLコマンド実行部203と、SQLコマンド実行部203に接続されたKVSデータ処理部206、サーバ側シリアライズ処理部204、スキーマ情報管理部205と、KVSデータ処理部206に接続されたキャッシュメモリ207、ストレージ208とを有している。
【0198】
KVS型コマンド処理部303は処理一次判断部302に接続されていると共に、サーバ側シリアライズ処理部204、スキーマ情報管理部205にも接続されている。KVSデータ処理部206及びSQLコマンド実行部203はサーバ側送受信部201に接続されている。サーバ側送受信部201は、クライアント側送受信部306に接続されている。
【0199】
第2の実施の形態にかかるデータベース装置は、第1の実施の形態では、データベースクライアント300に設けられていた処理一次判断部302及びKVS型コマンド処理部303をデータベースサーバ200に設けると共に、サーバ側シリアライス処理部204を、第1の実施の形態のクライアント側シリアライズ処理部304及びサーバ側シリアライス処理部204の双方の機能を有するシリアライズ処理部204Aに置き換えている点で異なっている。その他の構成及び各構成要素の機能は第1の実施の形態と同様である。
【0200】
第2の実施の形態にかかるデータベース装置は、データベースサーバ200Aでシリアライズやデシリアライズを行うという特徴がある。この特徴によって、データベースサーバ200Aに接続中の各データベースクライアント300Aへのスキーマ情報変更通知が不要となり、処理負荷の低減、処理時間の高速化が可能となる。
【0201】
[5.利点]
上記第1及び第2の実施の形態によれば、KVS用APIデータベースの操作をすることができるため、高速に処理を行うことが可能であるとともに、SQLでデータベースの操作することもできるため、様々な条件でのデータ取得が可能となり、また、SQL文を使用した既存のアプリケーションを変更すること無く使用ことも可能となる。
【0202】
また、上記第1及び第2の実施の形態によれば、テーブルスキーマ情報をデータベース側に持たせ、シリアライズやデシリアライズをアプリケーション側でなくデータベース側で行うことで、テーブル構造の変更が容易になる。
また、上記第1及び第2の実施の形態によれば、同じデータについて、KVS用APIとSQLの使い分けをすることが可能となる。
【0203】
[6.まとめ、その他]
以上、本発明の実施の形態を説明したが、本発明はこれらに限定されるものではなく、発明の趣旨を逸脱しない範囲内において、種々の変更、追加、組み合わせ等が可能である。
【符号の説明】
【0204】
10・・・データベース装置; 100・・・アプリケーションサーバ; 200,200A・・・データベースサーバ; 201・・・サーバ側送受信部; 202・・・SQL字句解釈部; 203・・・SQLコマンド実行部; 204・・・サーバ側シリアライズ処理部; 205・・・スキーマ情報管理部; 206・・・KVSデータ処理部; 207・・・キャッシュメモリ; 208・・・ストレージ; 300,300A・・・データベースクライアント; 302・・・処理一次判断部; 303・・・KVSコマンド処理部; 304・・・クライアント側シリアライズ処理部; 305・・・スキーマ情報キャッシュ; 306・・・クライアント側送受信部; 400・・・アプリケーション部;
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24