(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0016】
以下、図面を参照して本発明を実施するための形態について説明する。以下の実施の形態の構成は例示であり、本発明は実施の形態の構成に限定されない。
【0017】
<システム構成>
図1は、システムの概略構成の一例を示す図である。
図1の例では、本発明に係るマルチテナントシステム1と、テナント端末2(
図1では、2a及び2b)とが、ネットワーク3を介して接続されている。マルチテナントシステム1は、複数のテナント(すなわち、複数のユーザ)に対してハードウェアリソース及びソフトウェアリソースを共通に使用させるシステムであり、本発明に係るデータ構造を有する物理テーブルを使用させる。すなわち、いわゆるSaaS(Software as a Service)を提供するシステムである。また
、テナント端末2は、それぞれネットワーク3を介してマルチテナントシステム1に対しデータ操作を要求したり、結果を受け取ったりする。便宜上、テナント端末2aはテナントAの端末であり、テナント端末2bはテナントBの端末であるものとする。
図1では2つのテナント端末を示しているが、テナント端末の数は2つには限られない。
【0018】
<マルチテナントシステム>
図2は、マルチテナントシステム1の一例を示す機能ブロック図である。
図2のマルチテナントシステム1は、DBMS11と、メタデータ記憶部12と、設定部13と、要求受付部14と、変換部15と、結果応答部16とを有する。
【0019】
DBMS11は、データベース(例えば、RDB(Relational Database))の運用管
理に必要な機能を提供するシステムであり、物理テーブル111と、データ操作部112とを有する。物理テーブル111は、所定のデータ構造(スキーマ)で物理的なファイルとしてデータレコードを格納する記憶装置である。本実施形態では、データ構造が同一の物理テーブル111を、複数のテナントが共有する。すなわち、異なるテナントのデータを同一の物理テーブル111に保持する。また、データ操作部112は、レコードの挿入(登録)、レコードの選択(検索)、レコードの更新、レコードの削除等の操作を物理テーブル111に対して行う。なお、DBMS11は、様々なベンダーが提供する既存の製品を利用することができる。
【0020】
また、メタデータ記憶部12は、各テナントが業務等に応じて定義する論理テーブルのデータ構造と物理テーブル111のデータ構造との対応付けを示すメタデータを記憶する。本実施形態では、物理テーブル111は各テナントに共通であり、汎用的なデータ構造を有している。そして、メタデータにおいて、論理テーブルの1カラム(「列」、「項目
」、「フィールド」とも呼ぶ)に対し、物理テーブル111の1カラムを割り当てる。このとき、対応するデータ型のカラムを割り当てるものとする。なお、メタデータを「マッピング情報」とも呼ぶ。
【0021】
ここで、各テナントが定義する論理テーブルの1レコードは、物理テーブル111の1レコードで保持できない場合がある。例えば、物理テーブル111のカラム数の方が論理テーブルのカラム数よりも少ない場合は論理テーブルのレコードを物理テーブルの1レコードでは保持することができない。また、あるデータ型のカラムが、物理テーブル111に予め用意された数の方が論理テーブルに定義された数よりも少ない場合も、論理テーブルのレコードを物理テーブルの1レコードで保持することができない。このような場合、論理テーブルにおける1レコードを、物理テーブル111における2以上のレコードに分解して保持する。このため、物理テーブル111は、複数のレコードの接続関係(「ページ」とも呼ぶ)を示すカラムを含む。そして、メタデータは、論理テーブルのカラムと、物理テーブル111のカラム及びページとを対応付けることで、値を1対1に対応付けるものとする。
【0022】
設定部13は、ネットワーク3を介してテナント端末2からメタデータを設定するための命令を受け付け、メタデータ記憶部12に記憶させる。また、要求受付部14は、ネットワーク3を介してテナント端末2からデータ操作を行うための要求を受け付け、変換部15に渡す。変換部15は、メタデータ記憶部12が記憶するメタデータに基づいて、テナント端末から受け付けたデータ操作要求を、DBMSにおいて実行可能なデータ操作命令(「クエリ」、「問合せ」とも呼ぶ)に変換し、DBMS11のデータ操作部112に伝送する。同様に、データ操作部112から取得したデータ操作の結果を受け取り、各テナントの論理テーブルにおける項目に変換して結果応答部16に渡す。結果応答部16は、テナント端末2から受け付けたデータ操作要求の結果を、テナント端末2へ送信する。
【0023】
<装置構成>
図3は、コンピュータの一例を示す装置構成図である。マルチテナントシステム1及びテナント端末2は、
図3に示すようなコンピュータである。
図3に示すコンピュータ1000は、CPU(Central Processing Unit)1001、主記憶装置1002、補助記憶
装置1003、通信IF(Interface)1004、入出力IF(Interface)1005、ドライブ装置1006、通信バス1007を備えている。CPU1001は、プログラム(「ソフトウェア」又は「アプリケーション」とも呼ぶ)を実行することにより本実施の形態に係る処理を行う。主記憶装置1002は、CPU1001が読み出したプログラムやデータをキャッシュしたり、CPUの作業領域を展開したりする。主記憶装置は、具体的には、RAM(Random Access Memory)やROM(Read Only Memory)等である。補助記憶装置1003は、CPU1001により実行されるプログラムや、本実施の形態で用いる設定情報などを記憶する。補助記憶装置1003は、具体的には、HDD(Hard-disk Drive)やSSD(Solid State Drive)、フラッシュメモリ等である。主記憶装置1002や補助記憶装置1003は、マルチテナントシステム1の物理テーブル111やメタデータ記憶部12、その他の一時データを記憶する手段として働く。通信IF1004は、他のコンピュータとの間でデータを送受信する。通信IF1004は、具体的には、有線又は無線のネットワークカード等である。マルチテナントシステム1及びテナント端末2は、通信IF1004を介してインターネット等のネットワーク3に接続されている。入出力IF1005は、入出力装置と接続され、ユーザから操作を受け付けたり、ユーザへ情報を提示したりする。入出力装置は、具体的には、キーボード、マウス、ディスプレイ、タッチパネル等である。ドライブ装置1006は、磁気ディスク、光磁気ディスク、光ディスク等の記憶媒体に記録されたデータを読み出したり、記憶媒体にデータを書き込んだりする。以上のような構成要素が、通信バス1007で接続されている。なお、これらの構成要素はそれぞれ複数設けられていてもよいし、一部の構成要素(例えば、ドライブ
装置1006等)を設けないようにしてもよい。また、入出力装置がコンピュータと一体に構成されていてもよい。また、ドライブ装置1006で読み取り可能な可搬性の記憶媒体や、フラッシュメモリのような可搬性の補助記憶装置1003、通信IF1004などを介して、本実施の形態で実行されるプログラムが提供されるようにしてもよい。そして、CPU1001が所定のプログラムを実行することにより、
図3に示したコンピュータをマルチテナントシステム1として働かせる。
【0024】
<データ構造>
次に、物理テーブル111のデータ構造と論理テーブルのデータ構造との対応関係の一例を説明する。
図4〜
図6に示す表は、テナントA又はテナントBがマルチテナントシステム1において保持している論理テーブルと格納データの一例である。
図4は、テナントAが管理する「user」テーブルのカラム名と登録されたレコードの一例を示す表である。
図4に示す「user」テーブルは、「名前」、「性別」、「身長」、「体重」及び「誕生日」の各カラムを有する。なお、データ型は、例えば、「名前」及び「性別」が文字列型、「身長」及び「体重」が固定小数点型、「誕生日」が日付型である。
図5は、テナントAが管理する「div」テーブルに登録されたデータの一例を示す表である。
図5に示す「div」テーブルは、「部署名」及び「部署種別」の各カラムを有する。なお、データ型は、例えば、「部署名」及び「部署種別」とも文字列型である。
図6は、テナントBが管理する「item」テーブルに登録されたデータの一例を示す表である。
図6に示す「item」テーブルは、「商品名」、「商品種別」、「単位名」、「価格」及び「発売日」の各カラムを有する。なお、データ型は、例えば、「商品名」、「商品種別」、「単位名」が文字列型、「価格」が整数型、「発売日」が日付型である。
【0025】
図7に示す表は、物理テーブル111のデータ構造と格納データの一例である。
図7の物理テーブルは、「TenantID」、「TypeID」、「DataID」、「PageID」、「Char1」、「Char2」、「Num1」、「Num2」、「Date1」、「Date2」等のカラムを有する。なお、データ型は、例えば、「TenantID」、「TypeID」、「Char1」及び「Char2」が文字列型、「Num1」及び「Num2」が数値型、「Date1」及び「Date2」が日付型である。なお、各カラムのデータサイズ(「データ長」とも呼ぶ)は、可変長としても固定長としてもよい。
図7には明示していないが、データ型は同一であってデータサイズが異なる複数のカラムを設けてもよい。
【0026】
「TenantID」のカラムには、マルチテナントシステム1のユーザであるテナントを識別するための識別情報が登録される。本実施形態では、テナント端末2のユーザがマルチテナントシステム1を利用する際、まず、テナントの識別情報(例えば「TenantID」)及びパスワードを用いて認証処理を行うものとする。そして、基本的に各テナントは物理テーブル111に登録されたレコードのうち、「TenantID」のカラムに自身の識別情報が登録されたレコードに対して選択、更新、削除等の操作を行うことができるものとする。また、各テナントが物理テーブル111に新たなレコードを挿入する場合、「TenantID」のカラムに自身の識別情報を登録するものとする。このようにすることで、ハードウェアリソースからアプリケーション及びデータベース構造までを共有したSaaSを実現することができる。
【0027】
「TypeID」のカラムには、各テナントにおいて論理テーブルを識別するための識別情報が登録される。また、「DataID」のカラムには、各論理テーブルにおいてレコードを一意に特定するための識別情報が登録される。各論理テーブルにおいてレコードを一意に特定できるように「DataID」の値を付与(採番)すれば、「TenantID」、「TypeID」及び「DataID」の複合キーによって各テナントの論理テーブルにおけるレコードを一意に特定できるようになる。なお、
図7に示すように、全ての論理テーブルにおいてレコードを一意に特定できるように「DataID」の値を付与するようにしてもよい。
【0028】
「PageID」のカラムには、論理テーブルにおける1レコードが物理テーブル111において複数のレコードに分解されて登録される場合の接続関係(接続順序)を表す情報が登録される。なお、
図7の例では、接続関係を表す情報として、通し番号を登録している。
図7の例では、「DataID」及び「PageID」によって、論理テーブルのカラムを特定することができるため、物理テーブル111の複数のレコードから論理テーブルにおける1レコードを復元できるようになる。なお、「TenantID」、「TypeID」、「DataID」及び「PageID」のカラムを複合キーとして物理テーブル111のレコードを一意に特定できるようにしてもよい。
【0029】
また、「Char1」、「Char2」、「Num1」、「Num2」、「Date1」、「Date2」・・・のカラムには、論理テーブルの各カラムの値が登録される。すなわち、これらは、論理テーブルの複数のカラムに保持される値をそれぞれ独立に保持するカラムである。例えば、「Char1」及び「Char2」は、文字列型のカラムである。また、「Num1」及び「Num2」は、数値型のカラムである。「Date1」及び「Date2」は、日付型のカラムである。なお、
図7はカラムの構成を簡略化した例であり、物理テーブル111は、他のデータ型のカラムをさらに有していてもよいし、各データ型のカラムを3列以上有していてもよい。また、物理テーブル111に設けられる各データ型のカラム数は、同数でなくてもよい。例えば、物理テーブル111は、文字列型のカラムを30列、数値型のカラムを10列、日付型のカラムを5列設けるといった定義が可能である。ただし、マルチテナントシステムにおいては汎用性が求められるため、平均的に各データ型のカラム数を決定したり、テナントのニーズや使用実績等に基づいて各データ型のカラム数を決定してもよい。なお、論理テーブルのデータ構造と物理テーブル111のデータ構造との対応付けは、テナント毎に予めメタデータに定義される。
【0030】
図8は、メタデータとして登録される内容の一例を示す表である。メタデータは、例えばテナントごとにDBMS上のテーブル又はファイルシステム上のファイルとして保持される。本実施形態では、テナント(例えば「テナントA」、「テナントB」等)及び論理テーブル(例えば「user」テーブル、「div」テーブル、「item」テーブル等)の組合せ
に対して、物理テーブル111の「TypeID」が一意に割り当てられる。さらに、メタデータは、
図4〜
図6に示した論理テーブルのカラムと
図7に示した物理テーブルのカラムとの対応付けを示している。また、本実施形態では、論理テーブルの1レコードを物理テーブル111において複数のレコードに分解して登録する場合がある。よって、論理テーブルの「カラム名」に対し、物理テーブル111の「対応カラム名」及び分解された各レコードを一意に特定するための「PageID」が対応付けられている。
図7の「DataID」の値が「001」〜「004」のレコードのように、ある「DataID」に対し「PageID」が1のみである場合、論理テーブルのレコードは分解されずに物理テーブル111に格納されていることがわかる。一方、
図7の「DataID」の値が「005」及び「006」のレコードのように、「DataID」の値が同一であって「PageID」の値が2以上のレコードが存在する場合、論理テーブルのレコードは複数に分解されて物理テーブル111に格納されていることがわかる。このように、「PageID」のカラムは、物理テーブル111における複数のレコード間の接続関係を示すデータともいえる。
【0031】
本実施形態では、基本的にテナント毎に論理テーブルやメタデータが定義される。ただし、各テナントが共通に利用するマスターデータを用意するようにしてもよい。例えば、郵便番号と住所の一部を対応付けて記憶する郵便番号マスタを、各テナントに共通のメタデータで保持するようにしてもよい。このような郵便番号マスタの内容は郵便制度の規格によって決まるため、各テナントが共通に利用する方が効率的である。共通のメタデータはファイルシステム上のファイルとしてマルチテナントシステム1の管理者が一元管理し、各テナントのメタデータはDBMS上のレコードとして「TenantID」と関連付けて管理
するようにしてもよい。
【0032】
<データ操作処理>
図9は、データ操作処理の一例を示す処理フローである。なお、マルチテナントシステム1は、テナント端末2から接続の要求を受ける際、まず所定の認証処理を行うことでテナントを識別しているものとする。また、予めメタデータ記憶部には
図8に示したメタデータが保持されているものとする。
【0033】
マルチテナントシステム1の要求受付部14は、テナント端末2からデータ操作に係る要求を受け付ける(
図9:S1)。要求は、例えば、論理テーブルに対してレコードの挿入、選択、更新、削除等を要求するクエリ(例えば、SQL等の問合せ言語)として受け付ける。そして、要求受付部14は、要求を変換部15に伝送する。なお、要求は、各テナントのいわゆる業務アプリケーションから発行されるものであってもよい。例えば、ネットワーク3に接続された顧客の端末から商品購入の要求を受けた場合に、マルチテナントシステム1のアプリケーションがデータ操作の要求を生成するようにしてもよい。
【0034】
マルチテナントシステム1の変換部15は、メタデータ記憶部12に記憶されているメタデータに基づいて、要求受付部14から受けた要求を物理テーブル111に対する要求に変換する(S2)。ここでは、
図8に示したメタデータに基づき、クエリの内容を修正する。すなわち、レコード間の接続関係を示す情報である、物理テーブルのカラム「PageID」に保持された値に基づいて、1又は2以上のレコードを仮想的に1つのレコードとして扱う。具体的には、「TenantID」の値が要求元のテナントの識別情報と一致するレコードを操作の対象とする条件を付加する。また、操作対象のテーブルを物理テーブル111に変更し、変換前の要求における操作対象の論理テーブルの指定を、カラム「TypeID」の値の指定に置き換える。さらに、変換前の要求におけるカラムの指定を、物理テーブル111のカラム及び「PageID」の指定に置き換える。
【0035】
例えば、テナントBが検索を行うために次のようなクエリ1Aを送信する例について説明する。
(クエリ1A)
SELECT 商品名, 商品種別, 単位名, 価格, 発売日 FROM item WHERE 商品種別=’食品’;
【0036】
この例は、論理テーブル「item」から「商品種別」の値が「食品」のレコードを抽出し、「商品名」、「商品種別」、「単位名」、「価格」及び「発売日」の各項目の値を表示させる要求である。そして、クエリ1Aは、変換部15によって、次のようなクエリ1Bに変換される。なお、物理テーブル111の物理名は「DataTable」であるものとする。
(クエリ1B)
SELECT p1.Char1, p1.Char2, p2.Char1, p1.Num1, p1.Date1
FROM DataTable p1 LEFT OUTER JOIN DataTable p2
ON p1.DataID=p2.DataID and p2.PageID=2
WHERE p1.Char2=’食品’
AND p1.TenantID=’B’ AND p1.TypeID=’item’ AND p1.PageID=1;
【0037】
この例では、「PageID」の値が1のレコードと「PageID」の値が2のレコードとを自己結合させいる。また、
図8のメタデータに基づき、論理テーブルの「商品種別」は物理テーブル111において「PageID」が1の「Char2」(すなわち、p1.Char2)に変換されて
いる。なお、DBMS11からは「PageID」が1のレコードと2のレコードとをそれぞれ抽出し、変換部15が仮想的な1つのレコードに結合するという構成にしてもよい。また、「PageID」の値が3以上のレコードがある場合、変換後のクエリにおいて3つ以上のレコードを自己結合させることも可能である。
【0038】
次に、テナントBがレコード数の計数を行うために次のようなクエリ2Aを送信する例について説明する。
(クエリ2A)
SELECT COUNT(*) FROM item WHERE 商品種別=’食品’;
【0039】
クエリ2Aは、変換部15によって、次のようなクエリ2Bに変換される。
(クエリ2B)
SELECT COUNT(*)
FROM DataTable p1 LEFT OUTER JOIN DataTable p2
ON p1.DataID=p2.DataID and p2.PageID=2
WHERE p1.Char2=’食品’
AND p1.TenantID=’B’ AND p1.TypeID=’item’ AND p1.PageID=1;
【0040】
この例でも、「PageID」が2のレコードを自己結合させ、「PageID」が1のレコードを選択(SELECT)している。また、
図8のメタデータに基づき、論理テーブルの「商品種別」は物理テーブル111において「PageID」が1の「Char2」(すなわち、p1.Char2)に
変換されている。なお、DBMS11からは「PageID」が1のレコードと2のレコードとをそれぞれ抽出し、変換部15が仮想的な1つのレコードに結合して計数するという構成にしてもよい。
【0041】
次に、テナントBがレコードの挿入(INSERT)を行うために次のようなクエリ3Aを送信する例について説明する。
(クエリ3A)
INSERT INTO item VALUES(‘テレビ’, ‘家電’, ‘台’, 30000, 7/29);
【0042】
クエリ3Aは、変換部15によって、次のようなクエリ3B及びクエリ3Cに変換される。なお、要求を受け付けた時点において、物理テーブル111には「DataID」が004の
レコードまでが登録されており、新たに挿入されるレコードの「DataID」には005が採番
されるものとする。
(クエリ3B)
INSERT INTO DataTable(TenantID, TypeID, DataID, PageID, Char1, Char2, Num1, Date1)
VALUES(‘B’, ‘item’, 005, 1, ‘テレビ’, ‘家電’, 30000, 7/29);
(クエリ3C)
INSERT INTO DataTable(TenantID, TypeID, DataID, PageID, Char1)
VALUES(‘B’, ‘item’, 005, 2, ‘台’);
【0043】
レコードの挿入の場合、変換部15はメタデータを参照し、論理テーブルにおける1レコードが物理テーブル111における複数のレコードに対応付けられている場合、「PageID」ごとに挿入を行うクエリを生成する。上記の例では、「PageID」が「1」のレコード(第1のレコード)を挿入するクエリ3B、及び「PageID」が「2」のレコード(第2のレコード)を挿入するクエリ3Cが生成されている。
【0044】
以上、メタデータにおいて論理テーブルのレコードが物理テーブル111の複数のレコードに分解して対応付けられている場合のデータ操作の一例について説明した。テナントAのレコードのように論理テーブルにおけるレコードが物理テーブル111においても分解されずに登録されている場合は、「TenantID」及び「TypeID」の条件を追加し、カラム名の変換を行うが、「PageID」は「1」のみであり、結合や分解を行う必要はない。
【0045】
また、レコードの更新については、要求に対し選択と同様の変換を行い、条件に該当するレコードを更新するクエリを生成する。レコードの削除については、例えば、条件に該当するレコードと「DataID」の値が同一のレコードを削除するクエリを生成する。
【0046】
その後、マルチテナントシステム1のDBMS11は、物理テーブル111に対しデータ操作を実行する(S3)。本ステップでは、DBMS11のデータ操作部112が物理テーブル111に対し変換後のクエリを発行して挿入、選択、更新、削除等のデータ操作を行い、実行結果を変換部15に出力する。以上のように、変換部15及びDBMS11は、受けた要求に応じて、「登録部」、「抽出部」、「更新部」、「削除部」等として機能する。また、データ操作処理のS2〜S4は、受けた要求に応じて、「登録ステップ」、「抽出ステップ」、「更新ステップ」、「削除ステップ」として働く。
【0047】
次に、変換部15は、メタデータ記憶部12のメタデータに基づいて出力結果を変換し、結果応答部へ出力する(S4)。ここでは、例えば、物理テーブル111のカラム名を論理テーブルのカラム名に置き換える。
【0048】
そして、マルチテナントシステム1の結果応答部16は、ネットワーク3を介して要求元のテナント端末2に対して結果を送信する(S5)。なお、結果応答部16は、マルチテナントシステム1の図示していないアプリケーションに対して結果を渡すようにしてもよい。
【0049】
以上のように、本実施形態に係るマルチテナントシステムでは、各テナントが定義する論理テーブルのレコードを、必要に応じて複数のレコードに分解して物理テーブルに登録する。よって、マルチテナントシステムにおいて汎用的な物理テーブルを用意する場合であっても、カラム数の制約を排除することができる。また、本実施形態に係るマルチテナントシステムは、論理テーブルにおけるカラムをそれぞれ物理テーブルにおける独立したカラムとして登録する。よって、DBMSが提供する検索等の機能を利用する際にはいずれのカラムであっても条件に指定することができるようになっている。このように、マルチテナントシステムで用いる汎用的なデータベースにおいて、カラム数の制約を排除するとともに、DBMSが提供する機能の利用性を向上させることができるようになっている。
【0050】
<設定処理>
図10は、メタデータ等の設定を行う設定処理の一例を示す処理フロー図である。上述したデータ操作処理の前に、
図10に示すような設定処理を行う。
【0051】
マルチテナントシステム1の設定部13は、テナント端末2から要求を受け、メタデータ記憶部12に論理テーブルのカラムと物理テーブル111のカラムとの対応付けを設定する(
図10:S11)。本ステップでは、
図8に示したようなメタデータが登録される。
【0052】
本実施形態では、物理テーブル111に様々なデータ型のカラムを用意しておくことを特徴の1つとしている。このようにすれば、カラムのデータ型に応じてDBMSが提供する検索や集計等の機能を適用することができる。なお、論理テーブルのカラムに設定されるデータ型と物理テーブルのカラムに設定されるデータ型とは必ずしも1対1に対応していなくてもよい。例えば、
図11に示すようにカラム間のデータ型を設定するようにしてもよい。ここで、論理テーブルにおける「選択肢型」とは、予め定義された複数の選択肢の中からいずれかを指定することができるデータ型である。たとえば、優先度を示す項目に、あらかじめ定義された「最高」、「高」、「中」、「低」等の選択肢のいずれかを指定できるようにする。また、論理テーブルにおける「参照型」とは、別データへの参照を
表現するデータ型である。また、論理テーブルにおける「バイナリデータ型」とは、DBMSで用意されているBLOB型のようなバイナリデータを扱う型である。マルチテナントシステム1内において、バイナリデータの格納手段(たとえば、ファイルシステムやクラウドサービス上のストレージサービスなど)を別途準備し、物理テーブル内のカラムには格納手段へのポインタとなるLobIDを格納するようにしてもよい。そして、設定によって格納手段をDB又はファイルシステム等に切り替え可能としてもよい。また、論理テーブルにおける「ロングテキスト型」とは、DBMSの文字列型カラムのデータサイズの上限を超える文字列を格納可能とするデータ型である。例えば、DBMSネイティブの型であるCLOBを利用し、バイナリデータ型と同様に切り替え可能としてもよい。
【0053】
なお、物理テーブル111のカラムは、すべて文字列型としてもよい。この場合、DBMS11は、数値や日付もすべて文字列として物理テーブル111に格納する。そして、例えば集計のような処理は、DBMSの機能を利用するのではなくマルチテナントシステム1の図示していないアプリケーションが実行するようにする。予め物理テーブル111に様々なデータ型のカラムをそれぞれ複数用意する場合、使用しないデータ型のカラムが増えてしまう可能性もあるところ、例えばカラムをすべて文字列型とすれば、物理テーブルのカラムを有効に利用可能となる。また、このような場合であっても、論理テーブルにおけるカラムをそれぞれ物理テーブルにおける独立したカラムに登録すれば、各カラムに対して検索のようなDBMSが提供する機能を利用できる。
【0054】
また、上述の通り、データ型が同一であってデータサイズが異なる複数のカラムを設けてもよい。例えば、物理テーブル111には、文字列型(最大長:256文字)のカラムと文字列型(最大長:2000文字)のカラムとを設けておく。そして、例えば、論理テーブルの短文字列型のカラムを物理テーブル111の文字列型(最大長:256文字)のカラムにマッピングし、論理テーブルの長文字列型のカラムを物理テーブル111の文字列型(最大長:2000文字)のカラムにマッピングする。物理テーブル111にデータ型は同一であってデータサイズが異なる複数のカラムを設けておくことにより、ユーザは格納データに応じて十分な最大長のカラムを選択することができ、テーブルに保存されるデータ量を削減したり、データ処理時に使用するバッファメモリを節約することができる。
【0055】
また、物理テーブル111は、一部のカラムに予めインデックス(INDEX)を付与しておくようにしてもよい。インデックスは、DBMS11の機能を利用して付与することができる。この場合、S11においては、論理テーブルのカラムのうち多く検索に用いられることが想定されるカラムを、物理テーブル111におけるインデックス付きのカラムにマッピングする。このようにすることで、
図9に示したデータ操作処理において検索処理を高速化することができる。
【0056】
なお、利用するDBMSの方式によっては、null値に対してもインデックスを付与し、データ領域を占有する場合がある。本実施形態に係る物理テーブルの各カラムには必ずしも論理テーブルのカラムがマッピングされるとは限らないところ、このような方式のDBMSの場合にインデックスを付与するのは好ましくない。このような場合は、
図12に示すようなインデックステーブルを別途設けるようにしてもよい。インデックステーブルは、例えば、データ型の種類に応じて、文字列型用のインデックステーブル、数値型用のインデックステーブル等を設ける。そして、メタデータにおいてインデックスの付与が設定されたカラムについてはインデックステーブルにカラムの値をコピーして(すなわち同期させて)検索に用いるようにする。
【0057】
また、設定部13は、テナント端末2から要求を受けた場合、メタデータ記憶部12にテーブルスペースの設定をする(S12)。ここで、テーブルスペースとは、複数用意さ
れる物理テーブルの各々を指す概念である。複数のテーブルスペースを用意することで、いわゆるパーティショニングのように物理テーブルを分散させることができる。
【0058】
図13は、テーブルスペースを説明するための図である。
図13に示すように、メタデータにおいて、各論理テーブルがいずれのテーブルスペースを利用するのか対応付けを設定する。また、物理テーブルはテーブルスペースの数だけ用意され、それぞれメタデータで対応付けられた論理テーブルのレコードが登録される。
図13の例では、「Default」
テーブルスペースに「DataTable_Default」という物理テーブルが対応付けられ、「TenantID」及び「TypeID」をキーとしてパーティショニングする。また、「DateBase」テーブ
ルスペースには「DataTable_DateBase」という物理テーブルが対応付けられ、「Date1」
及び「TenantID」をキーとしてパーティショニングする。
【0059】
このような例において、「DateBase」テーブルスペースには、注文日等の項目を有し、レコードが日々増加するトランザクションデータを格納するものとする。一般的に物理テーブルのレコードが増加するほどレスポンスは低下していくところ、保持するレコード数の増加が見込まれる論理テーブルを物理テーブル上分けて管理することができる。
【0060】
さらに、テーブルスペースの各々について、各データ型のカラム数に差をつけてもよい。例えば、文字の保存を優先するテーブルスペース(文字保存優先型)と、数値の保存を優先するテーブルスペース(数値保存優先型)を定義しておく。そして、文字保存優先型の物理テーブルには、例えば、文字列型のカラムを80列、数値型のカラムを10列、日付型のカラムを10列設ける。また、数値保存優先型の物理テーブルには、例えば、文字列型のカラムを10列、数値型のカラムを80列、日付多型のカラムを10列設ける。ユーザが論理テーブルを定義する際には格納するデータの見通しが立つため、適切なテーブルスペースを選択することが可能であり、テーブルに保存されるデータ量を削減したり、データ処理時に使用するバッファメモリを節約することができる。
【0061】
<その他>
本発明は、上述の例に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更を加え得るものである。
【0062】
例えば、物理テーブル111として、メインの物理テーブルと補助的な物理テーブルとを設けておくようにしてもよい。この場合、例えば、1ページ目(PageIDが1)のカラムをメインの物理テーブル(メインテーブル)に記憶させ、2ページ目以降(PageIDが2以上)のカラムを補助的な物理テーブル(補助テーブル)に記憶させる。このようにすれば、メインテーブルのレコードと論理テーブルのレコードとは1対1に対応づけられ、メインテーブルのカラム「DataID」に対してユニークインデックスを張ることができるようになる。また、例えば
図2の変換部15を介さずに、ユーザがSQL等で直接DBMSを参照するような場合、メインテーブルのレコード件数が論理テーブルにおけるレコード件数となるため、メンテナンス等が行い易くなる。