(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-05-08
(45)【発行日】2023-05-16
(54)【発明の名称】情報処理装置、情報処理方法及びプログラム
(51)【国際特許分類】
G06F 16/21 20190101AFI20230509BHJP
G06F 16/28 20190101ALI20230509BHJP
【FI】
G06F16/21
G06F16/28
(21)【出願番号】P 2019005509
(22)【出願日】2019-01-16
【審査請求日】2022-01-12
(73)【特許権者】
【識別番号】397073201
【氏名又は名称】株式会社電通国際情報サービス
(74)【代理人】
【識別番号】110002860
【氏名又は名称】弁理士法人秀和特許事務所
(72)【発明者】
【氏名】樋口 清志
【審査官】早川 学
(56)【参考文献】
【文献】米国特許出願公開第2015/0379058(US,A1)
【文献】国際公開第2011/111532(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
マルチテナントデータベースにおいて複数のテナントが共有する物理テーブルに対してデータ操作を行う情報処理装置であって、
テナント毎に定義される論理テーブルのカラムと前記物理テーブルのカラムとの対応付けを前記テナント毎に定義するマッピング情報に基づいて、前記テナントのユーザに応じたデータ操作を行うデータ操作部と、
前記論理テーブルのカラムについて定義を変更する操作の入力を受けた場合、前記物理テーブルのカラムは保持したまま、前記マッピング情報において対象のカラムと前記物理テーブルのカラムとの対応付けを削除するテーブル定義操作部と、
を備え
、
前記テーブル定義操作部は、
前記マッピング情報に対する変更の履歴を記憶装置に記憶させ、
前記論理テーブルに対して新たなカラムを追加する場合、前記マッピング情報に対する変更の履歴において既に前記論理テーブルのカラムと対応付けられた物理テーブルのカラムを避けて、前記論理テーブルに対して追加された新たなカラムと、前記物理テーブルのカラムとの対応づけを行う
情報処理装置。
【請求項2】
前記テーブル定義操作部は、定義を変更した論理テーブルのカラムについて変更を取り消す操作の入力を受けた場合、前記マッピング情報において削除したカラムと前記物理テーブルのカラムとの対応付けを登録する
請求項
1に記載の情報処理装置。
【請求項3】
前記テーブル定義操作部は、デフラグの指示を受けた場合、前記論理テーブルのカラムと対応付けられていない前記物理テーブルのカラムのフィールドからデータを削除し、前記論理テーブルのカラムに対して前記物理テーブルのカラムを対応付けし直す
請求項1
又は2に記載の情報処理装置。
【請求項4】
マルチテナントデータベースにおいて複数のテナントが共有する物理テーブルに対してデータ操作を行う情報処理装置が、
テナント毎に定義される論理テーブルのカラムと前記物理テーブルのカラムとの対応付
けを前記テナント毎に定義するマッピング情報に基づいて、前記テナントのユーザに応じたデータ操作を行う
データ操作ステップと、
前記論理テーブルのカラムについて定義を変更する操作の入力を受けた場合、前記物理テーブルのカラムは保持したまま、前記マッピング情報において削除対象のカラムと前記物理テーブルのカラムとの対応付けを削除する
テーブル定義操作ステップと、
を実行
し、
前記テーブル定義操作ステップにおいて、
前記マッピング情報に対する変更の履歴を記憶装置に記憶させ、
前記論理テーブルに対して新たなカラムを追加する場合、前記マッピング情報に対する変更の履歴において既に前記論理テーブルのカラムと対応付けられた物理テーブルのカラムを避けて、前記論理テーブルに対して追加された新たなカラムと、前記物理テーブルのカラムとの対応づけを行う
情報処理方法。
【請求項5】
マルチテナントデータベースにおいて複数のテナントが共有する物理テーブルに対してデータ操作を行う情報処理装置に、
テナント毎に定義される論理テーブルのカラムと前記物理テーブルのカラムとの対応付けを前記テナント毎に定義するマッピング情報に基づいて、前記テナントのユーザに応じたデータ操作を行う
データ操作ステップと、
前記論理テーブルのカラムについて定義を変更する操作の入力を受けた場合、前記物理テーブルのカラムは保持したまま、前記マッピング情報において削除対象のカラムと前記物理テーブルのカラムとの対応付けを削除する
テーブル定義操作ステップと、
を実行させ
、
前記テーブル定義操作ステップにおいて、
前記マッピング情報に対する変更の履歴を記憶装置に記憶させ、
前記論理テーブルに対して新たなカラムを追加する場合、前記マッピング情報に対する変更の履歴において既に前記論理テーブルのカラムと対応付けられた物理テーブルのカラムを避けて、前記論理テーブルに対して追加された新たなカラムと、前記物理テーブルのカラムとの対応づけを行う
プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本件は、情報処理装置、情報処理方法及びプログラムに関する。
【背景技術】
【0002】
従来、マルチテナントデータベースにおいて複数のテナントが共有する単一の物理テーブルに対してデータ操作を行う情報処理装置が提案されている(例えば、特許文献1)。本情報処理装置は、テナント毎に定義される論理テーブルのカラムと前記単一の物理テーブルのカラムとの対応付けを前記テナント毎に定義するマッピング情報に基づき、前記論理テーブルにおけるレコードを前記単一の物理テーブルにおける第1のレコード及び当該第1のレコードとは前記カラムのデータ型の組み合わせが異なる第2のレコードに分解し、前記論理テーブルにおける前記分解されたレコードの各カラムのデータを前記第1のレコードと前記第2のレコードにおける、前記分解されたレコードの各カラムと同じデータ型のカラムに登録すると共に、前記第1のレコードと前記第2のレコードとの接続関係を示す情報を付与して登録する登録部と、前記マッピング情報及び前記接続関係を示す情報に基づき、前記第1のレコード及び前記第2のレコードを前記単一の物理テーブルから読み出し、結合して出力する抽出部とを備える。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
マルチテナントデータベースにおいて複数のテナントが単一の物理テーブルを共有する場合、例えばあるテナントユーザのデータ操作に起因して誤ったデータ削除が行われたときは、容易にはテーブル全体をロールバックさせることができないという問題があった。すなわち、他のテナントユーザの正常なデータにも影響が及ぶため、物理テーブル全体を過去の状態に戻すことが実際的でない。また、上述のように、汎用的な物理テーブルを複数のテナントが所望の論理テーブルとして利用するような場合には、テーブルの追加や削除、カラム単位の変更のたびに1つの物理テーブルに対するテーブル操作が生じるところ、複数のテナントが物理テーブルを共有しているため特に誤操作の取消しを行う際の影響が及ぶ範囲がテナントごとに別個のテーブルを作成させる場合と比べて大きくなってしまうという問題があった。
【0005】
そこで、本発明は、マルチテナントデータベースにおいて複数のテナントが単一の物理テーブルを共有する場合において、特にカラムの定義の変更の取消し操作を容易にするための技術を提供することを目的とする。
【課題を解決するための手段】
【0006】
本発明の一側面に係る情報処理装置は、マルチテナントデータベースにおいて複数のテナントが共有する物理テーブルに対してデータ操作を行う。具体的には、情報処理装置は、テナント毎に定義される論理テーブルのカラムと物理テーブルのカラムとの対応付けをテナント毎に定義するマッピング情報に基づいて、テナントのユーザに応じたデータ操作を行うデータ操作部と、論理テーブルのカラムについて定義を変更する操作の入力を受けた場合、物理テーブルのカラムは保持したまま、マッピング情報において削除対象のカラムと物理テーブルのカラムとの対応付けを削除するテーブル定義操作部とを備える。
【0007】
カラムの削除を、マッピング情報の変更により論理的に行うため、例えば削除の取消しを行う場合において、物理テーブルへの影響を抑えることができる。すなわち、マルチテナントデータベースにおいて複数のテナントが単一の物理テーブルを共有する場合において、特にカラムの削除の取消し操作を容易にするための技術を提供することができる。
【0008】
また、テーブル定義操作部は、マッピング情報に対する変更の履歴を記憶装置に記憶させるようにしてもよい。このようにすれば、履歴に基づいてマッピング情報を過去の状態に復元することができる。
【0009】
また、テーブル定義操作部は、論理テーブルに対して新たなカラムを追加する場合、マッピング情報に対する変更の履歴において既に論理テーブルのカラムと対応付けられた物理テーブルのカラムを避けて、論理テーブルに対して追加された新たなカラムと、物理テーブルのカラムとの対応づけを行うようにしてもよい。このようにすれば、論理テーブルから削除されたカラムのフィールドに保持されていたデータを、物理テーブルにおいては保持させておくことができる。
【0010】
また、テーブル定義操作部は、定義を変更した論理テーブルのカラムについて変更を取り消す操作の入力を受けた場合、マッピング情報において削除したカラムと物理テーブルのカラムとの対応付けを登録するようにしてもよい。このようにすれば、論理テーブルから削除されたカラムを復元することができる。また、論理テーブルから削除されたカラムのフィールドに保持されていたデータを、物理テーブルにおいては保持させてあれば、カラムの復元と同時に当該カラムのフィールドに保持されていたデータも復元することができる。
【0011】
また、テーブル定義操作部は、デフラグの指示を受けた場合、論理テーブルのカラムと対応付けられていない物理テーブルのカラムのフィールドからデータを削除し、論理テーブルのカラムに対して物理テーブルのカラムを対応付けし直すようにしてもよい。このようにすれば、物理テーブルの利用を効率的にすることができる。
【0012】
上記課題を解決するための手段の内容は、本発明の課題や技術的思想を逸脱しない範囲で可能な限り組み合わせることができる。また、上記手段をコンピュータが実行する方法を実施したり、上記手段をコンピュータに実行させるプログラムを提供等したりするようにしてもよい。プログラムは、コンピュータが読み取り可能な記録媒体に記録して提供するようにしてもよい。コンピュータが読み取り可能な記録媒体とは、情報を電気的、磁気的、光学的、機械的、又は化学的作用によって蓄積し、コンピュータによって読み取ることができる記録媒体をいう。このような記録媒体のうち、コンピュータから取り外し可能なものとしては、例えば光ディスク、光磁気ディスク、フレキシブルディスク、磁気テープ、メモリカード等がある。また、コンピュータに固定された記録媒体としてHDD(Hard Disk Drive)、SSD(Solid State Drive)、ROM(Read Only Memory)等がある。
【発明の効果】
【0013】
本発明によれば、マルチテナントデータベースにおいて複数のテナントが単一の物理テーブルを共有する場合において、特にカラムの定義の変更の取消し操作を容易にするための技術を提供することができる。
【図面の簡単な説明】
【0014】
【
図2】マルチテナントサーバ及びテナント装置の一例を示すブロック図である。
【
図3】物理テーブルのテーブル構造の一例を示す図である。
【
図4】テナントAがマルチテナントサーバに保持させる論理テーブルと格納データの一例である。
【
図5】テナントAがマルチテナントサーバに保持させる論理テーブルと格納データの一例である。
【
図6】テナントBがマルチテナントサーバに保持させる論理テーブルと格納データの一例である。
【
図7】メタデータとして登録される内容の一例を示す表である。
【
図8】メタデータとして登録される内容の一例を示す表である。
【
図9】メタデータとして登録される内容の一例を示す表である。
【
図10】物理テーブルに格納されるレコードの一例を示す図である。
【
図11】メタデータの設定により論理テーブルを作成する設定処理の一例を示す処理フロー図である。
【
図12】データ操作処理の一例を示す処理フローである。
【
図13】定義変更処理の一例を示す処理フロー図である。
【
図14】テーブル構造を変更した後の論理テーブルの一例を示す図である。
【
図15】テーブル構造を変更した後のマッピング情報の一例を示す図である。
【
図16】テーブル構造を変更した後の物理テーブルの一例を示す図である。
【
図17】定義復元処理の一例を示す処理フロー図である。
【
図18】テーブル構造を復元した後のマッピング情報の一例を示す図である。
【
図19】テーブル構造を復元した後のマッピング情報の他の例を示す図である。
【
図20】テーブル構造を復元した後の論理テーブルの一例を示す図である。
【
図21】デフラグを行った後のマッピング情報の一例を示す。
【発明を実施するための形態】
【0015】
以下、図面を参照して本発明を実施するための形態について説明する。
【0016】
<システム構成>
図1は、システムの概略構成の一例を示す図である。
図1の例では、本発明に係るマルチテナントサーバ1と、テナント装置2(
図1においては、「2a」、「2b」、・・・)とが、ネットワーク3を介して接続されている。マルチテナントサーバ1は、複数のテナントユーザに対して、共通したハードウェアリソース及びソフトウェアリソースを使用させるマルチテナントサービスを提供する装置である。マルチテナントサーバ1は、所定のテーブル構造(「データベース構造」又は「スキーマ」とも呼ぶ)を有する物理テーブルを、複数のテナントユーザに使用させる。テナント装置2は、マルチテナントサービスを利用する企業の社員等のようなテナントユーザが使用する装置である。便宜上、テナント装置2aはあるテナントAの端末であり、テナント装置2bは他のテナントBの端末であるものとする。テナントの数は2つには限られず、複数のテナント装置2が存在し得る。各テナント装置2は、ネットワーク3を介してマルチテナントサーバ1と通信可能に接続され、データ操作を要求したり、処理結果を受け取ったりする。
【0017】
<装置構成>
図2は、マルチテナントサーバ1及びテナント装置2の一例を示すブロック図である。
【0018】
マルチテナントサーバ1は、一般的なコンピュータであり、通信インターフェース(I/F)11と、入出力装置12と、記憶装置13と、演算装置14と、バス15とを備える。通信I/F11は、例えば有線のネットワークカードや無線の通信モジュール等であり、所定のプロトコルに基づき通信を行う。入出力装置12は、例えばキーボードやマウス、ディスプレイ等のユーザインターフェースであり、入力装置と出力装置(例えば、表示装置)とを含む。また、タッチパネルのように入力装置と出力装置とが組み合わされていてもよい。
【0019】
記憶装置13は、RAM(Random Access Memory)、ROM(Read Only Memory)等の主記憶装置や、HDD(Hard-disk Drive)、SSD(Solid State Drive)、フラッシュメモリ等の補助記憶装置(二次記憶装置)を含む。主記憶装置は、プロセッサが読み出したプログラムを一時的に記憶したり、プロセッサの作業領域を確保したりする。補助記憶装置は、プロセッサが実行するプログラムや、各テナントの業務で使用するデータ等を記憶する。
図2の例では、記憶装置13内に機能ブロックを示している。具体的には、記憶装置13は、物理テーブル131と、メタデータ132とを含む。物理テーブル131は、各テナントのデータを、例えば共通のテーブル構造を有する物理的なファイルとしてデータレコードを格納するRDB(Relational Database)のテーブルに格納する。テーブ
ル構造は、例えばDBMS(Database Management System)がサポートするデータ定義言語で定義される。なお、物理テーブル131は、いわゆるインメモリデータベースであってもよい。また、いわゆるNoSQLのようなデータモデルのデータベースであってもよい。メタデータ132は、各テナントに固有のテーブルの論理構造と、上述した物理テーブル131のテーブル構造との対応付けを定義するマッピング情報を含む。本実施形態では、物理テーブル131は各テナントが共通に使用する汎用的なテーブル構造を有している。そして、メタデータにおいて、論理テーブルの属性(「カラム」、「列」とも呼ぶ)に対し、物理テーブル131のカラムを割り当てる。このとき、論理テーブルにおいて必要なデータ型の属性を物理テーブル131の中から割り当てるものとする。
【0020】
演算装置14は、CPU(Central Processing Unit)等のプロセッサであり、プログ
ラムを実行することにより本実施の形態に係る各処理を行う。
図2の例では、演算装置14にも機能ブロックを示している。具体的には、演算装置14は、DBMS141、データ操作部142及び定義操作部143として機能する。DBMS141は、RDBのようなデータベースの運用管理に必要な機能を提供するシステムであり、物理テーブル131に対してレコードを生成、更新、削除、検索等する。なお、DBMS141は、様々なベンダーが提供する既存の製品を利用することができる。データ操作部142は、各テナントに固有のテーブルに対する操作の指示を各テナントのユーザから受け、物理テーブル131に対する命令に変換し、DBMS141に操作させる。例えば、データ操作部142は、メタデータ132が記憶するマッピング情報に基づいて、テナント装置2から受け付けたデータ操作要求を、DBMSにおいて実行可能なデータ操作命令(「クエリ」、「問合せ」とも呼ぶ)に変換する。定義操作部143は、各テナントのユーザの操作に基づき、各テナントに固有のテーブルの論理的なテーブル構造等を生成、更新、削除する。以上のような構成要素が、所定の形式の信号線であるバス15を介して接続されている。
【0021】
また、テナント装置2も、一般的なコンピュータであり、通信インターフェース(I/F)21と、入出力装置22と、記憶装置23と、演算装置24と、バス25とを備える。通信I/F21は、例えば有線のネットワークカードや無線の通信モジュール等であり、所定のプロトコルに基づき通信を行う。入出力装置22は、例えばキーボードやマウス、ディスプレイ等のユーザインターフェースであり、入力装置と出力装置(例えば、表示装置)とを含む。また、タッチパネルのように入力装置と出力装置とが組み合わされていてもよい。
【0022】
記憶装置23は、RAM、ROM等の主記憶装置や、HDD、SSD、フラッシュメモリ等の補助記憶装置を含む。主記憶装置は、プロセッサが読み出したプログラムを一時的に記憶したり、プロセッサの作業領域を確保したりする。補助記憶装置は、プロセッサが実行するプログラムや、マルチテナントサーバ1との間で送受信される情報等を一次的に又は永続的に記憶する。
【0023】
演算装置24は、CPU等のプロセッサであり、プログラムを実行することにより本実
施の形態に係る各処理を行う。
図2の例では、演算装置24に機能ブロックを示している。具体的には、演算装置24は、入出力制御部241として機能する。入出力制御部241は、入出力装置22を介してユーザの操作を受け付け、マルチテナントサーバ1へデータ操作を要求したり、マルチテナントサーバ1から結果を受信してユーザに提示したりする。以上のような構成要素が、所定の形式の信号線であるバス25を介して接続されている。
【0024】
<テーブル構造>
図3は、物理テーブルのテーブル構造の一例を示す図である。物理テーブル131のテーブル構造は、各テナントが共通に使用する汎用的なものであり、テナントID(TenantID)、タイプID(TypeID)、データID(DataID)、ページID(PageID)、文字列型の項目1(Char1)、文字列型の項目2(Char2)、数値型の項目1(Num1)、数値型の項目2(Num2)、日付型の項目1(Date1)、日付型の項目2(Date2)等の属性(カラム)を含む。また、属性名の下に括弧書きでデータ型の一例が示されている。すなわち、テナントID、タイプID、データID、文字列型の項目1、2は、例えば文字列型の属性である。ページID、数値型の項目1、2は、例えば数値型の属性である。また、日付型の項目1、2は、例えば日付型の属性である。なお、各属性のデータサイズ(「データ長」とも呼ぶ)は任意であり、可変長としてもよいし、固定長としてもよい。
【0025】
テナントIDのフィールドには、マルチテナントサーバ1を使用するテナントを識別するための識別情報が登録される。テナント装置2のユーザがマルチテナントサーバ1を利用する際、テナントの識別情報であるテナントID及びパスワードを用いて認証処理を行うものとする。そして、各テナントは物理テーブル131に登録されたレコードのうち、テナントIDのフィールドに自身の識別情報が登録されたレコードに対して選択、更新、削除等の操作を行うことができる。また、各テナントが物理テーブル131に新たなレコードを挿入する場合、テナントIDのフィールドには自身の識別情報を登録するものとする。
【0026】
タイプIDのフィールドには、各テナントにおいて論理テーブルを識別するための識別情報が登録される。また、データIDのフィールドには、各論理テーブルにおいてレコードを一意に特定するための識別情報が登録される。各論理テーブルにおいてレコードを一意に特定できるようにデータIDの値を付与(採番)すれば、テナントID、タイプID及びデータIDの複合キーによって各テナントの論理テーブルにおけるレコードを一意に特定できる。なお、他のテナントを含めた全ての論理テーブルにおいてレコードを一意に特定できるようにデータIDの値を付与するようにしてもよい。
【0027】
ページIDのフィールドには、論理テーブルにおける属性が物理テーブル131に予め定義された属性には収まらない場合において、論理テーブルの1レコードに含まれる属性を複数のレコードに分解して物理テーブル131に登録するときの、分解後の複数のレコードに付与される通し番号を表す情報が登録される。すなわち、各テナントが定義する論理テーブルの1レコードは、物理テーブル131の1レコードで保持できない場合がある。例えば、物理テーブル131のカラム数の方が論理テーブルのカラム数よりも少ない場合は論理テーブルの1レコードを物理テーブル131の1レコードでは保持することができない。また、あるデータ型の属性について、物理テーブル131に予め用意された属性の数の方が、論理テーブルに定義された属性の数よりも少ない場合も、論理テーブルの1レコードを物理テーブルの1レコードで保持することができない。このような場合、論理テーブルにおける1レコードを、物理テーブル131における2以上のレコードに分解して保持する。このため、物理テーブル131は、複数のレコードの接続関係(「ページ」とも呼ぶ)を示す属性を含む。そして、データID及びページIDによって、論理テーブルの属性を一意に特定することができ、物理テーブル131に登録された複数のレコード
から論理テーブルにおける元のレコードを復元できる。
【0028】
また、文字列型の項目1、文字列型の項目2、数値型の項目1、数値型の項目2、日付型の項目1、日付型の項目2・・・のフィールドには、各々に対応付けられた論理テーブルの各属性のフィールドに登録された値が登録される。なお、
図3はテーブル構造を簡略化した例であり、物理テーブル131は、他のデータ型の属性をさらに有していてもよいし、
図3に示すデータ型の属性を3列以上有していてもよい。また、物理テーブル131に設けられる各データ型のカラム数は、同数でなくてもよい。例えば、物理テーブル131には、文字列型のカラムを30列、数値型のカラムを10列、日付型のカラムを5列設けるような定義が可能である。なお、論理テーブルの属性と物理テーブル131の属性との対応付けは、テナント毎に予めメタデータにおいて定義される。
【0029】
図4~
図6は、テナントA又はテナントBがマルチテナントサーバ1に保持させる論理テーブルと格納データの一例である。
図4は、テナントAが管理するユーザテーブルに登録されるレコードの一例を示す表である。ユーザテーブルは、「名前」、「性別」、「身長」、「体重」及び「誕生日」の各属性を有する。また、
図4~
図6においては、属性名の下に括弧書きでデータ型の一例を示している。すなわち、例えば、「名前」及び「性別」が文字列型、「身長」及び「体重」が固定小数点型、「誕生日」が日付型である。
【0030】
図5は、テナントAが管理する部署テーブルに登録されるレコードの一例を示す表である。部署テーブルは、「部署名」及び「部署種別」の各属性を有する。なお、データ型は、例えば、「部署名」及び「部署種別」とも文字列型である。
【0031】
図6は、テナントBが管理する商品テーブルに登録されるレコードの一例を示す表である。商品テーブルは、「商品名」、「商品種別」、「単位名」、「価格」及び「発売日」の各属性を有する。なお、データ型は、例えば、「商品名」、「商品種別」、「単位名」が文字列型、「価格」が整数型、「発売日」が日付型である。
【0032】
図7~
図9は、メタデータとして登録される内容の一例を示す表である。メタデータは、例えばDBMS上のテーブル又はファイルシステム上のファイルとして保持される。また、メタデータには、テナント(例えば「テナントA」、「テナントB」等)、論理テーブル(例えば「ユーザテーブル」、「部署テーブル」、「商品テーブル」等)、及び履歴(バージョン)に対応づけて、論理テーブルのテーブル構造と物理テーブルのテーブル構造との対応関係を表す情報が登録される。履歴は、当該論理テーブルの改訂の段階を特定するための識別情報であり、数字や日時等で表される。
【0033】
図7の例では、論理テーブルの「名前」、「性別」、「身長」、「体重」及び「誕生日」の各属性が、それぞれ物理テーブルのページID「1」における「Char1」、「Char2」、「Num1」、「Num2」及び「Date1」に対応付けられている。
図8の例では、論理テーブ
ルの「部署名」及び「部署種別」の各属性が、それぞれ物理テーブルのページID「1」における「Char1」及び「Char2」に対応付けられている。
図9の例では、論理テーブルの「商品名」、「商品種別」、「価格」及び「発売日」の各属性が、それぞれ物理テーブルのページID「1」における「Char1」、「Char2」、「Num1」、「Date1」に対応付けら
れ、論理テーブルの「単位名」の属性が物理テーブルのページID「2」における「Char1」に対応付けられている。
【0034】
図9に示すように、論理テーブルの1レコードを複数のレコードに分解して物理テーブル131に登録する場合がある。すなわち、商品テーブルには「商品名」、「商品種別」及び「単位名」という3つの文字列型の属性が存在するところ、物理テーブルの文字列型の属性は、「Char1」及び「Char2」の2つであり、商品テーブルに含まれる属性は、物理
テーブルの1レコードに対応付けることができない。そこで、商品テーブルの1レコードを、「商品名」、「商品種別」、「価格」及び「発売日」と、「単位名」とに分け、物理テーブルにおける2つのレコードに対応付けている。このとき、2つのレコードは、ページIDの値で識別する。
【0035】
図10は、物理テーブルに格納されるレコードの一例を示す図である。
図10は、
図3にテーブル構造を示した物理テーブル131に対し、
図7~
図9に示したメタデータに基づいて、
図4~
図6に示した複数のテナントの論理テーブルに登録されるレコードを格納する例を表す。例えば、
図10において、「DataID」のフィールドに「001」が登録され、「PageID」のフィールドに「1」が登録されたレコードは、
図4に示したユーザテーブルの1レコード目に登録された情報を、
図7に示したメタデータに基づいて物理テーブル131の対応する属性のフィールドに格納したものである。また、
図10において、「DataID」のフィールドに「005」が登録され、「PageID」のフィールドに「1」及び「2」が登録された2つのレコードは、
図6に示した商品テーブルの1レコード目に登録された情報を、
図7に示したメタデータに基づいて2つのレコードに分割し、物理テーブル131に格納される、対応するページIDのレコードの、対応する属性のフィールドに格納したものである。
【0036】
以上のように、本実施形態では、原則的にテナント毎に論理テーブルやメタデータが定義され、業務データなどのデータレコードは、複数のテナントが共通で使用する物理テーブル131に格納される。ただし、各テナントが共通に利用するマスターデータを用意するようにしてもよい。例えば、郵便番号と住所の一部を対応付けて記憶する郵便番号マスタを、各テナントに共通のメタデータで保持する。このような郵便番号マスタの内容は郵便制度の規格によって決まるため、各テナントに同一のものを利用させる方が効率的である。共通のメタデータは、例えばマルチテナントサーバ1の管理者が一元管理し、物理テーブル131に所定のテナントIDと対応付けて格納するようにしてもよいし、ファイルシステム上のファイルに格納するようにしてもよい。
【0037】
<テーブル構造定義処理>
図11は、メタデータの設定により論理テーブルを作成する設定処理の一例を示す処理フロー図である。テナント装置2の入出力制御部241は、入出力装置22を介してテナントのユーザによりテーブルの作成を要求する操作を受け付け、通信I/F21を介してマルチテナントサーバ1へテーブル作成要求を送信する(
図11:S1)。本ステップでは、
図4~
図6に示したような論理テーブルを作成するための要求を受け付ける。例えば、要求はSQLにおけるCREATE文によって当該論理テーブルを作成するための命令が記述され、所望の論理テーブルのテーブル構造を含む。
【0038】
一方、マルチテナントサーバ1の定義操作部143は、通信I/F11を介して要求を受信すると(
図11:S2)、論理テーブルの属性に対応付けて物理テーブルのカラムを割当てる(
図11:S3)。例えば、定義操作部143は、
図3~
図6に示したような論理テーブルのテーブル構造を受信すると、当該テーブルに含まれる属性を抽出すると共に、当該属性とデータ型が同じであって未割当ての属性を物理テーブルから抽出し、両者を対応付けて記憶させることで、
図7~
図9に示したようなマッピング情報を作成する。そして、作成したマッピング情報を、記憶装置13のメタデータ132に格納する(
図11:S4)。
【0039】
また、定義操作部143は、マッピング情報を登録した旨の操作結果をテナント装置2に送信し(
図11:S5)、テナント装置2の入出力制御部241は、操作結果を受信する(
図11:S6)。なお、入出力制御部241は、入出力装置22に操作結果を出力させるようにしてもよい。以上で、テーブル構造定義処理を終了する。
【0040】
<データ操作処理>
図12は、データ操作処理の一例を示す処理フローである。なお、マルチテナントサーバ1は、テナント装置2から接続の要求を受ける際、まず所定の認証処理を行うことでテナントを識別しているものとする。また、予めメタデータ記憶部には
図7~
図9に示したメタデータが保持されているものとする。
【0041】
テナント装置2の入出力制御部241は、入出力装置22を介してテナントのユーザにより、データ操作を要求する操作を受け付け、通信I/F21を介してマルチテナントサーバ1へデータ操作要求を送信する(
図12:S11)。データ操作とは、例えば、論理テーブルへのデータレコードの挿入、更新、削除、選択の少なくともいずれかである。要求は、例えば、論理テーブルに対し、SQL等の問合せ言語によるクエリとして受け付ける。
【0042】
一方、マルチテナントサーバ1のデータ操作部142は、テナント装置2からデータ操作に係る要求を受信する(
図12:S12)。そして、データ操作部142は、メタデータ132に格納されているマッピング情報に基づいて、データ操作に係る要求を物理テーブル131に対する要求に変換する(
図12:S13)。本ステップでは、
図7~
図9に示したメタデータに基づき、クエリの内容を修正する。
【0043】
具体的には、「TenantID」の値が要求元のテナントの識別情報と一致するレコードを操作の対象とするよう、データ操作に係る要求に条件を付加する。また、操作対象のテーブルを物理テーブル131に変更するため、変換前の要求における操作対象の論理テーブルの指定を、「TypeID」に登録された値の指定に置き換える。さらに、変換前の要求における属性名を、物理テーブル131における属性名と「PageID」の値との組合せに置き換える。
【0044】
例えば、テナントBが検索を行うために次のようなクエリ1Aを送信する例について説明する。
(クエリ1A)
SELECT 商品名, 商品種別, 単位名, 価格, 発売日 FROM 商品テーブル WHERE 商品種別=
’食品’;
この例は、商品テーブルから「商品種別」の値が「食品」のレコードを抽出し、「商品名」、「商品種別」、「単位名」、「価格」及び「発売日」の各フィールドの値を表示させる要求である。そして、クエリ1Aは、データ操作部によって、次のようなクエリ1Bに変換される。なお、物理テーブル131の物理名は「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;
【0045】
この例では、「PageID」の値が1のレコードと「PageID」の値が2のレコードとを自己結合させている。また、
図9のメタデータに基づき、論理テーブルの「商品種別」は物理テーブル131において「PageID」が1の「Char2」(すなわち、p1.Char2)に変換され
ている。なお、DBMS141からは「PageID」が1のレコードと2のレコードとをそれぞれ抽出し、データ操作部142が仮想的な1つのレコードに結合するという構成にしてもよい。また、「PageID」の値が3以上のレコードがある場合、変換後のクエリにおいて3つ以上のレコードを自己結合させることも可能である。
【0046】
次に、テナントBがレコード数の計数を行うために次のようなクエリ2Aを送信する例について説明する。
(クエリ2A)
SELECT COUNT(*) FROM 商品テーブル WHERE 商品種別=’食品’;
【0047】
クエリ2Aは、データ操作部142によって、次のようなクエリ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;
【0048】
この例でも、「PageID」が2のレコードを自己結合させ、「PageID」が1のレコードを選択(SELECT)している。また、
図8のメタデータに基づき、論理テーブルの「商品種別」は物理テーブル131において「PageID」が1の「Char2」(すなわち、p1.Char2)に
変換されている。なお、DBMS141からは「PageID」が1のレコードと2のレコードとをそれぞれ抽出し、データ操作部142が仮想的な1つのレコードに結合して計数するという構成にしてもよい。
【0049】
次に、テナントBがレコードの挿入(INSERT)を行うために次のようなクエリ3Aを送信する例について説明する。
(クエリ3A)
INSERT INTO 商品テーブル VALUES(‘テレビ’, ‘家電’, ‘台’, 30000, 7/29);
【0050】
クエリ3Aは、データ操作部142によって、次のようなクエリ3B及びクエリ3Cに変換される。なお、要求を受け付けた時点において、物理テーブル131には「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, ‘台’);
【0051】
レコードの挿入の場合、データ操作部142はメタデータを参照し、論理テーブルにおける1レコードが物理テーブル131における複数のレコードに対応付けられている場合、「PageID」ごとに挿入を行うクエリを生成する。上記の例では、「PageID」が「1」のレコード(第1のレコード)を挿入するクエリ3B、及び「PageID」が「2」のレコード(第2のレコード)を挿入するクエリ3Cが生成されている。
【0052】
なお、テナントAのレコードのように論理テーブルにおけるレコードが物理テーブル131においても分解されずに登録されている場合は、「PageID」は「1」のみであるため、結合や分解を行う必要はない。また、レコードの更新については、要求に対し選択と同様の変換を行い、条件に該当するレコードを更新するクエリを生成する。レコードの削除については、例えば、条件に該当するレコードと「DataID」の値が同一のレコードを削除するクエリを生成する。
【0053】
その後、マルチテナントサーバ1のDBMS141は、物理テーブル131に対しデータ操作を実行する(
図12:S14)。本ステップでは、DBMS141が物理テーブル131に対し変換後のクエリを発行して挿入、選択、更新、削除等のデータ操作を行う。また、データ操作部142は、メタデータ132に格納されたマッピング情報に基づいてデータ操作の結果を変換する(
図12:S15)。ここでは、例えば、物理テーブル131のカラム名を論理テーブルのカラム名に置き換える。
【0054】
そして、マルチテナントサーバ1のデータ操作部142は、通信I/F11を介して要求元のテナント装置2に対して結果を送信し(
図12:S16)、テナント装置2の入出力制御部241は、変換後の結果を受信する(
図12:S17)。入出力制御部241は、受信した結果を、例えばモニタ等の入出力装置22に出力させるようにしてもよい。
【0055】
<テーブル構造変更処理>
図13は、定義変更処理の一例を示す処理フロー図である。テナント装置2の入出力制御部241は、入出力装置22を介してテナントのユーザによりテーブル構造の変更又はテーブルの削除を要求する操作を受け付け、通信I/F21を介してマルチテナントサーバ1へテーブル構造の変更要求を送信する(
図13:S21)。本ステップでは、論理テーブルに属性を追加又は削除したり、論理テーブル全体を削除したりするための要求が送信されるものとする。例えば、要求はSQLにおけるALTER TABLE文によって記述され、所望の論理テーブル構造に関する記述を含む。
【0056】
一方、マルチテナントサーバ1の定義操作部143は、通信I/F11を介して要求を受信すると(
図13:S22)、必要に応じて論理テーブルの属性に対応付けて物理テーブルのカラムを割当てる(
図13:S23)。例えば、既存のテーブルに新たな属性を追加するような場合、新たな属性に物理テーブル131の属性を対応付ける。
【0057】
図14は、テーブル構造を変更した後の論理テーブルの一例を示す図である。例えばテナントAのユーザは、
図3に示したユーザテーブルを、
図14に示すテーブル構造に変更するものとする。すなわち、
図3に示したユーザテーブルから「性別」の属性を削除し、「国籍」の属性を「誕生日」の属性の次に追加する。なお、「国籍」のフィールドに登録されているデータ「日本」は、例えば、テーブル構造の変更とは別にデータ操作により更新される情報である。この場合、定義操作部143は、論理テーブルに新たに追加する属性に対し、物理テーブルにおけるデータ型が同じ属性を対応付ける。なお、本実施形態では、定義操作部143は、各論理テーブルのメタデータを参照し、物理テーブルの属性のうち過去の履歴においても未割当ての属性を原則的に対応付けるものとする。また、物理テーブルにおいて、論理テーブルに新たに追加される属性を割当てるための属性が不足する場合は、ページIDをインクリメントして物理テーブルの属性を割当てる。また、定義操作部143は、メタデータを更新し、新たな論理テーブルに関する履歴情報を記憶させる(
図13:S24)。
【0058】
図15は、テーブル構造を変更した後のマッピング情報の一例を示す図である。
図7に示したマッピング情報と比較すると、
図15の例では、履歴の値がインクリメントされ、論理テーブルにおける「性別」の属性が削除されると共に、論理テーブルにおける「国籍」の属性に対応付けて、物理テーブルのページIDが「2」且つ対応属性名が「Char1」
の属性が登録されている。したがって、メタデータにより論理テーブルからは「性別」の属性が論理的に削除される。一方、論理テーブルから削除された「性別」の属性に対応付けられていた、物理テーブルのページID「1」のレコードの対応属性名「Char2」の属
性に関しては、原則的に再割り当てを行わない。そして、物理テーブル131においては、「性別」に対応付けられていたページID「1」のレコードの対応属性名「Char2」の
フィールドに格納されていたデータは、物理テーブル131から削除も上書きもされずに残る。
【0059】
図16は、テーブル構造を変更した後の物理テーブルの一例を示す図である。
図16の例は、上述した履歴「2」のメタデータに基づいて、テーブル構造を変更した後の物理テーブル
図16に示すように、ユーザテーブルの属性「国籍」のフィールドに登録されるデータ「日本」は、ページID「1」のレコードの属性「Char2」に上書きされるのではな
く、ページID「2」のレコードの属性「Char1」に格納される。
【0060】
また、定義操作部143は、テーブル定義を更新した旨の操作結果をテナント装置2に送信し(
図13:S25)、テナント装置2の入出力制御部241は、操作結果を受信する(
図13:S26)。なお、入出力制御部241は、入出力装置22に操作結果を出力させるようにしてもよい。以上で、テーブル構造定義処理を終了する。
【0061】
<テーブル構造復元処理>
図17は、定義復元処理の一例を示す処理フロー図である。テナント装置2の入出力制御部241は、入出力装置22を介してテナントのユーザにより、テーブル構造について過去の履歴の状態への復元を要求する操作を受け付け、通信I/F21を介してマルチテナントサーバ1へテーブル構造の変更要求を送信する(
図17:S31)。本ステップでは、例えば、所望の論理テーブルのメタデータを参照し、過去の履歴の一覧をユーザに提示すると共に、ユーザが指定する履歴を取得する。例えば、テナントAのユーザがユーザテーブルのテーブル構造を、
図7に示した履歴「1」の状態に復元したものとして説明する。
【0062】
一方、マルチテナントサーバ1の定義操作部143は、通信I/F11を介して要求を受信すると(
図17:S32)、指定された履歴に基づいてメタデータを更新する(
図17:S33)。例えば、履歴の値をインクリメントし、指定された過去の履歴のテーブル定義と同様のマッピング情報を新たに登録する。
【0063】
図18は、テーブル構造を復元した後のマッピング情報の一例を示す図である。
図18の例では、履歴の値がインクリメントされ、その他のマッピング情報は
図7に示した履歴「1」のマッピング情報が復元されている。したがって、メタデータにより論理テーブルからは「国籍」の属性が論理的に削除され、履歴「2」のマッピング情報においては削除された「性別」の属性が元の位置に復元されている。テーブル構造の復元処理においても、物理テーブル131のフィールドに格納されている情報は変更されない。物理テーブル131において論理テーブルの属性「性別」に対応付けられていた、ページID「1」のレコードの対応属性名「Char2」のフィールドに格納されていたデータは、
図15に示し
た履歴「2」へのテーブル構造変更時にもそのまま残されているため、
図18に示した履歴「3」へのテーブル構造変更後にユーザが論理テーブルを参照した場合は、論理テーブルから「性別」の属性を削除する前に、「性別」のフィールドに登録されていたデータが復元されることになる。すなわち、テーブル構造の復元後に論理テーブルである「ユーザテーブル」の全レコードを選択すると、
図4に示したようなレコードが抽出される。
【0064】
また、定義操作部143は、テーブル定義を復元した旨の操作結果をテナント装置2に送信し(
図17:S34)、テナント装置2の入出力制御部241は、操作結果を受信する(
図17:S26)。なお、入出力制御部241は、入出力装置22に操作結果を出力させるようにしてもよい。以上で、テーブル構造定義処理を終了する。
【0065】
<効果>
一般的に、複数のテナントが単一の物理テーブルを共有する場合、物理テーブルのロー
ルバックのような処理は多くのテナントへ影響が及ぶため実施しづらい。本実施形態によれば、論理テーブルにおける属性の削除をマッピング情報の変更により論理的に行い、物理テーブル131においては属性及びそのフィールドに格納されたデータを物理的には削除しない。よって、論理テーブルにおける属性の復元時には、マッピング情報の変更により、属性の削除前にフィールドに格納されていたデータを読み出すことができるようになる。このように、本実施形態に係るテーブル構造変更処理及びテーブル構造復元処理によれば、マルチテナントデータベースにおいて複数のテナントが単一の物理テーブルを共有する場合において、属性の削除の取消し操作を容易にすることができる。
【0066】
<変形例>
上述した実施形態の構成は例示であり、本発明の要旨を逸脱しない範囲において変更することができる。
【0067】
上述の実施形態は、属性のデータ型を変更する操作について適用することもできる。すなわち、
図12のS21において、ある属性についてデータ型を変更する操作が行われた場合、S23においては、物理テーブルにおいて、以前のデータ型の属性は保持しつつ、新たなデータ型の属性を追加し、フィールドに記憶されている値を以前の属性から新たな属性へコピーする。例えば、ユーザが固定小数点型の属性について整数型に変更する操作を行った場合、物理テーブルの固定小数点型の属性のフィールドに格納されていたデータを、整数型の属性のフィールドにコピーする。このとき、小数点以下の桁は切り捨てられる。そして、S24においては、マッピング情報において、論路テーブルの属性と以前のデータ型の属性との対応づけを削除し、代わりに新たなデータ型の属性を対応付ける。また、
図13のS31において変更前の属性の復旧の要求が送信された場合は、S33において、メタデータにおける論理テーブルの属性との対応付けを物理テーブルにおける以前の属性に戻すことで、復旧処理を行うことができる。従って、固定小数点型の属性について整数型に変更し、小数点以下の桁を切り捨ててしまった場合に、変更前のデータに復元するような処理ができる。以上のように、本発明は、属性の削除や属性のデータ型の変更といった、属性について定義を変更する操作が行われた場合に、マッピング情報において論理テーブルの対象のカラムと物理テーブルの以前の属性との対応付けを削除することで、物理テーブルにおける以前の属性は復旧できるように保持しておくものである。
【0068】
また、テーブル定義の復元は、属性単位で実施できるようにしてもよい。すなわち、テナントのユーザからは属性単位で復元の指示を受け付ける。例えば、
図15に示した履歴「2」のテーブル構造の変更後に、「国籍」の属性を残しつつ、
図7に示した履歴「1」のテーブル構造に存在した「性別」の属性を復元した新たなテーブル構造を定義できるようになる。
【0069】
図19は、テーブル構造を復元した後のマッピング情報の他の例を示す図である。
図19の例では、履歴の値がインクリメントされ、「性別」の属性に関しては
図7に示した履歴「1」のマッピング情報が復元されている。このとき、「国籍」の属性に関しては
図15に示した履歴「2」のマッピング情報から変更されていない。
【0070】
図20は、テーブル構造を復元した後の論理テーブルの一例を示す図である。すなわち、テーブル構造の復元後に論理テーブルである「ユーザテーブル」の全レコードを選択すると、
図20に示したようなレコードが抽出される。
図18に示した履歴「3」へのテーブル構造変更後にユーザが論理テーブルを参照した場合は、論理テーブルから「性別」の属性を削除する前に、「性別」のフィールドに登録されていたデータが復元されることになる。また、「国籍」のフィールドに登録されていたデータは、
図14に示したものがそのまま残っている。
【0071】
また、
図7~
図9、
図15、
図17、
図18に示したメタデータは、論理テーブルのすべての属性について対応する物理テーブルの属性を対応付けたマッピング情報を含んでいる。しかし、メタデータは、履歴間の差分に係る情報のみを保持するようにしてもよい。例えば、
図15に示したメタデータに代えて、
図7に示したメタデータから論理テーブルの属性「性別」が削除され、論理テーブルの属性「国籍」が、物理テーブルのページID「2」のレコードの対応属性名「Char1」に対応付けられて追加されたことを示す情報の
みを蓄積するようにしてもよい。このようにすれば、メタデータのデータ量増加を抑えることができる。
【0072】
また、物理テーブルの属性のうち、メタデータの過去の履歴において既に割り当てがなされた属性を、再割り当てできるようにしてもよい。テーブル構造の変更を繰り返すと、物理テーブルにおいて利用される属性が断片化し、リソースの利用が非効率的になる場合がある。そこで、任意の履歴のテーブル構造に基づいて、論理テーブルの属性に対応付ける物理テーブル131の属性を、物理テーブル131の先頭から詰め直す(デフラグする)。例えば、論理テーブルの属性と対応付けられていない物理テーブルの属性のフィールドからデータを削除し、論理テーブルの属性に対して物理テーブルの属性を対応付けし直す。
【0073】
図21は、
図15に示したマッピング情報に対してデフラグを行った後のマッピング情報の一例を示す。
図21の例では、論理テーブルから削除された「性別」の属性に対応付けられていた、ページID「1」のレコードの対応属性名「Char2」のフィールドを、論
理テーブルの属性「国籍」に割り当て直している。このようにすれば、ユーザテーブルの1レコードを物理テーブル131の1レコードで格納することができ、リソースの利用を効率的にすることができる。
【0074】
本発明は上述の処理を実行するコンピュータプログラムを含む。さらに、当該プログラムを記録した、コンピュータ読み取り可能な記録媒体も本発明の範疇に属する。当該プログラムが記録された記録媒体については、コンピュータに、この記録媒体のプログラムを読み込ませて実行させることにより、上述の処理が可能となる。ここで、コンピュータ読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータから読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータから取り外し可能なものとしては、フレキシブルディスク、光磁気ディスク、光ディスク、磁気テープ、メモリカード等がある。また、コンピュータに固定された記録媒体としては、ハードディスクドライブやROM等がある。
【符号の説明】
【0075】
1 :マルチテナントサーバ
11 :通信I/F
12 :入出力装置
13 :記憶装置
131 :物理テーブル
132 :メタデータ
14 :演算装置
142 :データ操作部
143 :定義操作部
15 :バス
16 :物理テーブル
2 :テナント装置
21 :通信I/F
22 :入出力装置
23 :記憶装置
24 :演算装置
241 :入出力制御部
25 :バス
3 :ネットワーク