(57)【要約】【課題】データベース管理システムに構築された仮想テーブルから無駄なデータ転送を排除して、仮想テーブルへのアクセス性能の改善することができるデータベース装置およびそのデータ管理方法を提供する。【解決手段】本実施形態に係るデータベース装置は、データを格納する仮想テーブルに対するアプリケーションからの入出力要求を取得する入出力要求処理部と、前記入出力要求の履歴情報に基づいて、前記仮想テーブルが複数の列の組み合わせに分割されるように、前記仮想テーブルの格納形式を設定する格納形式設定部と、前記仮想テーブルの格納形式を前記格納形式設定部により設定された格納形式に変更するように、前記仮想テーブルの内容を変更する格納形式変更部と、を備える。【選択図】  図５
2014228960.tif 000002
【特許請求の範囲】
【請求項１】
データを格納する仮想テーブルに対するアプリケーションからの入出力要求を取得する入出力要求処理部と、
前記入出力要求の履歴情報に基づいて、前記仮想テーブルが複数の列の組み合わせに分割されるように、前記仮想テーブルの格納形式を設定する格納形式設定部と、
前記仮想テーブルの格納形式を前記格納形式設定部により設定された格納形式に変更するように、前記仮想テーブルの内容を変更する格納形式変更部と、
を備えるデータベース装置。
【請求項２】
前記入出力要求処理部は、
前記複数の列の組み合わせのうち、前記入出力要求に応じた前記列の組み合わせを抽出し、その列の組み合わせに対応するデータを前記アプリケーションへ出力する
請求項１に記載のデータベース装置。
【請求項３】
前記格納形式変更部は、
前記格納形式設定部により設定された格納形式に変更する前後において、前記入出力要求に応じた前記列の組み合わせにより、その列の組み合わせに対応するデータにアクセスする際の性能改善によって得られる利得に基づいて、前記仮想テーブルの格納形式を変更する
請求項１または２に記載のデータベース装置。
【請求項４】
前記格納形式変更部は、
前記格納形式設定部により設定された格納形式に変更する前後において、前記入出力要求に応じた前記列の組み合わせにより、その列の組み合わせに対応するデータにアクセスする際の性能改善によって得られる利得とそのデータへのアクセス回数の増加による損失とから算出される予測利得とに基づいて、前記仮想テーブルの格納形式を変更する
請求項１または２に記載のデータベース装置。
【請求項５】
前記格納形式変更部は、
前記格納形式設定部により設定された格納形式に変更する前後において、前記入出力要求に応じた前記列の組み合わせにより、その列の組み合わせに対応するデータにアクセスする際の性能改善によって得られる利得、そのデータへのアクセス回数の増加による損失とから算出される予測利得および前記仮想テーブルの格納形式を変更する際に要する時間的なコストに基づいて、前記予測利得が前記時間的なコストを上回る場合には、前記仮想テーブルの格納形式を変更する
請求項１または２に記載のデータベース装置。
【請求項６】
前記性能改善の評価対象は、
テーブル入出力要求がデータにアクセスするアクセス回数または当該データを外部に転送するデータ転送時間である
請求項３から５のいずれか１項に記載のデータベース装置。
【請求項７】
前記格納形式変更部は、
前記複数の列の組み合わせに対応するデータが互いに重複しない組み合わせにより分割されるように、前記仮想テーブルの格納形式を変更する
請求項１から６のいずれか１項に記載のデータベース装置。
【請求項８】
前記格納形式変更部は、
前記複数の列の組み合わせに対応するデータが一部に重複する組み合わせにより分割されるように、前記データの格納形式を変更する
請求項１から６のいずれか１項に記載のデータベース装置。
【請求項９】
前記格納形式設定部は、
前記履歴情報に基づく所定の回数の入出力要求または所定の時間経過により、前記仮想テーブルが前記複数の列の組み合わせに分割されるように、前記仮想テーブルの格納形式を設定する
請求項１から８のいずれか１項に記載のデータベース装置。
【請求項１０】
前記格納形式設定部は、
前記入出力要求の履歴情報に基づいて、前記列の組み合わせのデータに対する平均参照回数を算出し、その平均参照回数を閾値として前記仮想テーブルの格納形式を設定する
請求項１から９のいずれか１項に記載のデータベース装置。
【請求項１１】
データを格納する仮想テーブルに対するアプリケーションからの入出力要求を取得する入出力要求処理ステップと、
前記入出力要求の履歴情報に基づいて、前記仮想テーブルが複数の列の組み合わせに分割されるように、前記仮想テーブルの格納形式を設定する格納形式設定ステップと、
前記仮想テーブルの格納形式を前記格納形式設定ステップにおいて設定された格納形式に変更するように、前記仮想テーブルの内容を変更する格納形式変更ステップと、
を含むデータベース装置のデータ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、データベース装置およびそのデータ管理方法に関する。
【背景技術】
【０００２】
近年、データの格納や操作、検索を実現する情報管理技術として、データベースが利用されている。データベースには、さまざまなデータを管理し、常にユーザが快適に利用できるように、データベースを管理するデータベース管理システムが設けられている。
【０００３】
例えば、データベース管理システムは、データベースの利用方法や負荷分散などを監視するようになっており、利便性の改善を図るべく、様々なデータベース管理方法（データベース管理方式）が提案されている。具体的には、一般的に利用されているデータベース管理方式としてはリレーショナル型データベースが知られる一方、最近、キーバリュー型データベースも提案されるようになってきた。
【０００４】
ここで、この種のデータベース管理システムに関するものとして、データベース内のテーブルを複数のテーブルに分割して、その分割した複数の分割テーブルの配置をその分割テーブルに対するアクセス履歴に基づいて決定するデータベース装置に関するものが開示されている（例えば、特許文献１参照）。
【０００５】
ここで、最近提案されているキーバリュー型データベースには、２つの格納方式が想定されている。１つ目の格納方式は、１行１Ｖａｌｕｅ方式である。この１行１Ｖａｌｕｅ方式は、ハッシュ関数ｈを用いて、テーブル名と主キーをｋｅｙにする方式である。このデータの格納方式では、１つの行のデータを１つのＶａｌｕｅとしてまとめるように取り扱っている。
【０００６】
この場合、仮想テーブルにおける特定の列のデータを抜き出す操作ができず、ユーザが必要とするデータ以上の行全体のデータを転送することになるため、全体としてデータの転送量が多くなってしまうという問題がある。
【０００７】
また、２つ目の格納方式は、１セル１Ｖａｌｕｅ方式である。この１セル１Ｖａｌｕｅ方式は、ハッシュ関数ｈを用いて、テーブル名と主キーと列名とをｋｅｙにする方式である。このデータの格納方式では、セルの内容（１つのデータ）をＶａｌｕｅとしてまとめるように取り扱っている。
【０００８】
この場合、仮想テーブル（ハッシュ表）に対して行の挿入などを行う行単位操作では、列の数の分だけ仮想テーブルにアクセスする必要が生じるので仮想テーブルへのアクセス回数が多くなってしまうという問題がある。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００９−２８８９７９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
本発明が解決しようとする課題は、データベース管理システムのデータベースに構築される仮想テーブルに対するアクセス回数とテーブル入出力要求に対するデータ転送量を削減し、仮想テーブルに対するアクセス性能を改善するデータベース装置およびその管理方法を提供することにある。
【課題を解決するための手段】
【００１１】
本実施形態に係るデータベース装置は、データを格納する仮想テーブルに対するアプリケーションからの入出力要求を取得する入出力要求処理部と、前記入出力要求の履歴情報に基づいて、前記仮想テーブルが複数の列の組み合わせに分割されるように、前記仮想テーブルの格納形式を設定する格納形式設定部と、前記仮想テーブルの格納形式を前記格納形式設定部により設定された格納形式に変更するように、前記仮想テーブルの内容を変更する格納形式変更部と、を備える。
【図面の簡単な説明】
【００１２】
【図１】データベース管理システムにおけるテーブルの入出力の操作の種類を示した説明図。
【図２】本実施形態に係るＫＶＳサーバ（データベース装置）の概略動作を示した説明図。
【図３】仮想テーブルがＫｅｙ−Ｖａｌｕｅ記憶領域に１行１Ｖａｌｕｅ方式でデータを格納する例を示した説明図。
【図４】仮想テーブルがＫｅｙ−Ｖａｌｕｅ記憶領域に１セル１Ｖａｌｕｅ方式でデータを格納する例を示した説明図。
【図５】本実施形態に係るＫＶＳサーバを備えたデータベース管理システムを示す機能ブロック図。
【図６】本実施形態に係るＫＶＳサーバのハードウエアの構成を示したハードウエアブロック図。
【図７】本実施形態に係るＫＶＳサーバが、アプリケーションサーバから取得するテーブル入出力要求に基づいて、仮想テーブルの格納形式を変更する格納形式変更処理の全体動作を示したフローチャート。
【図８】本実施形態の履歴情報格納部が格納するアクセス履歴情報が蓄積されたアクセス履歴情報テーブルの一例を示した具体例。
【図９】テーブル入出力要求処理を行う処理の動作を示したフローチャート。
【図１０】予測利得計算処理を行う処理の動作を示したフローチャート。
【図１１】本実施形態に係る格納形式変更処理部の格納形式設定部が、集合Ｘから集合Ｙを抽出する過程における列の組み合わせごとの参照回数を示した説明図。
【図１２】第１の実施形態において、分割される仮想テーブル格納形式の列の組み合わせを示した説明図。
【図１３】仮想テーブル格納方式変更処理を行う処理の動作を示したフローチャート。
【図１４】第２の実施形態において、分割される仮想テーブル格納形式の列の組み合わせを示した説明図。
【発明を実施するための形態】
【００１３】
本実施形態に係るデータベース装置は、データを格納する仮想テーブルに対するアプリケーションからのテーブル入出力要求を取得する入出力要求処理部と、テーブル入出力要求のアクセス履歴情報に基づいて、仮想テーブルが複数の列の組み合わせに分割されるように、仮想テーブルの格納形式を設定する格納形式設定部と、仮想テーブルの格納形式を格納形式設定部により設定された格納形式に変更するように、仮想テーブルの内容を変更する格納形式変更部と、を備えるようになっている。
【００１４】
本実施形態に係るデータベース装置では、テーブル入出力要求のアクセス履歴情報に基づいて仮想テーブルを複数の列の組み合わせに分割し、その分割した複数の列の組み合わせに対応するように仮想テーブルの内容を変更することができるので、仮想テーブルに対するアクセス回数やデータ転送量を削減し、仮想テーブルに対するアクセス性能を改善することができる。
【００１５】
ここで、本実施形態に係るデータベース装置の機能を明確にするために、まず最初に、従来のデータベース管理システムにおけるテーブルの入出力の操作の種類について、説明する。
【００１６】
図１は、データベース管理システムにおけるテーブルの入出力の操作の種類を示した説明図である。
【００１７】
図１に示すように、データベース管理システムでは、単純な手法として、行単位操作とセル単位操作とが知られている。図１に示す単純な手法Ａは、行単位操作を示しており、行の挿入や更新を行うようになっている。一方、単純な手法Ｂは、セル単位操作を示しており、ある行における特定列（セル）の取得を行うようになっている。
【００１８】
図１の説明図では、行と列からテーブル（例えば、論理テーブル）が構成されており、このテーブルには、上から下の縦方向に向かって行が設けられるとともに、左から右の横方向に向かって列が設けられている。図１に示す単純な方法Ａでは、例えば、行１や行２など、行単位で操作を行うことを示している。一方、単純な方法Ｂでは、行４の列（ｃ４）などを指定することができることを示している。
【００１９】
一般的なデータベース管理システムでは、論理テーブルが格納されているデータベースにアクセスし、その論理テーブルに対してテーブル入出力要求を行うようになっている。なお、テーブル入出力要求とは、アプリケーションサーバのアプリケーションからデータベースに送られる、テーブル（例えば、論理テーブル）の操作を行うための要求のことをいう。
【００２０】
また、図１では、論理テーブルの下欄に、列のよく使う部分と、あまり使わない部分とが区別されている。これは、アプリケーションによって、よく使う列とあまり使われない列があることを示している。
【００２１】
また、本実施形態では、リレーショナル型データベースではなくＫＶＳ（Ｋｅｙ−Ｖａｌｕｅ Ｓｔｏｒｅ）型データベースを利用し、このＫＶＳ型データベース上に仮想的なテーブル（これを仮想テーブルという。）を実現するデータベース装置を提供することを目的としている。
【００２２】
ここで、Ｋｅｙ−Ｖａｌｕｅ Ｓｔｏｒｅとは、ＫｅｙとＶａｌｕｅのペアを単位として保存・検索を行う簡易データベース管理システムのことをいう。また、ＫＶＳ型データベースは、リレーショナル型データベースのようなテーブル構造ではなく、ＫＶＳ独自のインターフェースによりデータの入出力を行う、インメモリーハッシュ型Ｋｅｙ−Ｖａｌｕｅ Ｓｔｏｒｅを対象としている。
【００２３】
図２は、本実施形態に係るＫＶＳサーバ（データベース装置）２００の概略動作を示した説明図である。
【００２４】
図２に示すように、ＫＶＳサーバ２００は、クライアントから、所望するハッシュ値についてのテーブル入出力要求を受け付けるようになっている。具体的には、ＫＶＳサーバ２００は、一例としてＲＡＭ（Random Access Memory）で構成されるＫｅｙ−Ｖａｌｕｅ記憶領域２２０にハッシュ表（仮想テーブルと同等）を格納しており、入出力要求処理部２１０においてテーブル入出力要求を受け付けると、そのハッシュ表にアクセスする。例えば、入出力要求処理部２１０は、ハッシュ値ａに対応するＶａｌｕｅの出力要求を受け付けると、Ｖａｌｕｅ（すなわち“０”）をクライアントに返信する。
【００２５】
この場合、ＫＶＳサーバ２００の処理時間は、入出力要求処理部２１０からハッシュ表にアクセスするハッシュ表アクセス時間と、対応するＶａｌｕｅを送信バッファにコピーするデータ転送時間とによって決定される。すなわち、仮想テーブルの性能は、テーブル入出力要求１回あたりのハッシュ表にアクセスする時間と、テーブル入出力要求１回あたりの入出力を行う処理時間との和によって決定される。
【００２６】
ここで、仮想テーブルの性能を改善するために、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０に格納される仮想テーブルの処理時間について、仮想テーブルの格納方式ごとに説明する。
【００２７】
Ｋｅｙ-Ｖａｌｕｅ記憶領域２２０に格納される仮想テーブルには、格納方式として、１行１Ｖａｌｕｅ方式と、１セル１Ｖａｌｕｅ方式とが想定される。
【００２８】
図３は、仮想テーブルがＫｅｙ−Ｖａｌｕｅ記憶領域２２０（図２）に１行１Ｖａｌｕｅ方式でデータを格納する例を示した説明図である。
【００２９】
図３に示すように、図３（Ａ）に示す論理テーブルは、従業員ＩＤ（主キー）と、氏名と、住所と、所属との各欄を有している。図３（Ａ）の例では、３名の従業員にそれぞれ従業員ＩＤが割り当てられており、従業員それぞれの氏名、住所および所属が記載されている。
【００３０】
図３（Ｂ）に示すＫｅｙ−Ｖａｌｕｅ記憶領域２２０に格納される仮想テーブルは、Ｋｅｙの欄と、Ｖａｌｕｅの欄を有している。図３（Ｂ）の例では、図３（Ａ）に対応する従業員のそれぞれのデータが、Ｖａｌｕｅの欄に１行で記載されている。
【００３１】
１行１Ｖａｌｕｅ方式の仮想テーブルでは、ハッシュ関数ｈを用いて、ｈ（テーブル名、主キー）をＫｅｙにするようになっており、１行を１つのＶａｌｕｅとしてエンコードしてまとめるようになっている。
【００３２】
このため、例えば、各従業員の所属のデータが欲しい場合には、特定の列である所属の欄のみを抜き出す操作を行うことができず１行分のデータを読み出してしまうため、実際には必要のないデータを読み出すことになる。
【００３３】
したがって、１行１Ｖａｌｕｅ方式の仮想テーブルをＫｅｙ−Ｖａｌｕｅ記憶領域２２０に格納した場合には、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０からアプリケーション１１０に対して、データの転送量が多くなってしまうということが想定される。
【００３４】
図４は、仮想テーブルがＫｅｙ−Ｖａｌｕｅ記憶領域２２０（図２）に１セル１Ｖａｌｕｅ方式でデータを格納する例を示した説明図である。
【００３５】
図４に示すように、図４（Ａ）に示す論理テーブルは、図３（Ａ）の論理テーブルと同様に、従業員ＩＤ（主キー）と、氏名と、住所と、所属との各欄を有しており、３名の従業員それぞれの氏名、住所および所属が記載されている。
【００３６】
図４（Ｂ）に示すＫｅｙ−Ｖａｌｕｅ記憶領域２２０に格納される仮想テーブルは、Ｋｅｙの欄と、Ｖａｌｕｅの欄を有している。図４（Ｂ）の例では、図３（Ｂ）の仮想テーブルと同様に、Ｋｅｙによって対応づけられた図４（Ａ）に対応する従業員のそれぞれのデータが、１つのセルを構成するＶａｌｕｅの欄に記載されている。
【００３７】
１セル１Ｖａｌｕｅ方式の仮想テーブルでは、ハッシュ関数ｈを用いて、ｈ（テーブル名、主キー、列名）をＫｅｙにするようになっており、１セルの内容を１つのＶａｌｕｅとしてエンコードしてまとめるようになっている。
【００３８】
このため、例えば、各従業員のすべてのデータが欲しい場合には、行単位の操作となり、列数の数だけアクセスが必要となるため、図４（Ａ）の場合には、仮想テーブルに９回のアクセスが必要となる。
【００３９】
したがって、１セル１Ｖａｌｕｅ方式の仮想テーブルをＫｅｙ-Ｖａｌｕｅ記憶領域２２０に格納した場合には、仮想テーブル（ハッシュ表）へのアクセス回数が多くなってしまうということが想定される。
【００４０】
このようなことから、仮想テーブルの性能を改善するためには、格納方式ごとに発生する問題点を解消する必要があり、仮想テーブル（ハッシュ表）へのアクセス回数とデータ転送に伴うデータ転送量とを低減する必要がある。
【００４１】
そこで、本実施形態に係るＫＶＳサーバ２００は、データを格納する仮想テーブルに対するアプリケーションからの入出力要求を取得する入出力要求処理部２１０と、テーブル入出力要求の履歴情報に基づいて、仮想テーブルが複数の列の組み合わせに分割されるように、仮想テーブルの格納形式を設定する格納形式設定部と、仮想テーブルの格納形式を格納形式設定部により設定された格納形式に変更するように、仮想テーブルの内容を変更する格納形式変更部と、を備えるようになっている。
【００４２】
これにより、本実施形態に係るＫＶＳサーバ２００は、テーブル入出力要求のアクセス履歴情報に基づいて仮想テーブルを複数の列の組み合わせに分割し、その分割した複数の列の組み合わせに対応するように仮想テーブルの内容を変更することができるので、仮想テーブルに対するアクセス回数とデータ転送量に伴うアクセス性能を改善することができる。
【００４３】
なお、本実施形態では、仮想テーブルが複数の列に分割され、複数の列の組み合わせに対応するデータが互いに重複しない組み合わせにより分割されるように、仮想テーブルの格納形式を変更する実施形態を、第１の実施形態として説明する。また、仮想テーブルが複数の列に分割され、複数の列の組み合わせに対応するデータが一部に重複する組み合わせにより分割されるように、仮想テーブルの格納形式を変更する実施形態を、第２の実施形態として説明する。また、第１の実施形態と第２の実施形態が共通する構成および動作を説明する場合には、本実施形態として説明する。
【００４４】
（第１の実施形態）
図５は、本実施形態に係るＫＶＳサーバ（データベース装置）２００を備えたデータベース管理システム３００を示す機能ブロック図である。
【００４５】
図５に示すように、データベース管理システム３００は、アプリケーションサーバ１００と、ＫＶＳサーバ２００と、論理テーブル格納部３５０とを備えて構成されている。
【００４６】
アプリケーションサーバ１００は、ユーザからのリクエストを受け付けて、リクエストに応じたアプリケーションごとに対応したデータの取得要求（テーブル入出力要求）を、アプリケーション１１０を介してＫＶＳサーバ２００に送信するようになっている。
【００４７】
本実施形態に係るＫＶＳサーバ２００は、入出力要求処理部２１０、Ｋｅｙ-Ｖａｌｕｅ記憶領域２２０、履歴情報格納部２３０、格納形式変更処理部２４０および格納形式情報格納部２５０を備えて構成されている。
【００４８】
入出力要求処理部２１０は、データを格納する仮想テーブルに対するアプリケーションサーバ１００のアプリケーション１１０からのテーブル入出力要求（入出力要求）を取得する機能を有している。また、入出力要求処理部２１０は、仮想テーブルにおける複数の列の組み合わせのうち、テーブル入出力要求に応じた列の組み合わせを抽出し、その列の組み合わせに対応するデータを、アプリケーション１１０へ出力する機能を有している。
【００４９】
なお、本実施形態実施では、アプリケーション１１０からＫＶＳサーバ２００のＫｅｙ−Ｖａｌｕｅ記憶領域２２０に送信されるテーブル操作を行うための要求をテーブル入出力要求とし、アプリケーションサーバ１００からＫＶＳサーバ２００に対して、ＳＱＬ（Structured Query Language）と言われるデータベース操作言語によって行われるものとする。
【００５０】
Ｋｅｙ-Ｖａｌｕｅ記憶領域２２０は、メモリ（例えば、ＲＡＭなど）上にハッシュ表を構成することによって仮想テーブルを実現するデータベースである。本実施形態では、仮想テーブルは、保存したいＶａｌｕｅ（データ）に、識別するためのＫｅｙ（文字列や数値）が割り当てられ、ＫＶＳ型データベースに対応した仮想テーブルを構成するようになっている。
【００５１】
履歴情報格納部２３０は、アプリケーション１１０からのテーブル入出力要求のアクセス履歴情報（履歴情報）を蓄積するようになっている。
【００５２】
格納形式変更処理部２４０は、履歴情報格納部２３０に蓄積されたアクセス履歴情報に基づいて、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０に格納されている仮想テーブルの格納形式を変更し、仮想テーブルの内容を変更する機能を有している。
【００５３】
また、格納形式変更処理部２４０は、格納形式設定部２４２、利得計算部２４４および格納形式変更部２４６を備えて構成されている。
【００５４】
格納形式設定部２４２は、履歴情報格納部２３０に蓄積された入出力要求のアクセス履歴情報に基づいて、仮想テーブルが複数の列の組み合わせに分割されるように、仮想テーブルの格納形式を設定する機能を有している。
【００５５】
利得計算部２４４は、格納形式設定部２４２により設定された格納形式に変更する前後において、テーブル入出力要求に応じた列の組み合わせにより、その列の組み合わせに対応するデータにアクセスする際の性能改善によって得られる利得を算出する機能を有している。また、利得計算部２４４は、その算出した利得と、その列の組み合わせに対応するデータへのアクセス回数の増加による損失とから算出される予測利得を、算出するようにしてもよい。また、利得計算部２４４は、仮想テーブルの格納形式を変更する際に要する時間的なコスト（これを変更コストともいう。）を算出する機能をさらに有するようにしてもよい。
【００５６】
この場合、利得計算部２４４が、利得、予測利得および時間的なコストを算出することにより、格納形式変更処理部２４０は、予測利得が時間的なコストを上回る場合は、仮想テーブルの格納形式を変更することができる。なお、本実施形態では、利得計算部２４４は、任意の構成要素であり、利得、予測利得または時間的なコストを算出する方法は、特に限定されるものではない。
【００５７】
格納形式変更部２４６は、仮想テーブルの格納形式を格納形式設定部２４２により設定された格納形式に変更するように、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０に格納されている仮想テーブルの内容（データ）を変更する機能を有している。
【００５８】
格納形式情報格納部２５０は、仮想テーブルの格納形式を示す仮想テーブル格納形式情報を格納している。
【００５９】
論理テーブル格納部３５０は、例えば、行と列とから構成されたデータを格納する論理テーブル（図１参照）を備えている。論理テーブル格納部３５０は、ＫＶＳサーバ２００と通信可能に接続されており、必要に応じて、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０の仮想テーブルとデータのやり取りを行うことができるものとする。なお、論理テーブル格納部３５０は、データベース管理システム３００内に独立して設けられる必要はなく、例えば、アプリケーションサーバ１００やＫＶＳサーバ２００に設けられていてもよい。
【００６０】
なお、本実施形態では、Ｋｅｙ-Ｖａｌｕｅ記憶領域２２０は、論理テーブル格納部３５０に格納されている論理テーブルを、初期値として１行１Ｖａｌｕｅ方式で有しているものとする。
【００６１】
以上説明したように、本実施形態に係るＫＶＳサーバ２００は、テーブル入出力要求のアクセス履歴情報に基づいて、仮想テーブルを複数の列の組み合わせに分割し、その分割した複数の列の組み合わせに対応するように仮想テーブルの内容を変更することができるので、仮想テーブルに対するアクセス回数やデータ転送量に伴うアクセス性能を改善することができる。
【００６２】
次に、本実施形態に係るＫＶＳサーバ２００のハードウエアの構成について、説明する。
【００６３】
図６は、本実施形態に係るＫＶＳサーバ２００のハードウエアの構成を示したハードウエアブロック図である。
【００６４】
図６に示すように、ＫＶＳサーバ２００は、ＣＰＵ（Central Processing Unit）２６０、ＲＯＭ（Read Only Memory）２６２、ＲＡＭ２６４、ネットワークインターフェース部２６６、操作入力部２６８、表示部２７０、記憶部２７２および内部バス２７４などを備えて構成されている。
【００６５】
ＣＰＵ２６０は、ＲＯＭ２６２に格納されている各種プログラムをＲＡＭ２６４にロードして、そのプログラムを展開することにより、各種プログラムの機能を実現することできる。ＲＡＭ２６４は、ワークエリア（作業用メモリ）として利用されるようになっている。ＲＯＭ２６２は、各種プログラムを格納するようになっている。ＲＯＭ２６２に格納されている各種プログラムには、図５で示した各種機能を実現するためのプログラムが含まれる。
【００６６】
ネットワークインターフェース部２６６は、ネットワーク（図示せず）を介して、アプリケーションサーバ１００のアプリケーション１１０からテーブル入出力要求を取得したり、アプリケーション１１０にデータを返信するためのインターフェース部である。
【００６７】
操作入力部２６８は、アプリケーションサーバ１００をＫＶＳサーバ２００に登録するための設定登録を行ったり、アプリケーション１１０からのテーブル入出力要求に対し、適宜、ソースプログラムを編集するための入力装置である。なお、この操作入力部２６８は、キーボードやマウスなどにより構成されている。
【００６８】
表示部２７０は、履歴情報格納部２３０に格納されたアクセス履歴情報を表示したり、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０（図２や図５を参照）に格納されている仮想テーブルの内容を表示するための表示装置である。なお、この表示部は、液晶ディスプレイやモニタなどにより構成されている。
【００６９】
記憶部２７２は、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０（図２や図５を参照）を構成する記憶領域であり、ＲＡＭなどにより構成されている。
【００７０】
内部バス２７４は、ＣＰＵ２６０がＫＶＳサーバ２００全体を統括制御するように、各構成要素に接続されている。
【００７１】
（格納形式変更処理）
次に、本実施形態に係るＫＶＳサーバ２００が、アプリケーションサーバ１００から取得するテーブル入出力要求に基づいて、データを格納する仮想テーブルの格納形式を変更する格納形式変更処理について、図５を参照しながら説明する。
【００７２】
図７は、本実施形態に係るＫＶＳサーバ２００が、アプリケーションサーバ１００から取得するテーブル入出力要求に基づいて、仮想テーブルの格納形式を変更する格納形式変更処理の全体動作を示したフローチャートである。なお、図７において、Ｓに数字を付した符号は、フローチャートの各ステップを示している。
【００７３】
まず、ＫＶＳサーバ２００は、入出力要求処理部２１０において、アプリケーションサーバ１００から送信されたテーブル入出力要求を取得し、テーブル入出力要求処理を実行する（ステップＳ００１）。
【００７４】
入出力要求処理部２１０は、アプリケーションサーバ１００から取得したテーブル入出力要求に基づいて、アクセス履歴情報を履歴情報格納部２３０に格納し、蓄積する（ステップＳ００３）。
【００７５】
図８は、本実施形態の履歴情報格納部２３０が格納するアクセス履歴情報が蓄積されたアクセス履歴情報テーブルの一例を示した具体例である。
【００７６】
図８に示すように、アクセス履歴情報テーブルには、番号と、列の組み合わせｖと、Ａと、Ｓ１と、Ｓ２と、Ｒとの各欄が設けられている。
【００７７】
図８に示すアクセス履歴情報テーブルにおいて、列の組み合わせｖは、仮想テーブルを参照した列の組み合わせ（単に組み合わせということもある。）を示している。Ａは、列の組み合わせｖを参照した回数を示している。Ｓ１は、行全体を転送した場合の転送量の累積量（累積データ転送量）を示している。Ｓ２は、その列の組み合わせｖを参照したデータ量の累積量（累積参照データ量）を示している。Ｒは、行単位操作の回数を示している。
【００７８】
なお、行単位操作の回数を示すＲは、列の挿入・更新の回数Ｒ１と、一行分を参照した回数Ｒ２との和とする。また、行単位操作の回数Ｒは、参照した列の組み合わせに関係なく、アクセス履歴情報全体で１つのデータを共有するものとする。
【００７９】
また、列の組み合わせｖは、実際に発生したアクセス履歴情報について保存されるものとし、列の組み合わせの数が複数になった場合は、所定の閾値を設けるなどにより、組み合わせの数を制限するようにしてもよい。
【００８０】
図８に示すアクセス履歴情報テーブルには、番号１のアクセス履歴情報として、列の組み合わせｖの欄に（ｃ１、ｃ３、ｃ５）が記載され、Ａ［回］の欄に１，０００，０００が記載され、Ｓ１の欄に８００ＭＢが記載され、Ｓ２の欄に２４０ＭＢが記載され、Ｒの欄に１が記載されている。
【００８１】
また、このアクセス履歴情報テーブルには、番号２のアクセス履歴情報として、列の組み合わせｖの欄に（ｃ２、ｃ４）が記載され、Ａ［回］の欄に１，０００，０００が記載され、Ｓ１の欄に８００ＭＢが記載され、Ｓ２の欄に１６０ＭＢが記載され、Ｒの欄に１が記載されている。
【００８２】
また、このアクセス履歴情報テーブルには、番号３のアクセス履歴情報として、列の組み合わせｖの欄に（ｃ１,・・・ｃ１０）が記載され、Ａ［回］の欄に１が記載され、Ｓ１の欄に８００バイトが記載され、Ｓ２の欄に８００バイトが記載され、Ｒの欄に１が記載されている。
【００８３】
ここで、１セルあたりのデータ量は、８０バイトとし、１行には、ｃ１からｃ１０の１０個の列（セル）が設けられているものとする。この場合、１レコード（１行あたりのデータ量）は、８００バイトとなる。また、テーブル行数Ｎは、１，０００，０００行（この場合の仮想テーブル全体のデータ量は、８００ＭＢとなる。）とする。
【００８４】
この場合、番号１に示す列の組み合わせ（ｃ１、ｃ３、ｃ５）は、「ＳＥＬＥＣＴ  ｃ１、ｃ３、ｃ５  ＦＲＯＭ  ｔ１」を実行したものであり、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０の仮想テーブルの参照回数Ａ［回］は、１，０００，０００であり、行全体の累積データ転送量Ｓ１は、８００ＭＢであり（Ａ×８００バイト）、累積参照データ量Ｓ２は、２４０ＭＢであり（Ａ×２４０バイト）、行単位操作の回数Ｒは、履歴情報全体で共有していることを示している。
【００８５】
また、番号２に示す列の組み合わせ（ｃ２、ｃ４）は、「ＳＥＬＥＣＴ  ｃ２、ｃ４  ＦＲＯＭ  ｔ１」を実行したものであり、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０の仮想テーブルの参照回数Ａ［回］は、１，０００，０００であり、行全体の累積データ転送量Ｓ１は、８００ＭＢであり（Ａ×８００バイト）、累積参照データ量Ｓ２は、１６０ＭＢであり（Ａ×１６０バイト）、行単位操作の回数Ｒは、履歴情報全体で共有していることを示している。
【００８６】
また、番号３に示す列の組み合わせ（ｃ１,・・・ｃ１０）は、「ＩＮＳＥＲＴ  ＩＮＴＯ  ｔ１  ＶＡＬＵＥＳ（ｃ１・・・ｃ１０）」を実行したものであり、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０の仮想テーブルの参照回数Ａ［回］は、１回であり、行全体の累積データ転送量Ｓ１は、８００バイトであり、累積参照データ量Ｓ２は、８００バイトであり、行単位操作の回数Ｒは、履歴情報全体で共有していることを示している。
【００８７】
図７のフローチャートに戻り、格納形式変更処理部２４０の格納形式設定部２４２は、定期的に所定の一定時間が経過したか否かを判定しており（ステップＳ００５）、所定の一定時間が経過した場合には（ステップＳ００５のＹｅｓ）、履歴情報格納部２３０からアクセス履歴情報を読み出す（ステップＳ００７）。
【００８８】
一方、所定の一定時間が経過していない場合には（ステップＳ００５のＮｏ）、所定の一定時間が経過するまでアクセス履歴情報を蓄積する（ステップＳ００３）。
【００８９】
格納形式変更処理部２４０の利得計算部２４４は、予測利得計算処理を実行して、予測利得と変更コストを計算する（ステップＳ００９）。
【００９０】
格納形式変更処理部２４０は、利得計算部２４４で計算された予測利得と変更コストとを比較して（ステップＳ０１１）、予測利得が変更コストを上回る場合には（ステップＳ０１１のＹｅｓ）、格納形式変更部２４６において、仮想テーブル格納形式変更処理を実行する（ステップＳ０１３）。
【００９１】
一方、利得計算部２４４で計算された予測利得と変更コストとを比較して（ステップＳ０１１）、予測利得が変更コストを上回らない場合（すなわち予測利得が変更コスト以下の場合）には（ステップＳ０１１のＮｏ）、ステップＳ００１に戻り、格納形式変更処理部２４０は、処理を継続する。
【００９２】
格納形式変更処理部２４０は、格納形式変更部２４６において、仮想テーブル格納形式変更処理が終了すると（ステップＳ０１３）、その仮想テーブルの格納形式が変更されたことを示す仮想テーブル格納形式情報を格納形式情報格納部２５０に送出して、格納形式情報格納部２５０の仮想テーブル格納形式情報を更新して（ステップＳ０１５）、終了する。
【００９３】
以上説明したように、本実施形態に係るＫＶＳサーバ２００は、テーブル入出力要求のアクセス履歴情報に基づいて、仮想テーブルを複数の列の組み合わせに分割し、その分割した複数の列の組み合わせに対応するように仮想テーブルの内容を変更することができるので、仮想テーブルに対するアクセス回数やデータ転送によるアクセス性能を改善することができる。
【００９４】
（テーブル入出力要求処理）
次に、図７で示したステップＳ００１のテーブル入出力要求処理について、図５を参照しながら説明する。テーブル入出力処理は、ＫＶＳサーバ２００の入出力要求処理部２１０が行う。
【００９５】
図９は、テーブル入出力要求処理を行う処理の動作を示したフローチャートである。
【００９６】
ＫＶＳサーバ２００の入出力要求処理部２１０は、アプリケーションサーバ１００のアプリケーション１１０から仮想テーブルのテーブル入出力要求を受け付けると（ステップＳ００１）、格納形式情報格納部２５０から仮想テーブル格納形式情報を読み出す（ステップＳ１０１）。なお、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０には、初期値は１行１Ｖａｌｕｅ方式で仮想テーブルが格納されているため、仮想テーブル格納形式情報にも、初期値は１行１Ｖａｌｕｅ方式で格納されている旨が記載されている。
【００９７】
Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０に格納されている仮想テーブルは、初期値は１行１Ｖａｌｕｅ方式で格納されているため、最初は仮想テーブルは分割されておらず（ステップＳ１０３のＮｏ）、入出力要求処理部２１０は、アプリケーション１１０からのテーブル入出力要求が行単位操作か否かを判定し（ステップＳ１０５）、行単位操作によるテーブル入出力要求の場合には（ステップＳ１０５のＹｅｓ）、Ｋｅｙ-Ｖａｌｕｅ記憶領域２２０に格納された仮想テーブルのＶａｌｕｅの一行に含まれる全てのデータを読み出し、行単位操作を実行する（読み出した全てのデータをアプリケーション１１０に送信する）（ステップＳ１０７）。
【００９８】
一方、アプリケーション１１０からのテーブル入出力要求が行単位操作でない場合には（ステップＳ１０５のＮｏ）、入出力要求処理部２１０は、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０の仮想テーブルから読み出したデータに対し、アプリケーション１１０から要求された列の組み合わせのデータを取得して、アプリケーション１１０にその取得したデータを出力する（これを結果行の作成という。）（ステップＳ１０９）。
【００９９】
例えば、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０の仮想テーブルには、列がｃ１からｃ１０まで格納されていたとする。そして、アプリケーション１１０からのテーブル入出力要求が、列の組み合わせ（ｃ１、ｃ３、ｃ５）であった場合は、入出力要求処理部２１０は、列の組み合わせ（ｃ１、ｃ３、ｃ５）のデータをアプリケーション１１０に送信するとともに、列の組み合わせ（ｃ１、ｃ３、ｃ５）の要求があったことを示す結果行（ｃ１、ｃ３、ｃ５）を作成する。
【０１００】
これに対し、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０に格納されている仮想テーブルが更新され、すでに分割されている場合には（ステップＳ１０３のＹｅｓ）、入出力要求処理部２１０は、必要な列の組み合わせの決定を実行する（ステップＳ１１１）。
【０１０１】
例えば、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０の仮想テーブルの列の組み合わせが、組み合わせ（ｃ１、ｃ３、ｃ５）、組み合わせ（ｃ２、ｃ４）、組み合わせ（ｃ６、ｃ７、ｃ８、ｃ９）に分割されていたとする。この場合において、アプリケーション１１０からのテーブル入出力要求が列の組み合わせ（ｃ１、ｃ３、ｃ５）の場合、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０から列の組み合わせ（ｃ１、ｃ３、ｃ５）を読み出し、列の組み合わせ（ｃ１、ｃ３、ｃ５）に対応するデータをアプリケーション１１０に返信する決定を行う。
【０１０２】
また、アプリケーション１１０からのテーブル入出力要求の列の組み合わせが、組み合わせ（ｃ１、ｃ３）の場合には、入出力要求処理部２１０は、列の組み合わせ（ｃ１、ｃ３、ｃ５）からテーブル入出力要求の列の組み合わせ（ｃ１、ｃ３）のデータを取得して、アプリケーション１１０に返信する決定を行う。
【０１０３】
また、アプリケーション１１０からのテーブル入出力要求の列の組み合わせが、組み合わせ（ｃ１、ｃ２）の場合には、入出力要求処理部２１０は、列の組み合わせ単位でしかデータを取得することができないので、「列の組み合わせの組み合わせ」を求めるようになっている。具体的には、入出力要求処理部２１０は、列の組み合わせ（ｃ１、ｃ３、ｃ５）と列の組み合わせ（ｃ２、ｃ４、ｃ１０）のデータを、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０の仮想テーブルから取得してこの和集合を取った後、組み合わせ（ｃ１、ｃ２）のデータを取得する。入出力要求処理部２１０は、このように「列の組み合わせの組み合わせ」を求めて、必要な列の組み合わせの決定を行う。
【０１０４】
入出力要求処理部２１０は、決定した列の組み合わせに基づいて、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０の仮想テーブルに対してセル単位操作を行うことにより、テーブル入出力要求を受け付けた列の組み合わせのデータをアプリケーション１１０に送信する（ステップＳ１１３）。
【０１０５】
入出力要求処理部２１０は、テーブル入出力要求を受け付けた列の組み合わせの全てのデータをＫｅｙ−Ｖａｌｕｅ記憶領域２２０の仮想テーブルから読み出し、アプリケーション１１０にデータの送信が全て完了したか否かを判定しており（ステップＳ１１５）、アプリケーション１１０にデータの送信が全て完了した場合には（ステップＳ１１５のＹｅｓ）、結果行の作成を行う（ステップＳ１１７）。
【０１０６】
例えば、入出力要求処理部２１０は、アプリケーション１１０からテーブル入出力要求の列の組み合わせが、組み合わせ（ｃ１、ｃ６）の場合、列の組み合わせ（ｃ１、ｃ６）の結果行を作成し、また、テーブル入出力要求の組み合わせが、列の組み合わせ（ｃ４、ｃ８、ｃ９）の場合には、列の組み合わせ（ｃ４、ｃ８、ｃ９）の結果行を作成する。
【０１０７】
入出力要求処理部２１０は、作成した結果行をアクセス履歴情報として履歴情報格納部２３０に送出し（ステップＳ１１９）、履歴情報格納部２３０にそのアクセス履歴情報を蓄積させ（図７のステップＳ００３）、テーブル入出力要求処理を終了する。
【０１０８】
以上説明したように、本実施形態に係るＫＶＳサーバ２００は、アプリケーションサーバ１００からのテーブル入出力要求に基づいて、行単位操作またはセル単位操作を行い、テーブル入出力要求に対応する列の組み合わせのデータをアプリケーションサーバ１００に送信することができる。
【０１０９】
（予測利得計算処理）
次に、図７で示したステップＳ００９の予測利得計算処理について、図５を参照しながら説明する。予測利得計算処理は、ＫＶＳサーバ２００の格納形式変更処理部２４０が行う。
【０１１０】
図１０は、予測利得計算処理を行う処理の動作を示したフローチャートである。
【０１１１】
ＫＶＳサーバ２００の格納形式変更処理部２４０は、履歴情報格納部２３０からアクセス履歴情報を取得し、そのアクセス履歴情報に基づいて、格納形式設定部２４２において、列の組み合わせｖを参照した回数Ａが０より大きい組み合わせ集合Ｘから集合Ｙを抽出する（ステップＳ２０１）。
【０１１２】
図１１は、本実施形態に係る格納形式変更処理部２４０の格納形式設定部２４２が、集合Ｘから集合Ｙを抽出する過程における列の組み合わせｖごとの参照回数Ａ［回］を示した説明図である。
【０１１３】
例えば、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０の仮想テーブルは、ｃ１からｃ１０までの列を有し、１００行の行（図１参照）を有していたとする。
【０１１４】
この場合において、履歴情報格納部２３０から取得したアクセス履歴情報は、１００行の全ての行に対して、「ＳＥＬＥＣＴ  ｃ１、ｃ３  ＦＲＯＭ  ｔ１」を１０００回実行し、「ＳＥＬＥＣＴ  ｃ１、ｃ４  ＦＲＯＭ  ｔ１」を６００回実行し、「ＳＥＬＥＣＴ  ｃ５、ｃ６  ＦＲＯＭ  ｔ１」を６００回実行し、「ＳＥＬＥＣＴ  ＊  ＦＲＯＭ  ｔ１」を１０回実行した内容であったとする。なお、「＊」は、ｃ１からｃ１０までの全ての列にアクセスすることを意味する。
【０１１５】
この場合の集合Ｘは、｛（ｃ１、ｃ３）、（ｃ１、ｃ４）、（ｃ５、ｃ６）、（ｃ１、ｃ２、ｃ３、ｃ４、ｃ５、ｃ６、ｃ７、ｃ８、ｃ９、ｃ１０）｝となる。
【０１１６】
図１１に示すように、列の組み合わせｖの（ｃ１、ｃ３）の参照回数Ａ［回］は、１００，０００［回］であり、列の組み合わせ（ｃ１、ｃ４）の参照回数Ａ［回］は、６０，０００［回］であり、列の組み合わせ（ｃ５、ｃ６）の参照回数Ａ［回］は、６０，０００［回］であり、列の組み合わせ（ｃ１、ｃ２、ｃ３、ｃ４、ｃ５、ｃ６、ｃ７、ｃ８、ｃ９、ｃ１０）の参照回数Ａ［回］は、１，０００［回］である。そして、この場合の参照回数Ａの合計は、２２１，０００回となる。
【０１１７】
ここで、例えば、列の組み合わせｖの平均参照回数を基準に、集合Ｘから集合Ｙを抽出する場合を考える。
【０１１８】
まず、一例として、この４つの組み合わせの平均参照回数を算出すると、２２１，０００／４＝５５，２５０回となる。したがって、平均参照回数以上の組み合わせを抽出すると、集合Ｙは、Ｙ＝｛（ｃ１、ｃ３）、（ｃ１、ｃ４）、（ｃ５、ｃ６）｝となる。
【０１１９】
なお、集合Ｙの抽出方法はこれに限定されるものではなく、アクセス履歴情報テーブル（図８）に記載された全ての列の組み合わせｖについて集合Ｙを抽出してもよく、また、参照回数Ａ［回］のうち、上位１０％を対象とする集合Ｙを抽出するようにしてもよい。
【０１２０】
次に、格納形式設定部２４２は、抽出した集合Ｙから、仮想テーブル格納形式Ｗを作成する（ステップＳ２０３）。
【０１２１】
第１の実施形態では、格納形式設定部２４２は、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０の仮想テーブルの格納形式が、複数の列の組み合わせに対応するデータが互いに重複しない組み合わせにより分割されるように、仮想テーブルの格納形式Ｗを作成する。そのため、集合Ｙにおいてデータの重複がある組み合わせを結合するように、仮想テーブル格納形式Ｗを構成する。
【０１２２】
例えば、集合Ｙの要素である列の組み合わせｖ１、ｖ２があった場合、これらの和集合を取り、ｖ１∩ｖ２が空でない場合は、ｖ１∪ｖ２を集合Ｙに入れ、重複する列を集合Ｙから取り除く。そして、集合Ｙが収束した集合を、仮想テーブル格納形式Ｗとする。
【０１２３】
図１１の例では、列の組み合わせ（ｃ１、ｃ３）と（ｃ１、ｃ４）について、和集合を取り、組み合わせて（ｃ１、ｃ３、ｃ４）を作成する。また、ｃ１、ｃ３、ｃ４、ｃ５、ｃ６以外の列を新たな１つの組み合わせとする。この結果、仮想テーブル格納形式Ｗは、Ｗ＝｛（ｃ１、ｃ３、ｃ４）、（ｃ５、ｃ６）、（ｃ２、ｃ７、ｃ８、ｃ９、ｃ１０）｝となる。
【０１２４】
図１２は、第１の実施形態において、分割される仮想テーブル格納形式の列の組み合わせを示した説明図である。
【０１２５】
図１２に示すように、仮想テーブル格納方式Ｗは、分割前は、１行１Ｖａｌｕｅ方式でデータが格納されていたが、分割後は、Ｗ＝｛（ｃ１、ｃ３、ｃ４）、（ｃ５、ｃ６）、（ｃ２、ｃ７、ｃ８、ｃ９、ｃ１０）｝の３つの列の組み合わせに分割されて構成されている。すなわち、図１２では、格納形式設定部２４２（図５）が、１行１Ｖａｌｕｅ方式によって構成されていた仮想テーブル（Ｋ，Ｖ）を、３つの列の組み合わせ（（Ｋ１、Ｖ１）、（Ｋ２、Ｖ２）、（Ｋ３、Ｖ３））に分割することを示している。
【０１２６】
格納形式設定部２４２が仮想テーブル格納形式Ｗを作成すると、利得計算部２４４（図５）は、作成した列の組み合わせｖの中から、所望の列の組み合わせの１つを抽出する（ステップＳ２０５）。そして、利得計算部２４４は、その抽出した列の組み合わせｖについて利得計算を行う（ステップＳ２０７）。
【０１２７】
例えば、利得計算部２４４は、列の組み合わせｖについて、その組み合わせｖに分割した場合のデータ転送量削減による利得Ｑ［ｖ］を計算する。この場合の利得Ｑ［ｖ］は、次式で表される。
【０１２８】
［数１］
利得Ｑ［ｖ］＝（Ｓ１−Ｓ２）／α    （秒）                ・・・（１）
【０１２９】
なお、（Ｓ１−Ｓ２）は、アクセス履歴情報に基づいて、列の組み合わせｖに分割した場合にデータ転送量を削減できることを示すデータ量を示しており、また、αは、メモリスループットを示している。
【０１３０】
利得計算部２４４は、抽出した列の組み合わせの利得計算が終了すると、他の列の組み合わせについても同様に利得計算を行い、全ての列の組み合わせについて利得計算を実行したか否かの判定を行う（ステップＳ２０９）。利得計算部２４４は、全ての列の組み合わせについて利得計算が終わっていない場合には（ステップＳ２０９のＮｏ）、ステップＳ２０７に戻って、その利得計算が終わっていない列の組み合わせについて利得計算を行う一方、全ての利得計算が終わった場合に（ステップＳ２０９のＹｅｓ）、予測利得と変更コストを計算する（ステップＳ２１１）。
【０１３１】
ここで、格納形式変更部２４６がＫｅｙ−Ｖａｌｕｅ記憶領域２２０の仮想テーブルを分割すると、入出力要求処理部２１０がＫｅｙ−Ｖａｌｕｅ記憶領域２２０の仮想テーブルにアクセスするアクセス回数が増加することが想定される。そのため、利得計算部２４４は、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０の仮想テーブルへのアクセス回数の増加による損失を求め、数式（１）の利得からその損失を引き、次式を用いて予測利得Ｐ（Ｗ）を算出する。
【０１３２】
［数２］
予測利得Ｐ（Ｗ）＝ΣＱ［ｖ］−ｋＲβ    （秒）            ・・・（２）
【０１３３】
なお、集合Ｗの要素数をｋ、ハッシュ表アクセス時間（仮想テーブルにアクセスする時間）をβとする。
【０１３４】
次に、利得計算部２４４は、仮想テーブル格納形式を集合Ｗに分割（変更）する操作に必要な変更コスト（前述した時間的なコストのことを示す。）を算出する。仮想テーブル格納方式変更処理は、仮想テーブルの分割方法に依存するため、分割方法によっては変更コストの計算方法が異なる。
【０１３５】
例えば、図１２では、分割前は、仮想テーブルにおいて１行１Ｖａｌｕｅ方式によってデータが格納されていたが（Ｋ、Ｖ）、分割後は、３つの列の組み合わせ（（Ｋ１、Ｖ１）、（Ｋ２、Ｖ２）、（Ｋ３、Ｖ３））に分割（変更）されている。
【０１３６】
この場合、仮想テーブル格納形式の変更に必要な変更コストＣ（Ｗ）は、次式で表される。
【０１３７】
［数３］
変更コストＣ（Ｗ）＝２Ｄ／α＋（２＋ｋ）Ｎβ            ・・・（３）
【０１３８】
ここで、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０のデータ量は、キーの分だけ増加するが、行データに比べて十分小さいと考えることができる。また、（２＋ｋ）Ｎは、仮想テーブルへのアクセス回数を示しており、仮想テーブルへの操作により、ＧＥＴ文１回、ＳＥＴ文ｋ回、ＲＥＭＯＶＥ文１回から導かれる。また、２Ｄ／αは、テーブルのデータ量Ｄ×２により算出される。
【０１３９】
このように、利得計算部２４４は、予測利得と変更コストを計算すると、予測利得計算処理を終了し、計算された予測利得が、変更コストを上回るか否かを格納形式変更処理部２４０に判定させる（図７のステップＳ０１１）。
【０１４０】
以上説明したように、本実施形態に係るＫＶＳサーバ２００は、格納形式変更処理部２４０の利得計算部２４４において、利得を計算するだけでなく、予測利得や変更コストを計算することもできるので、格納形式変更処理部２４０は、予測利得が変更コストを上回るか否かを判定することができる。
【０１４１】
これにより、本実施形態に係るＫＶＳサーバ２００は、格納形式変更処理部２４０において、予測利得が変更コストを上回ると判定した場合は、仮想テーブルの格納形式を変更することができるので、仮想テーブルの格納方式を変更することにより利益を得ることができることを判定した上で、仮想テーブルの格納形式を変更することができる。
【０１４２】
なお、本実施形態では、予測利得と変更コストの計算を格納形式変更処理部２４０の利得計算部２４４において行ったが、これに限定されるものではない。例えば、格納形式設定部２４２が利得計算部２４４から利得を取得して、格納形式設定部２４２において予測利得と変更コストの計算を行うようにしてもよい。
【０１４３】
（仮想テーブル格納形式変更処理）
次に、図７で示したステップＳ０１３の仮想テーブル格納方式変更処理について、図５および図６を参照しながら説明する。仮想テーブル格納形式変更処理は、ＫＶＳサーバ２００の格納形式変更処理部２４０が行う。
【０１４４】
図１３は、仮想テーブル格納方式変更処理を行う処理の動作を示したフローチャートである。
【０１４５】
ＫＶＳサーバ２００の格納形式変更処理部２４０は、予測利得が変更コストを上回る場合において（図７のステップＳ０１１のＹｅｓ）、ＣＰＵ２６０の使用率に余裕があるか否かを判定する（ステップＳ３０１）。例えば、ＣＰＵ２６０のＣＰＵ使用率が３０％未満の場合には、ＣＰＵ使用率に余裕があると判定する。
【０１４６】
ＣＰＵ２６０のＣＰＵ使用率に余裕があると判定した場合には（ステップＳ３０１のＹｅｓ）、格納形式変更処理部２４０の格納形式変更部２４６は、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０から初期値である１行１Ｖａｌｕｅのデータ（行データ）を取得する（ステップＳ３０３）。なお、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０に１行１Ｖａｌｕｅのデータがない場合には、外部の論理テーブル格納部３５０から論理テーブルの行データを取得するようにしてもよい。
【０１４７】
一方、ＣＰＵ２６０のＣＰＵ使用率に余裕がないと判定した場合には（ステップＳ３０１のＮｏ）、格納形式変更処理部２４０は、ＣＰＵ使用率が低下するまで待ち受ける。この場合、例えば、５分ごとや１０分ごとなど定期的にＣＰＵ２６０のＣＰＵ使用率を監視することが望ましい。
【０１４８】
格納形式変更処理部２４０の格納形式変更部２４６は、図１０のステップＳ２０３で作成した仮想テーブル格納形式Ｗの列の組み合わせに従って、仮想テーブルの格納形式を変更する（ステップＳ３０５）。具体的には、図１２のように、格納形式変更部２４６は、仮想テーブル格納方式Ｗ＝｛（ｃ１、ｃ３、ｃ４）、（ｃ５、ｃ６）、（ｃ２、ｃ７、ｃ８、ｃ９、ｃ１０）｝の列の組み合わせに従って、仮想テーブルの内容（データ）を変更する。
【０１４９】
格納形式変更部２４６は、変更した仮想テーブルの内容をＫｅｙ−Ｖａｌｕｅ記憶領域２２０（すなわち、データベースのことである。）に格納する（ステップＳ３０７）。
【０１５０】
格納形式変更部２４６は、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０に仮想テーブルのデータの格納が全ての行について終わったか否かを判定しており（ステップＳ３０９）、全ての行について仮想テーブルのデータの格納が終わった場合は（ステップＳ３０９のＹｅｓ）、仮想テーブル格納形式情報を更新し（ステップＳ３１１）、仮想テーブル格納形式変更処理を終了するとともに、格納形式情報格納部２５０に格納されている仮想テーブル格納形式情報を更新する（図７のステップＳ０１５）。
【０１５１】
以上説明したように、本実施形態に係るＫＶＳサーバ２００は、決定した仮想テーブルの分割を、ＣＰＵ２６０のＣＰＵ使用率に余裕があるときに行うことができる。
【０１５２】
これにより、本実施形態に係るＫＶＳサーバ２００は、自装置に負荷を掛けることなくＫｅｙ-Ｖａｌｕｅ記憶領域２２０の仮想テーブルの格納形式を変更することができる。
【０１５３】
ところで、本実施形態に係るＫＶＳサーバ２００の格納形式変更処理部２４０は、利得計算部２４４を備えることにより、仮想テーブルの格納形式を変更する前後において、その列の組み合わせに対応するデータにアクセスする際の性能改善によって得られる利得、そのデータへのアクセス回数の増加による損失とから算出される予測利得および仮想テーブルの格納形式を変更する際に要する変更コストを算出していた。
【０１５４】
ここで、格納形式変更処理部２４０による予測利得と変更コストとの具体例について、説明する。なお、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０の仮想テーブルの一行に８０バイトのセルが１０個設けられている場合を想定し、１レコードは、８００バイトとする。また、仮想テーブルのテーブル行数Ｎは、Ｎ＝１,０００,０００行の場合を想定し、仮想テーブルは、８００ＭＢとする。
【０１５５】
また、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０の仮想テーブルに対し、「ＳＥＬＥＣＴ  ｃ１、ｃ３、ｃ５  ＦＲＯＭ  ｔ１」が所定期間内に１００回実行され、仮想テーブル格納形式Ｗは、Ｗ＝｛（ｃ１、ｃ３、ｃ５）、（ｃ２、ｃ４ｃ６、ｃ７、ｃ８、ｃ９、ｃ１０）｝に変更すれば良いことが分かったとする。また、行単位操作Ｒは所定期間中に１０Ｎ回発生し、平均メモリスループットは１ＧＢ／ｓ、平均ハッシュ表アクセス時間は３００ｎｓとする。
【０１５６】
この場合において、仮想テーブル格納形式Ｗは、Ｗ＝｛（ｃ１、ｃ３、ｃ５）、（ｃ２、ｃ４、ｃ６、ｃ７、ｃ８、ｃ９、ｃ１０）｝であるから、行全体の累積データ転送量Ｓ１＝１０×（１０×８０×Ｎ）＝８ＧＢ、累積参照データ量Ｓ２＝１０×（３×８０×Ｎ）＝２．４ＧＢとなる。
【０１５７】
なお、列の組み合わせ（ｃ２、ｃ４、ｃ６、ｃ７、ｃ８、ｃ９、ｃ１０）にはアクセスしていないため、この列の組み合わせの行全体の累積データ転送量Ｓ１と累積参照データ量Ｓ２は、０となる。
【０１５８】
これらから、数式（２）を用いて、予測利得Ｐ（Ｗ）を算出すると、
予測利得Ｐ（Ｗ）＝Ｑ［（ｃ１、ｃ３、ｃ５）］−ｋＲβ
＝（Ｓ１−Ｓ２］／α−ｋＲβ
＝６４００ｍｓ−３０００ｍｓ＝３４００ｍｓ
【０１５９】
また、数式（３）を用いて、変更コストＣ（Ｗ）を算出すると、
変更コストＣ（Ｗ）＝２Ｄ／α＋４Ｎβ＝８００ｍｓ＋１２００ｍｓ＝２０００ｍｓ
となる。
【０１６０】
格納形式変更処理部２４０は、利得計算部２４４においてこのような計算を行うことができるとともに、予測利得が変更コストを上回ることを判定することができるので、格納形式変更部２４６によって仮想テーブルの格納形式を変更（分割）することができる。
【０１６１】
（第２の実施形態）
第１の実施形態では、図１０のステップＳ２０３において、仮想テーブルの複数の列の組み合わせに対応するデータが互いに重複しない組み合わせにより分割されるように、仮想テーブルの格納形式Ｗを変更する実施形態を説明した。具体的には、図１２に示すように、分割後の列の組み合わせにおいて、各データが重複しない組み合わせとなっていた。
【０１６２】
第２の実施形態では、格納形式設定部２４２は、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０の仮想テーブルの格納形式Ｗが、複数の列の組み合わせに対応するデータが一部に重複する組み合わせにより分割されるように、仮想テーブルの格納形式Ｗを作成する。
【０１６３】
例えば、格納形式変更処理部２４０は、履歴情報格納部２３０からアクセス履歴情報を取得すると、格納形式設定部２４２においてそのアクセス履歴情報の通りに仮想テーブルの格納形式を分割する。
【０１６４】
図１４は、第２の実施形態において、分割される仮想テーブル格納形式Ｗの列の組み合わせを示した説明図である。
【０１６５】
図１４に示すように、仮想テーブル格納方式Ｗは、分割前は、１行１Ｖａｌｕｅ方式でデータが格納されていたが、分割後は、Ｗ＝｛（ｃ１、ｃ２）、（ｃ１、ｃ３）、（ｃ１、ｃ３、ｃ５）、（ｃ１、ｃ２、ｃ３、ｃ４、ｃ５、ｃ６、ｃ７、ｃ８、ｃ９、ｃ１０）｝の４つの列の組み合わせに分割されて構成されている。すなわち、格納形式設定部２４２は、１行１Ｖａｌｕｅ方式により構成されていた仮想テーブル（Ｋ、Ｖ）から、一部に重複するデータを有する４つの列の組み合わせ（（Ｋ１１、Ｖ１１）、（Ｋ２２、Ｖ２２）、（Ｋ３３、Ｖ３３）、（Ｋ、Ｖ））に変更（分割）することを示している。
【０１６６】
また、第２の実施形態の場合には、仮想テーブル格納形式の変更に必要な変更コストＣ（Ｗ）は、次式で表される。
【０１６７】
［数４］
変更コストＣ（Ｗ）＝（Ｄ＋ΣＤｎ）／α＋（１＋ｋ）Ｎβ      ・・・（４）
【０１６８】
ここで、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０のデータ量は、分割したデータＤｎの分だけ増加すると考えることができる。また、（１＋ｋ）Ｎは、仮想テーブルへのアクセス回数を示しており、仮想テーブルへの操作により、ＧＥＴ文１回、ＳＥＴ文ｋ回から導かれる。また、（Ｄ＋ΣＤｎ）／αは、テーブルのデータ量Ｄと、分割する列の総データ量Ｄｎにより算出される。
【０１６９】
このように、第２の実施形態における変更コストの計算方法は、分割の方法に依存するため（すなわち、列の組み合わせに依存する。）、図１０のステップＳ２０１で集合Ｙを抽出した後、仮想テーブル格納形式Ｗを作成する段階で、作成する列の組み合わせの数を閾値を用いて決定することが望ましい。
【０１７０】
なお、利得計算や予測利得の計算方法は、第１の実施形態または第２の実施形態の計算方法に限定されるものではなく、異なる計算方法により計算するようにしてもよい。
【０１７１】
また、第１の実施形態と第２の実施形態では、データの重複の有無により分割の方法が異なるため、予め第１の実施形態か第２の実施形態かを選択するように設定してもよく、また、第１の実施形態と第２の実施形態の変更コストＣ（Ｗ）の計算結果を踏まえた上で、第１の実施形態の仮想テーブル格納形式か第２の実施形態の仮想テーブル格納形式かを選択するようにしても良い。
【０１７２】
また、第１の実施形態および第２の実施形態では、アクセス履歴情報の蓄積により仮想テーブル格納形式を再度、変更（分割）した方がアクセス性能を改善することができることもある。具体的には、アプリケーションサーバ１００のアプリケーション１１０が変更された場合や、アクセスパターンが変わった場合などが想定される。
【０１７３】
このような場合には、第１の実施形態および第２の実施形態では、蓄積されたアクセス履歴情報に基づいて、仮想テーブル格納形式を再分割することもできる。
【０１７４】
なお、第１の実施形態の場合は、行全体の累積データ転送量Ｓ１を得ることができないが、例えば、行全体の累積データ転送量Ｓ１を近似することにより予測利得を算出することができる。具体的には、格納形式変更部２４６が最初の分割を行う前に、行全体の累積データ転送量Ｓ１と累積参照データ量Ｓ２の比を予め算出しておき、その比を用いて数式（２）の予測利得を近似することができる。
【０１７５】
なお、再分割を行う場合、第１の実施形態では、新しい仮想テーブル格納形式に分割し、論理テーブルから一行分の総データを取得する必要があるため、変更コストが高くなる傾向がある。
【０１７６】
一方、第２の実施形態の場合には、新たな分割として列の組み合わせの複製を作成するのみであるため、容易に再変更（再分割）することができる。
【０１７７】
また、第１の実施形態および第２の実施形態において、履歴情報格納部２３０のアクセス履歴情報に基づいて、利得の予測（将来の予測）を行うことができる場合は、その予測される利得に応じて、仮想テーブル格納形式を変更すべきか否かを判定するようにしてもよい。例えば、近似直線を用いて利得の予測を行うことができる場合には、その予測に基づいて、格納形式を変更するようにしてもよい。
【０１７８】
なお、本実施形態では、ＫＶＳサーバ２００が、入出力要求処理部２１０、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０、履歴情報格納部２３０、格納形式変更処理部２４０および格納形式情報格納部２５０を備えるようになっていた。本実施形態実施はこれに限定されるものではなく、例えば、アプリケーション１１０に、入出力要求処理部２１０、Ｋｅｙ−Ｖａｌｕｅ記憶領域２２０、履歴情報格納部２３０、格納形式変更処理部２４０および格納形式情報格納部２５０を設け、データベース装置の機能を有するアプリケーションサーバ１００を構成するようにしてもよい。
【０１７９】
また、入出力要求処理部２１０とＫｅｙ−Ｖａｌｕｅ記憶領域２２０とを備えるＫＶＳサーバと、履歴情報格納部２３０、格納形式変更処理部２４０および格納形式情報格納部２５０を備える情報処理装置とから、データベース装置を含むデータベース管理システムを構成するようにしてもよい。
【０１８０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【０１８１】
また、本発明の実施形態では、フローチャートの各ステップは、記載された順序に沿って時系列的に行われる処理の例を示したが、必ずしも時系列的に処理されなくとも、並列的あるいは個別実行される処理をも含むものである。
【符号の説明】
【０１８２】
１００  アプリケーションサーバ
１１０  アプリケーション
２００  ＫＶＳサーバ
２１０  入出力要求処理部
２２０  Ｋｅｙ−Ｖａｌｕｅ記憶領域
２３０  履歴情報格納部
２４０  格納形式変更処理部
２４２  格納形式設定部
２４４  利得計算部
２４６  格納形式変更部
２５０  格納形式情報格納部
３００  データベース管理システム
【図１】
2014228960.tif 000003
【図２】
2014228960.tif 000004
【図３】
2014228960.tif 000005
【図４】
2014228960.tif 000006
【図５】
2014228960.tif 000007
【図６】
2014228960.tif 000008
【図７】
2014228960.tif 000009
【図８】
2014228960.tif 000010
【図９】
2014228960.tif 000011
【図１０】
2014228960.tif 000012
【図１１】
2014228960.tif 000013
【図１２】
2014228960.tif 000014
【図１３】
2014228960.tif 000015
【図１４】
2014228960.tif 000016