(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-11-09
(45)【発行日】2022-11-17
(54)【発明の名称】データベース管理システム、および、匿名加工処理方法
(51)【国際特許分類】
G06F 21/62 20130101AFI20221110BHJP
【FI】
G06F21/62 354
(21)【出願番号】P 2018219864
(22)【出願日】2018-11-26
【審査請求日】2021-11-22
【国等の委託研究の成果に係る記載事項】(出願人による申告)平成28年度、国立研究開発法人科学技術振興機構、「社会リスクを低減する超ビッグデータプラットフォーム/超高速動的スケーラブルデータベースエンジンの基盤技術の研究開発、超高速動的スケーラブルデータベースエンジンの実用化技術の研究開発」委託研究、産業技術力強化法第19条の適用を受ける特許出願
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(73)【特許権者】
【識別番号】504137912
【氏名又は名称】国立大学法人 東京大学
(74)【代理人】
【識別番号】110002365
【氏名又は名称】特許業務法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】礒田 有哉
(72)【発明者】
【氏名】茂木 和彦
(72)【発明者】
【氏名】木村 耕治
(72)【発明者】
【氏名】合田 和生
(72)【発明者】
【氏名】早水 悠登
(72)【発明者】
【氏名】喜連川 優
【審査官】平井 誠
(56)【参考文献】
【文献】特開2006-065846(JP,A)
【文献】米国特許出願公開第2006/0047696(US,A1)
【文献】再公表特許第2013/121739(JP,A1)
【文献】米国特許出願公開第2015/0033356(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/00-88
G06F 16/00-958
(57)【特許請求の範囲】
【請求項1】
属性に対する値を含む複数のタプルを含む関係表を格納するデータベースを管理するデータベース管理システムにおいて、
第一の変換規則を含む第一のクエリを受け付けるクエリ受付部と、
前記第一の変換規則に基づき前記関係表を加工し、加工した結果である第一の加工結果表を格納し、当該第一の加工結果表において所定の属性に現れる値毎にタプルの数を計算するクエリ処理部と
を有し、
第二の変換規則を含む第二のクエリを前記クエリ受付部が受け付けた場合、前記クエリ処理部が、前記第二の変換規則に基づき、前記関係表を加工し、その際に、
前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たすタプルについては、前記第一の変換規則に基づいて加工された前記第一の加工結果表からデータを取得し、
前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たさないタプルについては、前記データベースから、もしくは、前記第一の加工結果表以外に格納されている、前記関係表を加工した結果から、データを取得し、当該データを用いて前記第二の変換規則に基づき前記関係表を加工する
ことを特徴とするデータベース管理システム。
【請求項2】
請求項1に記載のデータベース管理システムであって、
前記第一の加工結果表は、前記関係表を加工した結果のうち前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満すタプルを含むものであり、
前記クエリ処理部は、前記関係表を加工した結果のうち前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満さないタプルを含む第二の加工結果表を更に格納し、
前記クエリ処理部は、前記第二の変換規則に基づき前記関係表を加工する際に、前記第二の加工結果表からデータを取得し、当該データを用いて前記関係表を加工する
ことを特徴とするデータベース管理システム。
【請求項3】
請求項2に記載のデータベース管理システムであって、
前記関係表を加工した結果に含まれるタプルのうちの前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満さないタプルの割合である欠損率が閾値を超えていた場合、または、前記第一の加工結果表の容量と前記第二の加工結果表の容量とを含む記憶装置使用容量が閾値以下であった場合に、前記クエリ処理部は、前記第二の加工結果表を更に格納する
ことを特徴とするデータベース管理システム。
【請求項4】
請求項2に記載のデータベース管理システムであって、
前記クエリ処理部は、前記関係表を加工した結果のうち前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満さないタプルの前記データベース上の格納位置を示す格納情報を格納する
ことを特徴とするデータベース管理システム。
【請求項5】
請求項4に記載のデータベース管理システムであって、
前記第一の加工結果表の容量と前記第二の加工結果表の容量とを含む記憶装置使用容量が閾値以上であった場合、または、前記関係表を加工した結果に含まれるタプルのうちの前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満さないタプルの割合である欠損率が閾値以下であった場合に、前記クエリ処理部は、前記第二の加工結果表を格納せず、前記格納情報を格納する
ことを特徴とするデータベース管理システム。
【請求項6】
請求項2に記載のデータベース管理システムであって、
前記第二のクエリの第二の変換規則に示される検索範囲が、前記第一のクエリの前記第一の変換規則に示される検索範囲に包含される場合、前記第一の加工結果表および/または前記第二の加工結果表から、データを取得し、当該データを用いて前記第二の変換規則に基づき前記関係表を加工する
ことを特徴とするデータベース管理システム。
【請求項7】
請求項1に記載のデータベース管理システムであって、
前記クエリ受付部が受け付けた複数のクエリのうち、設定された匿名加工条件と対応するクエリと、当該匿名加工条件と対応しないクエリとで、実行結果が異なる
ことを特徴とするデータベース管理システム。
【請求項8】
請求項1に記載のデータベース管理システムであって、
前記関係表を加工した結果に含まれるタプルのうちの前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満さないタプルの割合である欠損率がその下限値以上かつ上限値以下の場合に、前記クエリ処理部が、前記第一のクエリに対する実行結果を送信する
ことを特徴とするデータベース管理システム。
【請求項9】
属性に対する値を含む複数のタプルを含む関係表を格納するデータベースを管理するデータベース管理システムにおいて、
変換規則を含む
第三のクエリを受け付けるクエリ受付部と、
前記受け付けた
第三のクエリが含む変換規則に基づく第三の変換規則に基づき前記関係表を加工し、加工した結果である第三の加工結果表を格納し、当該第三の加工結果表において所定の属性に現れる値毎にタプルの数を計算するクエリ処理部と
を有し、
当該計算の結果が所定の条件を満たさない場合は、前記クエリ処理部は、第四の変換規則に基づき、前記関係表を加工し、その際に、
前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たすタプルについては、前記第三の変換規則に基づいて加工された前記第三の加工結果表からデータを取得し、
前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たさないタプルについては、前記データベースから、もしくは、前記第三の加工結果表以外に格納されている、前記関係表を加工した結果から、データを取得し、当該データを用いて前記第四の変換規則に基づき前記関係表を加工する
ことを特徴とするデータベース管理システム。
【請求項10】
請求項9に記載のデータベース管理システムであって、
前記関係表を加工した結果に含まれるタプルのうちの前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満さないタプルの割合である欠損率がその下限値以上かつ上限値以下の場合に、前記クエリ処理部が、前記第三のクエリに対する実行結果を送信し、
前記欠損率がその下限値未満もしくは上限値超過の場合に、前記クエリ処理部が、前記
第三のクエリに対する実行結果を送信せずに、前記第四の変換規則を生成し、前記第四の変換規則に基づき前記関係表を加工する
ことを特徴とするデータベース管理システム。
【請求項11】
請求項9に記載のデータベース管理システムであって、
前記クエリ受付部が前記第三のクエリを受け付ける前に受け付けた少なくも1つのクエリについて、前記クエリ処理部は、当該少なくとも1つのクエリに関連付けられている所定の変換規則と、当該所定の変換規則に基づき前記関係表を加工した結果に含まれるタプルのうちの前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満さないタプルの割合である欠損率と、前記第四の変換規則と、前記少なくとも1つのクエリに含まれる前記所定の変換規則と、前記欠損率に基づき、前記第四の変換規則に基づき前記関係表を加工するか否かを判断する
ことを特徴とするデータベース管理システム。
【請求項12】
請求項9に記載のデータベース管理システムであって、
前記第三のクエリは、前記第三の変換規則とは異なる変換規則と対応する変換規則関連情報を含み、
前記クエリ処理部は、前記変換規則関連情報に基づき、前記第四の変換規則を生成する
ことを特徴とするデータベース管理システム。
【請求項13】
請求項
9に記載のデータベース管理システムであって、
複数の変換規則を示す変換規則管理情報に示される前記複数の変換規則のうちの少なくとも一つである変換規則を前記クエリ処理部が前記第四の変換規則として生成する
ことを特徴とするデータベース管理システム。
【請求項14】
属性に対する値を含む複数のタプルを含む関係表を格納するデータベース
を管理するデータベース管理システムが実行する匿名加工処理方法において、
第一の変換規則を含む第一のクエリを受け付け、
前記第一の変換規則に基づき、前記関係表を加工し、加工した結果である第一の加工結果表を格納し、
当該第一の加工結果表において所定の属性に現れる値毎にタプルの数を計算し、
第二の変換規則を含む第二のクエリを受け付け、
前記第二の変換規則に基づき、前記関係表を加工し、その際に、
属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たすタプルについては、前記第一の変換規則に基づいて加工された前記第一の加工結果表からデータを取得し、
前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たさないタプルについては、前記データベースから、もしくは、前記第一の加工結果表以外に格納されている、前記関係表を加工した結果から、データを取得し、当該データを用いて前記第二の変換規則に基づき前記関係表を加工する
ことを特徴とする匿名加工処理方法。
【請求項15】
属性に対する値を含む複数のタプルを含む関係表を格納するデータベースを管理するデータベース管理システム
が実行する匿名加工処理方法において、
変換規則を含むクエリを受け付け、
前記受け付けたクエリが含む変換規則に基づく第三の変換規則に基づき前記関係表を加工し、加工した結果である第三の加工結果表を格納し、
当該第三の加工結果表において所定の属性に現れる値毎にタプルの数を計算し、
当該計算の結果が所定の条件を満たさない場合は、第四の変換規則に基づき、前記関係表を加工し、その際に、
属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たすタプルについては、前記第三の変換規則に基づいて加工された前記第三の加工結果表から取得し、
前記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たさないタプルについては、前記データベースから、もしくは、前記第三の加工結果表以外に格納されている、前記関係表を加工した結果から、データを取得し、当該データを用いて前記第四の変換規則に基づき前記関係表を加工する
ことを特徴とする匿名加工処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、概して、データ処理に関し、例えば、データベース管理に関する。
【背景技術】
【0002】
一般に、データベースの匿名加工処理では、あるクエリで加工した結果が匿名加工条件(例えばk値)を満たしていない場合にデータのある属性値を一般化するといった再加工が行われる。再加工の都度にデータベースからデータを取得するのでは匿名加工処理に長い時間がかかる。
【0003】
特許文献1は、予めデータベースの部分マテリアライズドビューを作成しておきクエリの処理において当該部分マテリアライズドビューを利用できる部分については当該部分マテリアライズドビューを利用する技術を開示している。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
データベースの匿名加工処理に特許文献1に開示の技術を適用することで匿名加工処理を効率化することが考えられる。
【0006】
しかし、特許文献1は、どのような部分マテリアライズドビューを作成しておくかを明確に開示していない。
【0007】
このため、データベースの匿名加工処理では特許文献1に開示の部分マテリアライズドビューを有効に利用することは困難である。
【課題を解決するための手段】
【0008】
一例としての観点によれば、属性に対する値を含む複数のタプルを含む関係表を格納するデータベースを管理するデータベース管理システム(DBMS)は、第一の変換規則を含む第一のクエリを受け付けるクエリ受付部と、第一の変換規則に基づき、関係表を加工し、加工した結果である第一の加工結果表を格納し、当該第一の加工結果表において所定の属性に現れる値毎にタプルの数を計算するクエリ処理部とを有する。第二の変換規則を含む第二のクエリをクエリ受付部が受け付けた場合、クエリ処理部が、第二の変換規則に基づき、関係表を加工する。その際に、クエリ処理部は、上記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たすタプルについては、第一の変換規則に基づいて加工された第一の加工結果表からデータを取得する。所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たさないタプルについては、クエリ処理部は、データベースから、もしくは、第一の加工結果表以外に格納されている、関係表を加工した結果から、データを取得し、当該データを用いて第二の変換規則に基づき関係表を加工する。
【0009】
別の一例としての観点によれば、属性に対する値を含む複数のタプルを含む関係表を格納するデータベースを管理するDBMSは、変換規則を含むクエリを受け付けるクエリ受付部と、受け付けたクエリが含む変化規則に基づく第三の変換規則に基づき関係表を加工し、加工した結果である第三の加工結果表を格納し、当該第三の加工結果表において所定の属性に現れる値毎にタプルの数を計算するクエリ処理部とを有する。当該計算の結果が所定の条件を満たさない場合は、クエリ処理部は、第四の変換規則を生成する。クエリ処理部は、第四の変換規則に基づき、関係表を加工する。その際に、クエリ処理部は、上記所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たすタプルについては、第三の変換規則に基づいて加工された第三の加工結果表からデータを取得する。当該所定の属性に現れる値毎のタプルの数が匿名加工に要求される条件を満たさないタプルについては、クエリ処理部は、データベースから、もしくは、第三の加工結果表以外に格納されている、関係表を加工した結果から、データを取得し、データを用いて第四の変換規則に基づき関係表を加工する。
【発明の効果】
【0010】
匿名加工に要求される条件を満たすタプルを既に実体化済の加工結果から取得することで、再加工に必要なタプル全てをデータベースから取得する必要がないため、再加工が高速である。
【図面の簡単な説明】
【0011】
【
図1】実施例1に係るDBMSを実行するDBサーバを含むシステム全体の構成例を示す図である。
【
図2】実施例1に係る匿名加工処理の流れの概要図である。
【
図3】関係表の一例と匿名加工ルール表の一例とを示す図である。
【
図4】クエリQ1、匿名加工クエリaQ1、および、クエリ応答aQ1_Aの一例を示す図である。
【
図5】クエリQ2、匿名加工クエリaQ2、および、クエリ応答aQ2_Aの一例を示す図である。
【
図7】出力中間結果および非出力中間結果の概念の一例を示す図である。
【
図8】非出力中間結果表の格納を明示した匿名加工クエリaQ1の一例を示す図である。
【
図9】履歴非利用aQ2と履歴利用aQ2とを示す図である。
【
図10】aQ履歴群の利用が可能な条件の一例を示す模式図である。
【
図12】匿名加工処理の実行と非実行のそれぞれのケースの一例を示す図である。
【
図13】実施例1に係る全体処理(クエリの受付から応答までの処理)の流れを示すフローチャートである。
【
図14】クエリプラン生成処理の流れを示すフローチャートである。
【
図15】クエリ実行処理の流れを示すフローチャートである。
【
図16】実施例2に係る匿名加工処理の流れの概要図である。
【
図17】匿名加工処理の半自動実行の一例についての説明図である。
【
図18】半自動実行の効率化の一例についての説明図である。
【
図19】実施例2に係る全体処理の流れを示すフローチャートである。
【
図20】クエリ応答処理の流れを示すフローチャートである。
【発明を実施するための形態】
【0012】
以下の説明では、データベース管理システムを「DBMS」と言い、DBMSを有するサーバを「DBサーバ」と言う。DBMSに対するクエリの発行元は、DBMSの外部のコンピュータプログラム(例えばアプリケーションプログラム)でよい。外部のコンピュータプログラムは、DBサーバ内で実行されるプログラムでもよいし、DBサーバに接続された装置(例えばクライアント)で実行されるプログラムでもよい。
【0013】
また、以下の説明では、「インターフェースユニット」は、一つ以上のインターフェースである。一つ以上のインターフェースは、一つ以上の同種のインターフェースデバイス(例えば一つ以上のNIC(Network Interface Card))であってもよいし二つ以上の異種のインターフェースデバイス(例えばNICとHBA(Host Bus Adapter))であってもよい。
【0014】
また、以下の説明では、「記憶デバイスユニット」は、一つ以上の記憶デバイスである。記憶デバイスは、揮発性メモリ(例えば、主記憶メモリ)でもよいし、不揮発性メモリ(例えば、フラッシュメモリまたはそれを有するSSD(Solid State Drive))でもよいし、ディスクデバイス(例えば、HDD(Hard Disk Drive))でもよい。記憶デバイスユニットでは、全て同種の記憶デバイスの存在でもよいし、異種の記憶デバイスの混在でもよい。
【0015】
また、以下の説明では、「プロセッサユニット」は、一つ以上のプロセッサである。少なくとも一つのプロセッサは、典型的には、CPU(Central Processing Unit)である。プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。
【0016】
また、以下の説明では、「kkk部」の表現にて機能を説明することがあるが、機能は、一つ以上のコンピュータプログラムがプロセッサユニットによって実行されることで実現されてもよいし、一つ以上のハードウェア回路(例えばFPGA(Field-Programmable Gate Array)またはASIC(Application Specific Integrated Circuit))によって実現されてもよい。プログラムがプロセッサユニットに実行されることによって機能が実現される場合、定められた処理が、適宜に記憶デバイスユニットおよび/またはインターフェースユニットを用いながら行われるため、機能はプロセッサユニットの少なくとも一部とされてもよい。機能を主語として説明された処理は、プロセッサユニットあるいはそのプロセッサユニットを有する装置が行う処理としてもよい。プログラムは、プログラムソースからインストールされてもよい。プログラムソースは、例えば、プログラム配布計算機または計算機が読み取り可能な記録媒体(例えば非一時的な記録媒体)であってもよい。各機能の説明は一例であり、複数の機能が1つの機能にまとめられたり、1つの機能が複数の機能に分割されたりしてもよい。
【0017】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号のうちの共通部分を使用し、同種の要素を区別する場合は、参照符号を使用することがある。例えば、記憶装置を区別しない場合には、「記憶装置150」と言い、記憶装置を区別する場合には、「記憶装置150A」、「記憶装置150B」のように言う。
【0018】
以下、図面を参照しながら、本発明の幾つかの実施例を説明する。なお、以下の説明により本発明が限定されるものではない。
【実施例1】
【0019】
図1は、実施例1に係るDBMSを実行するDBサーバを含むシステム全体の構成例を示す図である。
【0020】
DBサーバ100は、計算機システムの一例である。DBサーバ100は、例えば、パーソナルコンピュータ、ワークステーションまたはメインフレームであってよいし、これらの計算機において仮想化プログラムによって構成された仮想的な計算機であってよいし、クラウド環境(例えば、インターフェースデバイス、記憶デバイスおよびプロセッサといった複数の計算リソースを含んだ計算リソースプール)上で実現されてもよい。
【0021】
DBサーバ100に、クライアント190およびストレージシステム110が接続される。
【0022】
具体的には、例えば、DBサーバ100に、ネットワーク160Aを介してクライアント190が接続される。クライアント190は、クエリ発行元の一例であり、DBサーバ100にデータベースに対するクエリを発行する。
【0023】
また、例えば、DBサーバ100に、ネットワーク160Bを介してストレージシステム110が接続される。ストレージシステム110は、記憶装置150Bを有している。ストレージシステム110は、DBサーバ100からI/O要求を受けた場合には、当該I/O要求に応答して、記憶装置150に対するデータのI/Oを行う。
【0024】
ネットワーク160Aおよび160Bは、通信速度および消費電力の異なるネットワークでもよいし、ネットワーク160Aおよび160Bが同一のネットワークでもよい。例えば、ネットワーク160Aおよび160Bの各々は、FC(Fibre Channel)ネットワーク、イーサネット(登録商標)、InfiniBandおよびLocal Area Network)のいずれでもよい。
【0025】
DBサーバ100は、インターフェースユニット101、記憶装置150Cおよびそれらに接続されたプロセッサユニット102を有する。DBサーバ100は、キーボードやポインティングデバイス等の入力デバイス(図示しない)と液晶ディスプレイ等の出力デバイス(図示しない)を有してもよい。入力デバイスおよび出力デバイスは、プロセッサユニット102に接続されていてよい。入力デバイスと出力デバイスは一体であってもよい。
【0026】
インターフェースユニット101が、ネットワーク160Aおよび160Bに接続される。インターフェースユニット101経由で(ネットワーク160Aおよび160B経由で)、DBサーバ100は、ストレージシステム110およびクライアント190と通信することができる。
【0027】
記憶装置150Aおよび150Bのいずれも、一つ以上の記憶デバイス170を有する。記憶装置150Aおよび150Bの構成は同一でも異なっていてもよい。同種の(例えばI/O性能が同等の)二つ以上の記憶デバイス170で構成された記憶装置150があってもよいし、異種の(例えばI/O性能が異なる)二つ以上の記憶デバイス170で構成された記憶装置150があってもよい。後者の記憶装置150の一例が、記憶装置150Bである。記憶装置150Bは、HDD170H、SSD(Solid State Drive)170S、フラッシュメモリ170FおよびDRAM(Dynamic Random Access Memory)170Dといった複数種類の記憶デバイス170を有する。HDD170HおよびSSD170Sは、補助記憶ドライブの一例である。フラッシュメモリ170Fは、NVM(Non-Volatile Memory)の一例である。DRAM170Dは、主記憶メモリの一例である。記憶装置150Aおよび150Bの少なくとも一つに、データベースが格納される。
【0028】
記憶装置150Aが、プロセッサユニット102によって実行されるプログラムと、プログラムが使用するデータを記憶する。プログラムとして、例えば、DBMS130およびOS(Operating System)120がある。DBMS130が、クライアント190からクエリを受け、そのクエリを実行する。そのクエリの実行において、DBMS130は、データベースからデータを読み込むために、または、データベースにデータを書き込むために、I/O(Input/Output)要求をOS120に発行する。OS120は、そのI/O要求を受け、そのI/O要求に基づくI/O要求を記憶装置150へ発行し、結果をDBMS130に返す。
【0029】
DBMS130は、クエリ受付部131およびクエリ処理部190を有し、定義情報145、データベース146およびaQ履歴群147といった情報を管理する。クエリ処理部190は、クエリプラン生成部132、クエリ実行部133およびクエリ応答部134を有する。なお、DBMS130の構成は一例に過ぎない。例えば、ある構成要素は複数の構成要素に分割されていてもよく、複数の構成要素が1つの構成要素に統合されていてもよい。例えば、後述の匿名加工部140、コスト算出部142および候補選択部143は、クエリプラン生成部132の外に存在してもよい。より具体的には、例えば、匿名加工部140は、クライアント190に実装されてもよいし、DBサーバ100以外の計算機システムに実装されてもよい。
【0030】
クエリ受付部131は、データベースに対するクエリをクライアント190から受け付ける。クエリは、例えば、SQL(Structured Query Language)によって記述される。
【0031】
クエリプラン生成部132は、受け付けたクエリに基づいて当該クエリを実行するために必要なクエリプランを生成する。クエリプランは、例えば、一つ以上のデータベース演算子と、データベース演算子の実行順序の関係を含む情報である。クエリプランは、例えば、データベース演算子をノード、データベース演算子の実行順序の関係をエッジとする木構造で表されることがある。
【0032】
本実施例において、「クエリプランを生成」とは、一つ以上のクエリプラン候補を生成し当該一つ以上のクエリプラン候補から実行対象とする一つのクエリプラン候補を選択することである。クエリプラン生成部132は、匿名加工部140、候補生成部141、コスト算出部142および候補選択部143を有する。匿名加工部140は、変換規則を含むクエリQを基に後述の匿名加工クエリaQを生成する。候補生成部141は、匿名加工クエリaQに基づき一つ以上のクエリプラン候補を生成する。コスト算出部142は、当該一つ以上のクエリプラン候補の各々についてクエリコストを算出する。各クエリプラン候補について、クエリコストは、当該クエリプラン候補に基づきクエリを実行する際のコストであり、当該クエリプラン候補に基づくクエリ実行に関わる消費電力量に基づいたコストである。クエリコストが高い程、消費電力量が大きい(および/または、クエリの実行時間が長い)傾向にある。候補選択部143は、一つ以上のクエリプラン候補から相対的にクエリコストが低いクエリプラン候補を選択する。なお、「相対的にクエリコストが低いクエリプラン候補」は、例えば、昇順のクエリコストのうち上位X%(例えばXは0より大きい所定の数値)に属するいずれかのクエリプラン候補でよい。本実施例では、「相対的にクエリコストが低いクエリプラン候補」は、典型的には(例えば、いずれのクエリプラン候補も後述の実行時間、最大電力および消費電力量のいずれの上限も超えていなければ)、最もクエリコストが低いクエリプラン候補である。
【0033】
クエリ実行部133は、生成されたクエリプラン(選択されたクエリプラン候補)に基づいて匿名加工クエリaQを実行する。なお、クエリ実行部133は、当該クエリプランに基づき、適宜、一部の記憶デバイス170の状態を省電力状態に変更したり、別の一部の記憶デバイス170の省電力状態を解除したりすることができてよい。記憶デバイス170の状態を変更するために、クエリ実行部133は、当該記憶デバイス170に対する指示(例えば、当該記憶デバイス170が基になっている論理デバイスを指定した状態遷移指示)を送信することができてよい。当該指示に応答して、記憶デバイス170(または、ストレージシステム110)により、当該記憶デバイス170の状態が遷移してよい。なお、匿名加工クエリaQの実行において、クエリ実行部133は、データベース演算子を実行するためのタスクを生成し、生成されたタスクを実行することで、そのタスクに対応したデータベース演算子に必要なデータの読込み要求を発行することができる。クエリ実行部133は、一のタスクで複数のデータベース演算子を実行してもよい。タスクの実装としては、例えば、OS120が実現するプロセスやカーネルスレッド等のほか、ライブラリ等が実現するユーザスレッドを用いてよい。
【0034】
クエリ応答部134は、匿名加工クエリaQの実行結果をクエリQの実行結果としてクライアント190に応答する。
【0035】
定義情報145は、DBMS130の管理者およびユーザの一方または双方により定義された情報を含む。定義情報145の少なくとも一部は、クエリ受付部131が受け付けたクエリに記述されていてもよい。定義情報145は、例えば、aQ履歴群147の更新に関する設定情報を含む。定義情報145は、更に、例えば、クエリコストの算出に使用されるパラメータ(例えば後述の実行時、最大電力および消費電力量)の係数および上限を示す情報を含んでもよい。
【0036】
データベース146は、関係表を含む。関係表は、一つの表でもよいし、複数の表でもよい。関係表は、複数のタプルを含む。複数のタプルの各々は、複数(または一つ)の属性項目にそれぞれ対応する複数の属性値であり、例えば、一つのレコードのような一つのデータオブジェクトである。データベース146の少なくとも一部が、記憶装置150Bに格納されていてもよい。
【0037】
aQ履歴群147は、匿名加工クエリaQ毎のaQ履歴である。各匿名加工クエリaQについて、aQ履歴は、当該匿名加工クエリaQの実行の中間結果に相当し、具体的には、当該匿名加工クエリaQの実行において得られたデータセットを含む。
【0038】
以上が、本実施例に係るシステム全体についての説明である。
【0039】
本実施例では、関係表の匿名加工処理において再加工する際に、既に実体化済の加工結果を利用することで、再加工の都度にデータベースからクエリに該当する全てのタプルを再取得することを回避でき、結果として、再加工が高速である。以下、関係表の匿名加工処理の効率化について、詳細に説明する。なお、以下の説明では、下記の用語を使用する。
・クエリQx(または単に「Qx」):匿名加工のための変換規則を含むクエリ(xは自然数)。
・匿名加工クエリaQx(または単に「aQx」):クエリQxに従うデータセットの匿名加工のためのクエリ。aQxは、匿名加工の詳細を含む。匿名加工の詳細は、クエリQxが含む変換規則の他に、匿名加工条件(匿名加工に要求される条件)を含む。匿名加工条件は、匿名加工がk-匿名化であればk値(k値下限)でよく、匿名加工がl-多様化であればl値(l値下限)でよい。
・クエリプランaQx_P(または単に「aQx_P」):匿名加工クエリaQxについてのクエリプラン。
・クエリ応答aQx_A(または単に「aQx_A」):aQx_Pに基づきaQxを実行した結果に従う応答(aQxに対する回答)。
・データセット:タプルの全部または一部。つまり、データセットは、一つ以上の属性値で構成される。以下、特に、匿名加工が施されたデータセットを「加工済データセット」と言い、匿名加工が施されていないデータセットを「未加工データセット」と言うことがある。加工済データセットが含む少なくとも一つの属性値は、加工済属性値である。未加工データセットが含むいずれの属性値も、未加工属性値である。
・検索範囲:読出し範囲の一例であり、例えば、一つ以上の属性項目。
・匿名加工範囲:変換規則が関連付けられた少なくとも一つの属性項目を含んだ検索範囲。
・変換規則:一つ以上の匿名加工規則。
・匿名加工規則:属性値の匿名加工の規則。
【0040】
図2は、本実施例に係る匿名加工処理の流れの概要図である。
【0041】
クエリ受付部131が、クライアント190から、第一の変換規則を含むクエリQ1(第一のクエリの一例)を受け付ける(S201)。
【0042】
クエリプラン生成部132が、当該クエリQ1を基に匿名加工クエリaQ1を匿名加工部140により生成し、当該匿名加工クエリaQ1を基にクエリプランaQ1_Pを生成する(S202)。
【0043】
クエリ実行部133が、aQ1_Pに従いaQ1を実行する(S203)。
【0044】
クエリ応答部134が、aQ1を実行した結果に従うクエリ応答aQ1_Aを、クエリQ1の送信元であるクライアント190に返す(S204)。
【0045】
次に、クエリ受付部131が、クライアント190から、第二の変換規則を含むクエリQ2(第二のクエリの一例)を受け付ける(S211)。クエリQ2がクライアント190から発行されるケースの一例として、先のクエリQ1に対するクエリ応答aQ1_Aが、ユーザを満足させらなかったケースが考えられる。そのようなケースの例としては、aQ1の実行において後述の欠損率が所定の欠損率範囲に収まっていないこと、あるいは、匿名加工条件を満足する加工済データセットの数にユーザが満足しなかったことがあり得る。このようなケースでは、典型的には、クエリQ2は、先のクエリQ1とその応答aQ1_Aを基に決定されたクエリ(例えば、クエリQ1が指定した匿名加工範囲の部分集合を匿名加工範囲としたクエリ)である。
【0046】
以下、S202~S204とそれぞれ同様の処理S212~S214が行われる。すなわち、クエリプラン生成部132が、当該クエリQ2を基に匿名加工クエリaQ2を匿名加工部140により生成し、aQ2を基にクエリプランaQ2_Pを生成する(S212)。クエリ実行部133が、aQ2_Pに従いaQ2を実行する(S213)。クエリ応答部134が、aQ2を実行した結果に従うクエリ応答aQ2_Aをクライアント190に返す(S214)。
【0047】
クエリQ2のようなi番目のクエリi(iは2以上の整数)は、典型的には、先のクエリに関連するクエリ、具体的には、少なくとも一つの先のクエリとその応答を基に基づくクエリである。このため、クエリ応答aQi_Aは、ユーザが満足する応答である可能性が高い。もしユーザがクエリ応答aQi_Aに満足しなければ、少なくとも一つの先のクエリ(例えば、Qiおよび/またはそれよりも先の一つ以上のクエリ)とその応答とに基づいて決定された(i+1)番目のクエリQ(i+1)がクライアント190から発行され、それにより、当該更なるクエリQ(i+1)についてS211~S214が行われてよい。
【0048】
以下、
図2を参照して説明した流れに関わる要素および事項について詳細を説明する。
【0049】
図3は、関係表の一例と匿名加工ルール表の一例とを示す図である。
【0050】
関係表の一例が、patient_table300である。patient_table300は、複数のタプルを含む。各タプルは、複数の属性項目にそれぞれ対応した複数の属性値である。属性項目と属性値のペアの例は、2番目のタプルを例に取り、「属性項目:属性値」という表記法で示すと、「pt:2」、「ZIPコード:1230001」、「年齢:21」、「性別:男性」、「ICD10:K21」、および、「コメント:睡眠不足」、である。“pt”は、タプルの識別番号に相当する。なお、複数の属性項目のうちの少なくとも一部(例えば、ZIPコード、年齢および性別)が、準識別子に属する属性項目である。複数の属性項目は、さらに、センシティブ情報に属する属性項目(例えばICD10)を含む。以下、説明の混同を避けるために、属性項目「Y」の属性値を「Y値」と表現することにする。例えば、属性項目「年齢」の属性値を「年齢値」と表現することにする。
【0051】
匿名加工ルール表の一例が、年齢値の匿名加工ルール表の一例であるgn-rule_age350である。gn-rule_age350は、年齢値と、年齢値の匿名加工ルールと、加工済年齢値(匿名加工ルールに従い匿名加工された年齢値)との対応関係を示す。匿名加工ルール“年齢gσ”は(図示の例ではσ=5または10)、年齢値をσ歳刻みで匿名化する方法である。従って、年齢値“3”は、匿名加工方法「年齢g5」によれば、年齢値“0-4”に加工され、匿名加工ルール「年齢g10」によれば、年齢値“3”は年齢値“0-9”に加工される。
【0052】
なお、匿名加工ルールは、本実施例では表形式の情報とされ、定義情報145、データベース146またはその他の情報の少なくとも一部として格納され、当該情報から匿名加工部140は匿名加工ルールを知ることができる。その方法に代えてまたは加えて、匿名加工ルールがクエリQxに記述される(結果として匿名加工ルールが匿名加工クエリaQxに記述される)といった他の方法でも、匿名加工部140が匿名加工ルールを認識してもよい。
【0053】
また、以下、説明を簡単にするために、データベース146としての関係表はpatient_table300のみであるとする。
【0054】
図4は、クエリQ1、匿名加工クエリaQ1、および、クエリ応答aQ1_Aの一例を示す図である。
【0055】
クエリQ1で指定されている匿名加工範囲「ZIPコード,年齢g5,ICD10」は、次のことを意味する。
・検索範囲としての一つ以上の属性項目は、「ZIPコード」、「年齢」および「ICD10」である。
・ZIPコード値およびICD10値は、匿名加工不要である。
・年齢値は、5歳刻みに加工することが必要である。つまり、「年齢g5」は、変換規則が関連付けられた属性項目に相当する。
【0056】
本実施例において、「クエリが変換規則を含む」とは、変換規則それ自体を示す情報(例えば、「年齢g5」とgn-rule_age350それ自体)を含むことであってもよいし、変換規則の特定に必要な情報(例えば、「年齢g5」)と参照すべき匿名加工ルール表の名称)を含むことであってもよい。
【0057】
このようなクエリQ1が、定義情報145に基づき匿名加工部140により匿名加工クエリaQ1に変換される。定義情報145は、QxからaQxへの変換についての定義を示す情報を含む。定義情報145は、例えば、k-匿名化およびl-多様化といった複数種類の匿名加工のうちのいずれを採用するか、および、k値およびl値といった匿名加工条件をいずれの条件とするかを示す情報を含んでよい。
【0058】
匿名加工クエリaQ1は、情報451~453を含む。情報451~453の説明において、加工済年齢値が、クエリQ1が含む変換規則に従い加工された年齢値を意味し、k値≧2(k値下限=2)が、匿名加工条件を意味する。
【0059】
情報451は、下記を意味する。
・データセットを取得し第一の一時表(TMP1)を格納すること。
・データセットの取得元(読出し元)は、patient_table300であること。
・第一の一時表は、クエリQ1に従いpatient_table300の全てのタプルから取得された全ての未加工データセットで構成されること。各加工済データセットは、ZIPコード値、加工済年齢値およびICD10値で構成される。
【0060】
情報452は、下記を意味する。
・第二の一時表(TMP2)を格納すること。
・第二の一時表は、第一の一時表のうち、加工済データセットwith(k<2)に対応した未加工データセットで構成されること。「加工済データセットwith(k<2)」とは、k値が2未満の加工済データセット、具体的には、ZIPコード値、加工済年齢値およびICD10値の組合せが同一の加工済データセットの数が2未満である加工済データセット群に属する加工済データセットである。加工済データセットwith(k<2)は、匿名加工条件を満たさない加工済データセットの一例、言い換えれば、非出力加工済データセット(クエリ応答として出力不可の加工済データセット)の一例である。非出力加工済データセットの元のデータセットが非出力未加工データセットである。
【0061】
情報453は、下記を意味する。
・第一の一時表から、第二の一時表に格納された全ての非出力未加工データセットを除外すること。結果として、第一の一時表には、加工済データセットwith(k≧2)に対応した未加工データセットのみが残る。加工済データセットwith(k≧2)は、k値が2以上の加工済データセットである。加工済データセットwith(k≧2)は、匿名加工条件を満たす加工済データセットの一例、言い換えれば、出力加工済データセット(クエリに対する応答として出力可の加工済データセット)の一例である。出力加工済データセットの元のデータセットが出力未加工データセットである。
【0062】
上述のような匿名加工クエリaQ1を実行することで、クエリ応答aQ1_Aが生成される。クエリ応答aQ1_Aは、下記のうちの少なくとも一つに該当する応答でよい。
・加工済データセットwith(k≧2)を含む。
・加工済データセットwith(k<2)を含まない。
・欠損率を含む。「欠損率」とは、加工済データセットの総数に対する加工済データセットwith(k<2)の数の比率である。欠損率は、クエリ実行部133により算出される。
・欠損率が所定の欠損率範囲に収まっていない場合、加工済データセットwith(k≧2)を一つも含まず、該当なしを示す。
【0063】
このようなクエリ応答aQ1_Aにユーザが満足しない場合、
図5に例示するようなクエリQ2をクライアント190が発行することができる。
【0064】
図5は、クエリQ2、匿名加工クエリaQ2、および、クエリ応答aQ2_Aの一例を示す図である。
図5については、
図4との相違点を主に説明する。
【0065】
クエリQ2で指定されている匿名加工範囲は、クエリQ1で指定された匿名加工範囲の部分集合である。例えば、属性項目の組合せ「ZIPコード」、「年齢」、「ICD10」は同じであり、変換規則の抽象度(匿名度合)がより高められているにすぎない。具体的には、「ZIPコード」および「年齢g5」は同じで、「ICD10」が「SUBSTR(ICD10,1,3)」に変わっているにすぎない。「SUBSTR(ICD10,1,3)」は、「ICD10値の1番目のキャラクタから3番目のキャラクタまでを匿名加工する」ことを意味する。
【0066】
従って、クエリQ2は、patient_table300の全てのタプルからZIPコード値、年齢値、およびICD10値を取得し、かつ、そのうち年齢値およびICD10を匿名加工することを意味する。
【0067】
クエリQ2を定義情報145に基づき変換することで、クエリQ2が含む変換規則を含んだ匿名加工クエリaQ2、具体的には、情報551~553が記述された匿名加工クエリaQ2が生成される。情報551~553の説明において、加工済年齢値および加工済ICD10値が、クエリQ2が含む変換規則に従い加工された年齢値およびICD10値を意味する。
【0068】
情報551は、以下の点で、
図4の情報451と相違する。
・データセットの取得元(読出し元)が、patient_table300ではなく、後述のaQ1_output、および、aQ1_unA(またはaQ1_list)である。aQ1_outputは、先のクエリQ1の実行において格納された第一の一時表に相当する。aQ1_unAは、先のクエリQ1の実行において格納された第二の一時表に相当する。すなわち、情報551によれば、後のクエリQ2のデータセットの取得元は、patient_table300ではなく、一時表である。これにより、後のクエリQ2に従う匿名加工処理が高速である。
【0069】
情報552および553は、
図4の情報452および453とそれぞれ同じである。
【0070】
匿名加工クエリaQ2を実行することで、クエリ応答aQ2_Aが生成される。年齢値に加えてICD10値も匿名加工された結果、k値が2未満の加工済データセットが無く、故に、欠損率が0%である。すなわち、クエリ応答aQ1_Aよりも加工済データセットwith(k≧2)が多く、欠損率が所定の欠損率範囲に収まる。
【0071】
【0072】
aQ履歴群147は、匿名加工クエリ毎に、当該匿名加工クエリの実行における中間結果を含んだ情報としての履歴600を含む。以下、一つの匿名加工クエリaQxに対応した履歴600を「aQx履歴600」と言う。aQx履歴600としてaQ1履歴600を例に取り説明する。
【0073】
aQ1履歴600は、aQ1(および/またはQ1)と、aQ1_output601と、aQ1_unA602およびaQ1_list603のうちの一方とを含む。
【0074】
aQ1_output601は、匿名加工条件を満たす加工済データセットに関連する中間結果である出力中間結果の一例である。「中間結果」は、未加工状態および加工済状態のいずれかの状態を意味する。従って、中間結果は、未加工データセットおよび加工済データセットのいずれを含んでもよい。本実施例では、中間結果は、未加工データセットを含むが、それに代えてまたは加えて、加工済データセットを含んでもよい。中間結果として格納されるデータセットは、加工済データセットよりも未加工データセットの方が、後のクエリで当該中間結果が利用される可能性を高めることができる。なぜなら、未加工属性値は最も抽象度が低く、故に、変換規則の抽象度に関わらず匿名加工が可能であるからである。
図6によれば、aQ1_output601は、匿名加工条件(k≧2)を満たす加工済データセットに対応した未加工データセット(元のデータセット)の集合である。なお、aQ1_output601は、第一の加工結果表の一例である。
【0075】
aQ1_unA602およびaQ1_list603は、匿名加工条件を満たさない加工済データセットに関連する中間結果である非出力中間結果の一例である。aQ1_unA602は、匿名加工条件を満たさない加工済データセットに対応した未加工データセットの集合である。一方、aQ1_list603は、匿名加工条件を満たさない未加工データセットを含んだタプルへのポインタ(patient_table300におけるptへのポインタ)のリストである。aQ1_unA602があれば、aQ1_output601に無いデータセットについても、patient_table300からの取得(読出し)は不要である。なお、aQ1_unA602は、第二の加工結果表の一例であり、aQ1_list603は、格納情報の一例である。
【0076】
加工済データセットは、patient_table300からよりもaQx履歴600からの方が高速に取得される(本実施例では、未加工データセットが取得され当該未加工データセットが加工される)。aQx履歴600が格納(例えばキャッシュ)される記憶エリアである履歴エリアは、patient_table300が格納される記憶エリアであるデータベースエリアよりも、I/O性能が高いエリアでよい。具体的には、例えば、データベースエリアが、DBサーバ100内の(または遠隔の)不揮発記憶デバイスに基づく記憶エリアであるのに対し、履歴エリアは、DBサーバ100の揮発メモリ(例えばキャッシュメモリ)に基づく記憶エリアでよい。
【0077】
図7は、出力中間結果および非出力中間結果の概念の一例を示す図である。
【0078】
具体的には、参照符号701が、出力中間結果の概念を示し、参照符号702が、非出力中間結果の概念を示す。両者を比較してわかるように、出力中間結果は、匿名加工条件を満たすデータセットを含み匿名加工条件を満たさないデータセットを含まない(例えば最後の行にある“NOT”を参照)。逆に、非出力中間結果は、匿名加工条件を満たさないデータセット(または当該データセットを含んだタプルへのポインタ)を含み匿名加工条件を満たすデータセットを含まない(例えば参照符号701と違い最後の行に“NOT”が無い)。
【0079】
本実施例では、DBMS130は、出力中間結果も非出力中間結果もaQx履歴600の少なくとも一部として格納する機能を有しているが、少なくとも非出力中間結果を格納する機能については、クエリ単位でオン(またはオフ)を指定することができる。言い換えれば、ユーザが、明示的に、非出力中間結果を格納する(または格納しない)クエリをDBMS130に指定することができる。
【0080】
図8は、非出力中間結果の格納を明示した匿名加工クエリaQ11の一例を示す図である。
【0081】
図8によれば、匿名加工クエリaQ1が、当該aQ1について非出力中間結果を格納することの明示としての一例の記述「AS CREATE HISTORY aQ1.unAns」を有する。このような記述は、元のクエリQ1から反映されてもよい。
【0082】
クエリ実行部133は、このような匿名加工クエリを実行した場合にのみ、非出力中間結果を格納してもよい。このように、非出力中間結果の格納と非格納との選択が可能なので、aQ履歴147の肥大化の抑制が可能である。
【0083】
図9は、履歴非利用aQ2と履歴利用aQ2とを示す図である。
【0084】
履歴非利用aQ2は、aQ履歴群147を利用しないaQ2である。履歴非利用aQ2によれば、データセットの取得元は、patient_table300である。
【0085】
履歴利用aQ2は、aQ履歴群147を利用するQ2である。履歴利用aQ2によれば、データセットの取得元は、patient_table300ではなく、少なくとも一つのaQx履歴600(図示の例によれば、aQ1_output601、および、aQ1_unA602(またはaQ1_list603))である。
【0086】
本実施例では、受け付けられたクエリQxについて、匿名加工部140が、aQ履歴群147の利用が可能か否かを判断する。当該判断の結果が真の場合に、履歴利用aQxが生成される。aQ履歴群147の利用が可能か否かの判断は、対象の匿名加工範囲が、一つ以上のaQx履歴600に対応した一つ以上の匿名加工範囲の部分集合(完全一致を含む)であるか否かの判断でよい。当該判断は、具体的には、例えば、下記の条件Aおよび条件Bの両方が満たされているか否かの判断である。
条件A:対象の検索範囲(匿名加工範囲から変換規則を除いたもの)が、一つ以上のaQx履歴600に対応した一つ以上の検索範囲の部分集合(完全一致を含む)であること。
条件B:対象の変換規則に従う加工済データセットが、条件Aを満たす一つ以上のaQx履歴600から取得可能であること。
【0087】
条件Aが満たされる例は、
図10を参照すれば、次の通りである。
・参照符号1010が示すように、aQ12の検索範囲が、aQ11履歴に対応した検索範囲の部分集合であること。
・参照符号1020が示すように、aQ16の検索範囲が、aQ14履歴およびaQ15履歴にそれぞれ対応している二つの検索範囲の部分集合であること。(具体的には、例えば、aQ16の検索範囲が“全年齢”であるのに対して、aQ14履歴に対応した検索範囲が“30歳未満”であり、aQ15履歴に対応した検索範囲が“30歳以上”であること。)
【0088】
条件Bが満たされる例は、下記の通りである。
・aQx履歴600から取得されるデータセットが未加工データセットであること。なぜなら、当該未加工データセットにおけるいずれの属性値も変換規則に従い加工可能であるためである。
・aQ履歴600から取得されるデータセットが加工済データセットであっても、当該加工済データセットが含む全ての加工済属性値が、対象の変換規則に従い加工された属性値の全部または一部に相当すること。
【0089】
本実施例では、
図9に例示するように、まず、履歴非利用aQxが生成される。その後に、aQ履歴群147の利用が可能か否かの判断が行われる。その判断の結果が真の場合に、履歴非利用aQxが履歴利用aQxに変換される。なお、履歴非利用aQxの生成はスキップされてもよい。具体的には、先に、aQ履歴群147の利用が可能か否かの判断が行われてよい。その判断結果が真の場合、クエリQxを基に、履歴非利用aQxを生成すること無しに、履歴利用aQxが生成されてもよい。
【0090】
【0091】
履歴設定情報1100は、aQ履歴群147の利用や格納の制御のための情報である。履歴設定情報1100は、例えば、ユーザ毎の設定情報であって、定義情報145に含まれてよい。履歴設定情報1100は、例えば、利用フラグ1101、実行フラグ1102、list格納上限1103、unA格納上限1104、クエリ数上限1105、クエリ容量上限1106、および共有フラグ1107といった情報を含む。以下、これらの情報1101~1107について、一ユーザを例に取る(
図11の説明において「対象ユーザ」)。履歴設定情報1100は、図示しないが、対象ユーザのユーザIDを含んでいてもよい。
【0092】
利用フラグ1101は、対象ユーザのaQxの実行においてaQ履歴群147を利用するか否かを示すフラグである。“y”が利用することを意味する。
【0093】
実行フラグ1102は、対象ユーザについてのaQxの実行に関する情報である匿名化結果を格納する(aQx履歴600に含める)か否かを示すフラグである。“y”が匿名化結果を格納することを意味する。本情報1102は、実施例2で有用な情報であるため実施例1では無くてもよい。
【0094】
list格納上限1103は、対象ユーザのaQxについてaQx_list603を格納するか否かの判断基準となる欠損率上限を示す。欠損率がlist格納上限1103を超えていれば、aQ1_list603が格納されない。なぜなら、欠損率がlist格納上限1103を超えていれば、aQ1_output301とaQ1_list603の両方を使用するよりも、patient_table300を全スキャンすることの方が高速であるからである。なお、欠損率上限は、patient_table300に対するI/Oの性能を基に定められてよい。例えば、欠損率上限=(patient_table300に対するランダムI/Oのスループット)÷(patient_table300に対するシーケンシャルI/Oのスループット)×100、であってもよい。
【0095】
unA格納上限1104は、対象ユーザのaQxについてaQx_unA602を格納するか否かの判断基準となる非出力容量上限を示す。「非出力容量」は、aQxの実行において取得された非出力未加工データセット(匿名加工条件を満たさない加工済データセットの元のデータセット)の総容量である。非出力容量がunA格納上限1104以下の場合、aQx_unA602が格納される。
【0096】
クエリ数上限1105は、対象ユーザについて管理可能なクエリの数の上限を示す。
【0097】
全体クエリ容量上限1106は、対象ユーザについて管理可能なクエリの総容量である全体クエリ容量の上限を示す。クエリ数がその上限(クエリ数上限1105)未満であっても全体クエリ容量がその上限(全体クエリ容量上限1106)に達した場合には、管理されているいずれかのクエリ(例えば最も古いクエリ)を削除することで最新のクエリを管理可能とすることができる。なお、クエリの管理とは、クエリQxそれ自体(および/または匿名加工クエリaQxそれ自体)をaQx履歴600に格納することを意味する。従って、クエリ数上限1105および全体クエリ容量上限1106は、aQx履歴600の数を制限するための情報に相当する。
【0098】
共有フラグ1107は、対象ユーザ以外のユーザについてのクエリの実行において対象ユーザに対応したaQx履歴600を利用することを許可するか否かを示すフラグである。“y”が許可を意味する。
【0099】
図12は、匿名加工処理の実行と非実行のそれぞれのケースの一例を示す図である。
【0100】
図12によれば、匿名加工の一例としてk-匿名化が採用されている。管理者(admin)が、いずれのユーザからのクエリについてk-匿名化を行うかを定義する。すなわち、匿名加工処理の対象を、ユーザ単位、関係表単位、クエリ単位で指定することができる。いずれのユーザまたはいずれの関係表を匿名加工処理の対象とするかは、管理者により予め定義されていてよい。いずれのクエリを匿名加工処理の対象とするかは、管理者が予め定義しておいてもよいし、ユーザが指定してもよい。後者の場合、クエリが変換規則を含んでいれば、当該クエリは匿名加工処理の対象でよい。
【0101】
図12の例によれば、管理者が、匿名加工処理の対象とするユーザ、匿名加工処理の対象とする関係表とその属性項目、当該ユーザについての匿名加工条件、および、欠損率範囲を指定する。具体的には、例えば、管理者は、情報「GRANT SELECT, K-ANONYMITY(2,0,100) ON patient_table.{'ZIPコード', '年齢', '性別','ICD10'} TO "ADBUSER02"」をDBMS130に設定する。当該情報は、例えば定義情報145に含まれてよい。
【0102】
当該情報において、「K-ANONYMITY(2,0,100)」は、匿名加工条件および出力条件である。匿名加工条件は、k≧2、である。欠損率範囲は、0%以上100%以下である。欠損率範囲の下限および上限のうちの少なくとも一つは、乱数でもよい。これにより、再現性を抑制でき、以って、識別子(例えば、個人の氏名またはID)が特定され得るリスクを軽減できる。
【0103】
当該情報において、「ON patient_table.{'ZIPコード', '年齢', '性別','ICD10'}」は、patient_table300のうちZIPコード値、年齢値、性別値およびICD10値の少なくとも一つがk-匿名化の対象となり得ることを意味する。
【0104】
当該情報において、「TO "ADBUSER02"」は、ユーザ“ADBUSER02”(ユーザID“ADBUSER02”が割り振られているユーザ)についてのクエリがk-匿名化の対象となることを意味する。なお、ユーザ“ADBUSER01”以外のユーザ、のような指定方法を採用することも可能である。
【0105】
図12に例示の定義によれば、以下の処理が行われる。
【0106】
すなわち、クエリ受付部131が、ユーザID(ユーザ情報の一例)とクエリQ1を受け付ける。匿名加工部140が、受け付けたユーザIDが匿名加工処理の対象とされているユーザのユーザIDであって当該クエリQ1が匿名加工処理の対象か否かを判断する(S1200)。受け付けたユーザIDが匿名加工処理の対象とされているユーザのユーザIDであるか否かは、管理者から設定された定義情報を基に判断できる。クエリQ1が匿名加工処理の対象か否かは、管理者から設定された定義情報を基に、または、当該クエリQ1が変換規則を含んでいるか否かを基に、判断できる。
【0107】
S1200の判断の結果が偽の場合(例えば、クエリQ1がユーザ“ADBUSER01”についてのクエリの場合)、クエリQ1は匿名加工クエリaQ1に変換されない。すなわち、クエリプラン生成部132が、クエリQ1それ自体についてクエリプランを生成し、クエリ実行部133が、当該クエリプランを基にクエリQ1を実行する。結果として、クエリ応答部134が、クエリQ1それ自体の実行結果を示すクエリ応答Q1_Aを返す。クエリQ1は、変換規則を含むが、k値のような匿名加工条件を含まないため、
図12に例示するように、クエリ応答Q1_Aには、実際に得られたk値に関わらず、取得された加工済データセットはいずれも出力対象である。
【0108】
S1200の判断の結果が真の場合(例えば、クエリQ1がユーザ“ADBUSER02”についてのクエリの場合)、クエリQ1は匿名加工クエリaQ1に変換される。結果として、既に説明した通り、クエリプラン生成部132が、aQ1についてクエリプランaQ1_Pを生成し、クエリ実行部133が、当該クエリプランaQ1_Pを基にaQ1を実行する。クエリ応答部134が、クエリQ1に対してクエリ応答aQ1_Aを返す。aQ1は、変換規則に加えてk値のような匿名加工条件を含むため、
図12に例示するように、クエリ応答aQ1_Aには、k値を満たさない加工済データセットは非出力対象である。
【0109】
以下、本実施例で行われる処理の流れの一例を説明する。なお、本実施例について、以下の説明では、受け付けられたクエリ(最新のクエリ)を、「クエリQn」と言い、一つ以上の先のクエリ(過去のクエリ)の各々を「クエリQm」と言う。
【0110】
図13は、本実施例に係る全体処理(クエリの受付から応答までの処理)の流れを示すフローチャートである。
【0111】
クエリ受付部131が、クエリQnをクライアント190から受け付ける(S1301)。
【0112】
クエリプラン生成部132が、クエリQnに関してクエリプラン生成処理を行う(S1302)。生成されたクエリプランは、クエリQnそれ自体、または、クエリQnを基に生成された匿名加工クエリaQnについてのクエリプランである。
【0113】
クエリ実行部133が、S1302で生成されたクエリプランに基づきクエリ実行処理を行う(S1303)。
【0114】
クエリ応答部134が、S1303の結果に従うクエリ応答をクライアント190に返す(S1304)。
【0115】
図14は、クエリプラン生成処理の流れを示すフローチャートである。
【0116】
匿名加工部140が、クエリQnが匿名加工の対象か否か、具体的には、例えば、管理者により定義された情報を基にクエリQnのユーザが匿名加工処理の対象とされているか否かを判断する(S1401)。
【0117】
S1401の判断結果が偽の場合(S1401:No)、候補生成部141が、クエリQnについて一つ以上のクエリプラン候補を生成する(S1408)。コスト算出部142が、各クエリプラン候補のコストを算出し、候補選択部143が、各クエリプラン候補の算出されたコストを基に、一つのクエリプラン候補(例えば、コストが最も低いクエリプラン候補)を選択する(S1409)。S1409で選択されたクエリプラン候補が、生成されたクエリプランに相当する。
【0118】
S1401の判断結果が真の場合(S1401:Yes)、匿名加工部140が、クエリQnを、履歴非利用aQnに変換する(S1402)。そして、匿名加工部140が、aQ履歴群147を利用するか否か、具体的には、例えば、クエリQnのユーザに対応した履歴設定情報1100における利用フラグ1101が“y”か否かを判断する(S1403)。
【0119】
S1403の判断結果が偽の場合(S1401:No)、候補生成部141が、履歴非利用aQnについて一つ以上のクエリプラン候補を生成する(S1408)。その後、S1409が行われる。
【0120】
S1403の判断結果が真の場合(S1401:Yes)、匿名加工部140が、一つまたは複数のaQm履歴600を選択する(S1404)。匿名加工部140が、S1404で選択したaQm履歴600の利用が可能か否かを判断する(S1405)。この判断は、上述したように、aQnの匿名加工範囲が、S1404で選択した全てのaQm履歴600に対応した匿名加工範囲の部分集合(完全一致を含む)であるか否かの判断でよい。
【0121】
S1405の判断結果が偽の場合(S1405:No)、処理が後述のS1407に進む。
【0122】
S1405の判断結果が真の場合(S1405:Yes)、匿名加工部140が、履歴非利用aQnを履歴利用aQnに変換する(S1406)。匿名加工部140が、aQm履歴600の選択を終了するか否か(例えば、r通り(rは自然数)の選択が行われたか否か)を判断する(S1407)。ここでは、例えば全通りの選択が行われた場合、S1407の判断結果は真となる。S1407の判断結果が偽の場合(S1407:No)、S1404が再度行われる。すなわち、本実施例によれば、一つのクエリQnについて、一つ以上のaQnが生成され得る。
【0123】
S1407の判断結果が真の場合(S1407:Yes)、全てのaQnの各々についてS1408が行われ、S1409で、生成された全てのクエリプラン候補から一つのクエリプラン候補が選択される。クエリ実行部133では、S1409で選択されたクエリプラン候補(生成されたクエリプラン)に基づき、当該クエリプラン候補に対応したaQnが実行されることになる。
【0124】
S1409で選択されたクエリプラン候補が、履歴利用aQnに対応したクエリプラン候補であれば、当該aQnの実行において、少なくとも一部のデータセットは、既存のaQm_output601から取得され、データベース146から取得されることは無い。
【0125】
図15は、クエリ実行処理の流れを示すフローチャートである。
【0126】
クエリ実行部133が、クエリプラン生成処理で生成されたクエリプランから一つのデータベース演算子を選択する(S1501)。
【0127】
当該クエリプランに対応したaQnが履歴非利用aQnである場合、または、当該クエリプランはクエリQnのクエリプランである場合(S1502:No)、クエリ実行部133が、いずれの履歴600を参照すること無しに、S1501で選択したデータベース演算子を実行する(S1504)。
【0128】
一方、当該クエリプランに対応したaQnが履歴利用aQnである場合(S1502:Yes)、クエリ実行部133が、aQnについてこれまで実行済のデータベース演算子について、欠損率がその上限(list格納上限1103)以下、または、非出力容量がその上限(unA格納上限1104)以下であるか判断する(S1503)。
【0129】
S1503の判断結果が真の場合(S1503:Yes)、クエリ実行部133が、S1501で選択したデータベース演算子を実行し、その際、クエリ応答aQn_Aに含める出力加工済データセットを例えばワークエリアに一時格納すると共に、aQn履歴600として格納され得る情報(出力未加工データセット、非出力未加工データセット、および、非出力未加工データセットを含むタプルへのポインタ)を例えばワークエリアに一時格納する(S1505)。S1503の判断結果が偽の場合(S1503:No)、クエリ実行部133が、S1501で選択したデータベース演算子を実行する(S1504)。
【0130】
S1504またはS1505の後、クエリ実行部133は、少なくとも一つの未選択のデータベース演算子があるか否かを判断する(S1506)。S1506の判断結果が偽の場合(S1506:No)、クエリ実行部133は、未選択のデータベース演算子についてS1501を行う。
【0131】
S1506の判断結果が真の場合(S1506:Yes)、全てのデータベース演算子が実行されており、クエリ応答aQn_Aに含めることが可能なすべての出力加工済データセットが格納されている状態である。クエリ実行部133は、最後に選択したデータベース演算子についてS1503の判断が行われかつその判断の結果が真であったか否かを判断する(S1507)。
【0132】
S1507の判断結果が偽の場合(S1507:No)、aQn履歴600の格納は不要のため処理が終了する。
【0133】
S1507の判断結果が真の場合(S1507:Yes)、最後に選択したデータベース演算子を実行した結果として欠損率および非出力容量のいずれの上限も満たされているかをチェックするために処理がS1508以降へ進む。すなわち、クエリ実行部133は、aQnについての欠損率および非出力容量を算出する(S1508)。
【0134】
非出力容量がその上限(unA格納上限1104)以下であれば(S1509:Yes)、クエリ実行部133は、aQn_output301とaQn_unA602とを含むaQn履歴600を格納する(S1511)。
【0135】
非出力容量がその上限(unA格納上限1104)を超えているが欠損率がその上限(list格納上限1103)以下であれば(S1509:No、S1510:Yes)、クエリ実行部133は、aQn_output301とaQn_list603とを含むaQn履歴600を格納する(S1511)。
【0136】
非出力容量がその上限(unA保存上限1104)を超えていて欠損率がその上限(list格納上限1103)を超えていれば(S1509:No、S1510:No)、aQn履歴600の格納が行われることなく処理が終了する。
【0137】
本クエリ実行処理において得られた出力加工済データセットを含んだクエリ応答が、クエリ応答部164によりクライアント190へ送信される。なお、aQnが履歴利用aQnの場合、S1504またはS1505では、クエリ実行部133は、aQn_Pに従い、一つの以上のaQm履歴600から未加工データセットを取得し、当該未加工データセットを、aQnの変換規則に従い加工済データセットに変換する。
【0138】
以上が、実施例1についての説明である。なお、実施例1において、下記のうちの少なくとも一つが採用されてよい。
・一つ以上(例えば全て)のaQm_output301の容量と一つ以上(例えば全て)のaQm_unA602の容量とを含む記憶装置使用容量が、非出力容量に代えてまたは加えて採用されてよい。
・クエリ実行部133は、aQnの実行において、記憶装置使用容量がその上限以下である場合(または、欠損率がその上限を超えている場合)、aQn_unA602を格納してもよい。
・クエリ実行部133は、aQnの実行において、欠損率がその上限以下である場合(または、記憶装置使用容量がその上限を超えている場合)、aQn_list603を格納してもよい。
【実施例2】
【0139】
以下、実施例2を説明する。その際、実施例1との相違点を主に説明し、実施例1との共通点については説明を省略または簡略する。
【0140】
実施例2では、匿名加工クエリの生成のためにはそれの基になるクエリが必要である点は実施例1と共通するが、一つのクエリから、出力条件を満たすクエリ応答が得られるまで複数の匿名加工クエリを生成することができる。つまり、匿名加工クエリの生成が半自動化されている。このため、ユーザは、複数のクエリを発行すること無しに満足するクエリ応答を得られる可能性が高い。
【0141】
図16は、実施例2に係る匿名加工処理の流れの概要図である。
図16において、実施例1と名称は同じでも機能および構成の少なくとも一つが相違する要素については実施例1と異なる参照符号が付されている。
【0142】
DBMS1630が、クエリ受付部1631とクエリ処理部1690とを有する。
【0143】
クエリ受付部1631が、クライアント190から、変換規則を含むクエリQ3を受け付け、当該クエリQ3が含む変化規則を基に一つ以上の変換規則を生成し、当該一つ以上の変換規則をそれぞれ含む一つ以上のクエリを生成する(S1601)。以下、本実施例の説明では、受け付けられたクエリQxから派生した(クエリQxを基に自動生成された)クエリを、「内部クエリQx-y」と言う(yは自然数)。S1601で生成される内部クエリは、一つの内部クエリでもよいし、クエリQxから生成可能な全ての内部クエリでもよい。
【0144】
クエリプラン生成部1632が、変換規則(第三の変換規則の一例)を含む一つの内部クエリQ3-1(第三のクエリの一例)を基に匿名加工クエリaQ3-1を生成することを匿名加工部1640により行い、aQ3-1を基にクエリプランaQ3-1_Pを生成する(S1602)。
【0145】
クエリ実行部1633が、aQ3-1_Pに従いaQ3-1を実行する(S1603)。
【0146】
クエリ応答部1634は、aQ3-1の実行結果に従うクエリ応答aQ3-1_Aが所定の出力条件(例えば所定の欠損率範囲)を満たすか否かを判断する(S1604)。S1604の判断結果が偽の場合、クエリ応答部1634は、別の変化規則(第四の変換規則の一例)を含む別の内部クエリQ3-2を生成または選択する(S1605)。当該内部クエリQ3-2について、S1602およびS1603と同様の処理が行われる(S1606およびS1607)。結果として、匿名加工クエリaQ3-2の生成および実行に従いクエリ応答aQ3-2_Aが得られる。
【0147】
クエリ応答部1634が、クエリ応答aQ3-2_Aが所定の出力条件を満たしているか否かを判断する(S1608)。S1608の判断結果が真の場合、クエリ応答部1634は、クエリQ3に対する応答としてクエリ応答aQ3-2_Aをクライアント190に返す(S1609)。
【0148】
以上の通り、一つのクエリQ3を基に一つ以上の内部クエリ(具体的には、一つのクエリQ3が含む変換規則を基に得られた一つ以上の変換規則)が実行される。
【0149】
図17は、匿名加工処理の半自動実行の一例についての説明図である。
【0150】
参照符号1710によれば、匿名加工処理の半自動実行において、いずれの属性項目の属性値の匿名加工にいずれの匿名加工ルールが適用されるかが、予め定義される。具体的には、patient_table300における属性項目「年齢」の属性値については、gn-rule_age350が適用されることが、予め定義される。本実施例では、patient_table300における属性項目「年齢」がgn-rule_age350に関連付けられる。
【0151】
匿名加工処理の半自動実行は、クエリQ3において明示されている。具体的には、クエリQ3で指定された匿名加工範囲が、変換規則が関連付けられた少なくとも一つの属性項目を含み、当該属性項目について二つ以上の要素(二つ以上の匿名加工規則の組合せ、または、匿名加工不要の指定と少なくとも一つの匿名加工規則との組合せ)の記述があれば、当該クエリQ3は、匿名加工クエリの半自動実行が明示(指定)されたクエリである。当該記述の例が、属性項目「年齢」についての記述「CHOICE(年齢, 年齢g5, *')」と、属性項目「ICD10」についての記述「CHOICE(ICD10, SUBSTR(ICD10,1,3)」である。記述「CHOICE()」は、()内の各々の要素に従う属性値(未加工属性値または加工済属性値)を引数とし、引数の一つを選択することを意味する。「年齢」および「ICD10」の各々が、匿名加工不要の指定としての要素に相当する。「年齢g5」、「*」および「SUBSTR(ICD10,1,3)」の各々が、匿名加工規則に相当する。
【0152】
記述「CHOICE()」の数(=A)と、各記述「CHOICE()」が有する要素の数(=B)とに応じて、変換規則(内部クエリ)の数(=C)が決まる。具体的には、C=A×B、である。図示の例では、記述「CHOICE(年齢, 年齢g5, *)」が有する要素の数は3であり、記述「CHOICE(ICD10, SUBSTR(ICD10,1,3)」が有する要素の数は2であるため、6つの変換規則R3-1~R3-6をそれぞれ含む6つの内部クエリQ3-1~Q3-6が得られる。
【0153】
図において、6つの変換規則R3-1~R3-6は、左および上にある程、抽象度(匿名度合)が高い、言い換えれば、右および下にある程、抽象度が低い。要素「*」は、未加工属性値の大きさに関わらず加工済属性値は“*”という表記になることを意味する。本実施例では、クエリQ3の変換規則(「CHOICE()」を含んだ変換規則)から生成可能な変換規則R3-1~R3-6を抽象度の順序に沿って並べたCHOICE実行プラン(「半自動実行プラン」または「匿名化実行プラン」と呼ばれてもよい)1720が生成される。具体的には、例えば、クエリ受付部1631が、受け付けたクエリQ3が含む変換規則を基に、変換規則R3-1~R3-6が抽象度の順序に沿って並んだCHOICE実行プラン1720を生成する。生成されたCHOICE実行プラン1720は、例えば、クエリ応答部1634が参照可能な記憶領域(記憶装置150Aにおける記憶領域)に格納される。
【0154】
このように、変換規則に従う抽象度の高さは異なる。そこで、クエリQ3では、変換規則が選択される順序である規則選択順序を指定することができる。図示の「TOPDOWN()」が規則選択順序の指定の一例である。「TOPDOWN()」は、得られた変換規則を抽象度の高い順(抽象度の降順)に選択すること(CHOICE実行プラン1720内の実線矢印の順で選択すること)を意味する。規則選択順序の指定として別の例も採用することができる。例えば、図示しないが、「BOTTOMUP()」を採用することもできる。「BOTTOMUP()」は、得られた変換規則を抽象度の低い順(抽象度の昇順)に選択すること(CHOICE実行プラン1720内の破線矢印の順で選択すること)を意味する。CHOICE実行プラン1720では、変換規則R3-1~R3-6の並びは、クエリQ3で指定された規則選択順序に従う並びとされる。
【0155】
図18は、半自動実行の効率化の一例についての説明図である。
【0156】
匿名加工処理の半自動実行において一つのクエリを基に多数の内部クエリが生成される可能性がある。常に全ての内部クエリを実行すると、受け付けられたクエリの処理に長い時間がかかり、結果として、クエリの応答性能が低下する。
【0157】
そこで、本実施例では、クエリの処理に要する時間の長期化を回避するために、図示の通り、匿名化結果(匿名加工クエリを実行した結果に関する情報)の一例であるaQx_info1801がaQx履歴1800に含められる。aQx_info1801は、例えば、aQxの実行時刻、ユーザID、匿名加工範囲、最低k値(aQxの実行において得られたk値のうちの最低値)、k値下限(匿名化条件)、および欠損率を示す情報を含む。aQx_info1801は、更に、aQx_Aが出力条件を満たしたか否かを示す成否情報を含んでもよい。
【0158】
クエリ応答部1634は、CHOICE実行プラン1720と、過去のクエリのaQx_info1801とのいずれかを参照して、最新の内部クエリが含む変換規則の抽象度と、最新の内部クエリの応答が派生元のクエリの出力条件を満たしているか否かとを基に、規則選択順序に従う次の変換規則を含む次の内部クエリの応答が出力条件を満たすか否かを、当該次の内部クエリを実行すること無しに判断することができる。そして、その判断の結果が偽の場合、クエリ応答部1634は、次の内部クエリを含む残りの内部クエリを実行すること無しに、クエリを終了することができる(詳細は後述する)。
【0159】
図19は、本実施例に係る全体処理の流れを示すフローチャートである。
【0160】
クエリ受付部1631が、クエリQ3をクライアント190から受け付ける(S1901)。S1901において、クエリ受付部1631は、受け付けたクエリQ3に、匿名加工処理の半自動実行の明示(「CHOICE()」)があることを検出した場合、当該クエリQ3が含む変換規則を基に、変換規則R3-1~R3-6が抽象度の順序に沿って並んだCHOICE実行プラン1720を生成する。クエリ受付部1631は、CHOICE実行プラン1720を基に、少なくとも、変換規則R3-1~R3-6のうち最初に選択する変換規則R3-1を含んだ内部クエリQ3-1を生成する。この段階で、残りの変換規則R3-2~R3-6をそれぞれ含んだ内部クエリQ3-2~Q3-6が生成されてもよい。
【0161】
クエリプラン生成部1632が、内部クエリQ3-1に関してクエリプラン生成処理を行う(S1902)。
【0162】
クエリ実行部1633が、S1902で生成されたクエリプランQ3-1_Pに基づきクエリ実行処理を行う(S1903)。
【0163】
クエリ応答部1634が、S1903の結果に従うクエリ応答Q3-1_Aを出力するか否かの判断を含むクエリ応答処理を行う(S1904)。
【0164】
図20は、クエリ応答処理の流れを示すフローチャートである。
【0165】
クエリ応答部1634が、クエリ応答Q3-1_Aが所定の出力条件を満たしているか否かを判断する(S2001)。
【0166】
S2001の判断結果が真の場合(S2001:Yes)、クエリ応答部1634が、クエリ応答Q3-1_Aをクライアント190に返す。すなわち、所定の出力条件を満たすクエリ応答が見つかった時点で当該クエリ応答が返る。これにより、ユーザが満足する結果を高速に返すことができる。所定の出力条件を満たす内部クエリが未だあるとしても、規則選択順序や抽象度に応じた変換規則の並びを考慮すると、見つかったクエリ応答がユーザを最も満足させる可能性が高く、かつ、そのようなクエリ応答を返すことが、クエリの応答性能を最も高くすることができると考えられる。
【0167】
S2001の判断結果が偽の場合(S2001:No)、クエリ応答部1634が、半自動実行の処理対象か否か(つまりCHOICE実行プラン1720があるか否か)を判断する(S2002)。S2002の判断結果が偽の場合(S2002:No)、クエリ応答部1634が、該当なしを含むクエリ応答を生成し(S2007)、当該クエリ応答をクライアント190に返す(S2008)。
【0168】
S2002の判断結果が真の場合(S2002:Yes)、クエリ応答部1634が、全ての内部クエリを生成または選択したか否かを判断する(S2003)。S2003の判断結果が真の場合(S2003:Yes)、S2007およびS2008が行われる。
【0169】
S2003の判断結果が偽の場合(S2003:No)、クエリ応答部1634が、CHOICE実行プラン1720を基に、クエリQ3で指定されている規則選択順序に従う次の内部クエリQ3-n(n=2、および/または、n=3)を生成または選択する(S2004)。本実施例について、内部クエリQ3-nよりも過去に処理された一つ以上の先のクエリの各々を「クエリQm」と言う。クエリQmは、クエリQ3から派生した別の内部クエリであってもよいし、クエリQ3とは異なるクエリから派生したいずれかの内部クエリであってもよいし、クエリQ3とは異なるクエリであってもよい。
【0170】
クエリ応答部1634が、CHOICE実行プラン1720を基に、S2004で生成または選択された内部クエリQ3-nの応答が成功の可能性(出力条件を満たす可能性)があるか否かを判断する(2005)。具体的には、例えば、下記のうちの少なくとも一つが該当してよい。
・規則選択順序が「TOPDOWN()」であり、変換規則R3-nよりも直前の変換規則R3-1の方が抽象度が高く、且つ、直前の内部クエリQ3-1の応答が失敗だった(出力条件を満たさなかった)場合、内部クエリQ3-nの応答は失敗となると判断される(S2005:No)。
・規則選択順序が「TOPDOWN()」であり、変換規則R3-nよりも直前の変換規則R3-1の方が抽象度が高く、直前の内部クエリQ3-1の応答が成功であり、且つ、内部クエリの応答が成功でもクエリ応答が必ずしもクライアント190に返らない場合(例えば、規則選択順序に従う上位X%の変換規則を全て試す仕様になっている場合)、内部クエリQ3-nの応答は成功の可能性があると判断される(S2005:Yes)。
・規則選択順序が「BOTTOMUP()」であり、変換規則R3-nよりも直前の変換規則R3-1の方が抽象度が低く、且つ、直前の内部クエリQ3-1の応答が失敗だった(出力条件を満たさなかった)場合、内部クエリQ3-nの応答は失敗となると判断される(S2005:No)。
・規則選択順序が「BOTTOMUP()」であり、変換規則R3-nよりも直前の変換規則R3-1の方が抽象度が低く、直前の内部クエリQ3-1の応答が成功であり、且つ、内部クエリの応答が成功でもクエリ応答が必ずしもクライアント190に返らない場合、内部クエリQ3-nの応答は成功の可能性があると判断される(S2005:Yes)。
【0171】
S2005の判断結果が偽の場合(S2005:No)、S2004で生成または選択された内部クエリQ3-nは、実行されても、クエリ応答aQ3-n_Aが所定の出力条件を満たす可能性がない。そのため、当該内部クエリは実行されず、S2003に処理が戻る。
【0172】
S2005の判断結果が真の場合(S2005:Yes)、クエリ応答部1634が、S2004で生成または選択された内部クエリQ3-nの匿名加工範囲を部分集合として含む匿名加工範囲を示す既存のaQm_info1801を含んだaQm履歴1801が少なくとも一つある場合、当該少なくとも一つのaQm履歴1801を基に、S2004で生成または選択された内部クエリQ3-nの応答が成功の可能性があるか否かを判断する(2006)。この判断は、aQm_Aが出力条件を満たしたか否か(具体的には、例えば、aQm_info1801における最低k値、k値下限および欠損率)と、内部クエリQ3-nの匿名化条件(k値下限)と、クエリQ3の出力条件(欠損率範囲)と、クエリQmが含む変換規則の抽象度と、内部クエリQ3-nが含む変換規則R3-nの抽象度とを基に行われる。
【0173】
S2006の判断結果が真の場合(S2006:Yes)、S2004で生成または選択された内部クエリQ3-nは、実行されれば、クエリ応答aQ3-n_Aが所定の出力条件を満たす可能性がある。そのため、クエリ応答部1634が、当該選択された内部クエリQ3-nを匿名加工部1640に指定する。これにより、当該内部クエリQ3-nについてクエリプラン生成処理が行われる。
【0174】
S2006の判断結果が偽の場合(S2006:No)、S2004で生成または選択された内部クエリQ3-nは、実行されても、クエリ応答aQ3-n_Aが所定の出力条件を満たす可能性がない。そのため、当該内部クエリは実行されず、処理が、S2003に戻る。
【0175】
実施例2でも、実施例1と同様に、既に実体化済の加工結果を利用することで、再加工の都度にデータベースから全てのタプルを再取得することを回避できる。
【0176】
なお、内部クエリは必ずしも生成されなくてもよく、変換規則を含む匿名加工範囲が元のクエリを基に自動生成されればよい。
【0177】
以上、幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。例えば、実施例1と実施例2が組み合わされてもよい。具体的には、例えば、受け付けられたクエリが、複数通りの変換規則の明示(例えば「CHOICE()」)を含む場合に、実施例2における処理が行われてよく、そうではない場合に、実施例1における処理が行われてよい。
【0178】
上述の説明を、以下のように総括することができる。なお、以下の総括は、上述の説明に無い事項を含んでいてもよい。
【0179】
複数の属性項目にそれぞれ対応する複数の属性値を含む各タプルを含む関係表を格納するデータベースをDBMS(130、1630)が管理する。前記DBMSが、クエリ受付部(131、1631)とクエリ処理部(190、1690)とを有する。
【0180】
前記クエリ受付部は、変換規則が関連付けられた匿名加工範囲の指定を含むクエリを受け付ける。前記匿名加工範囲は、読出し対象の一つ以上の属性項目であり、当該一つ以上の属性項目のうちの少なくとも一つの属性項目に変換規則が含まれている(関連付けられている)。
【0181】
前記クエリ処理部は、当該受け付けられたクエリに関して、(x1)~(x3)を行う。
(x1)前記クエリ処理部は、対象の変換規則を含む匿名加工範囲である対象の匿名加工範囲を基に、匿名加工履歴群(一つまたは複数の匿名加工履歴)のうちの一つ以上の匿名加工履歴を利用可能か否か判断する。「匿名加工範囲」は、少なくとも一つの属性項目について読出し対象とする属性値に関する条件を含んでもよい。「対象の変換規則」は、実施例1のように、受け付けられたクエリが含む変換規則それ自体でもよいし、実施例2のように、受け付けられたクエリが含む変換規則を基に得られた(半自動化により得られた)変換規則でもよい。各匿名加工履歴の各々は、一例がaQx履歴であり、出力中間結果を含む。前記各匿名加工履歴に関し、前記出力中間結果は、一つまたは複数の出力データセットを含む。各出力データセットは、当該出力データセットを含む匿名加工履歴に対応した過去の匿名加工処理での匿名加工条件を満たす一つまたは複数の加工済データセットまたはそれらの未加工データセットである。「加工済データセット」は、少なくとも一つの匿名加工された属性値を含む一つ以上の属性値で構成される。「未加工データセット」は、一つ以上の未加工の属性値で構成される。
(x2)前記クエリ処理部は、(x1)の判断結果が真の場合に、前記対象の匿名加工範囲に該当する加工済データセットのうち、少なくとも一部の加工済データセットを、前記一つ以上の匿名加工履歴における一つ以上の出力中間結果から優先的に取得し、残りの加工済データセットを、前記データベースから、もしくは、前記一つ以上の匿名加工履歴のうちの、前記一つ以上の出力中間結果以外の部分から取得する。
(x3)前記クエリ処理部は、(x2)で取得された全ての加工済データセットのうち対象の匿名加工条件を満たす全ての加工済データセットまたはそれらの未加工データセットを前記対象の匿名加工範囲についての出力中間結果として含んだ匿名加工履歴を格納する。
【0182】
「匿名加工条件を満たす加工済データセット」は、匿名加工条件を満たす少なくとも一つの加工済データセット群に属する加工済データセットである。「加工済データセット群」は、同一の加工済データセット、より具体的には、例えば、全ての準識別子(少なくとも一つの加工済属性値を含む一つ以上の属性値)が同一の加工済データセットである。例えば、匿名加工が、k-匿名化であれば、匿名加工条件を満たす加工済データセット群では、同一の加工済データセットの数がk値以上である。また、例えば、匿名加工が、l-多様性であれば、匿名加工条件を満たす加工済データセット群では、全ての準識別子が同一である複数の加工済データセットにおいて異なるセンシティブ値(機密情報値)の数がl値以上である。
【0183】
(x3)で格納される匿名加工履歴は、非出力中間結果を含んでもよい。非出力中間結果は、(x2)で取得された全ての加工済データセットのうち前記対象の匿名加工条件を満たさない全ての加工済データセットまたはそれらの未加工データセットで構成された第一の非出力中間結果と、それらの未加工データセットを含むタプルへのポインタのリストである第二の非出力中間結果とのいずれかでよい。(x2)で、前記一つ以上の出力中間結果以外の部分は、前記一つ以上の匿名加工履歴のうちの一つ以上の非出力中間結果でよい。
【0184】
(x3)において、前記クエリ処理部は、履歴関連容量がその上限以下である場合(および/または、前記対象の匿名加工範囲に該当する加工済データセットの数に対する前記対象の匿名加工条件を満さない加工済データセットの数の割合である欠損率がその上限を超えている場合)、前記第一の非出力中間結果を格納してよい。一方、(x3)において、前記クエリ処理部は、当該欠損率がその上限以下である場合(および/または、前記履歴関連容量がその上限を超えている場合)、前記第二の非出力中間結果を格納してよい。「履歴関連容量」は、前記匿名加工履歴群に関する容量であり、一例が、上述の非出力容量または記憶装置使用容量でよい。具体的には、例えば、履歴関連容量は、下記のうちのいずれかの容量、または、下記のうちの二つ以上の容量に基づく容量(例えば合計)でよい。
・前記対象の匿名加工条件を満さない全ての加工済データセットの容量。
・前記匿名加工履歴群の容量。
・前記匿名加工履歴群における全ての出力中間結果の容量。
・前記匿名加工履歴群における全ての非出力中間結果の容量。
・前記匿名加工履歴群における全ての第一の非出力中間結果の容量。
【0185】
(x1)の判断結果が真となるケースの一例として、次のケース、すなわち、対象の匿名加工範囲を部分集合とする匿名加工範囲群(一つ以上の匿名加工範囲)に対応した一つ以上の匿名加工履歴があり、かつ、当該一つ以上の匿名加工履歴における少なくとも一つの出力中間結果を基に前記対象の変換規則に従う加工済属性値を得ることが可能であるケースがある。
【0186】
前記クエリ処理部は、第一の非出力中間結果の格納の明示が関連付けられた匿名加工処理に関して、第一の非出力中間結果を格納してよい。なお、この場合、第一の非出力中間結果の格納は、上述した履歴関連容量がその上限以下である場合に(および/または、欠損率がその上限を超えている場合に)行われてもよいし、履歴関連容量(および/または、欠損率)に関わらず明示に従い行われてもよい。第一の非出力中間結果の格納の明示は、例えば、受け付けられたクエリに含まれていてよく、そのようなクエリに基づく匿名加工処理が、第一の非出力中間結果の格納の明示が関連付けられた匿名加工処理の一例でよい。当該匿名加工処理の具体例は、
図8に例示のaQ1に従う匿名加工処理がある。
【0187】
前記クエリ処理部は、(x2)において、前記対象の匿名加工範囲に従う匿名加工処理の実行結果が所定の出力条件を満たす場合に、当該匿名加工処理において取得された出力加工済データセットを含んだクエリ応答を返してよい。前記所定の出力条件は、クエリ応答を返すことを許可するための条件である。前記所定の出力条件の一例が、当該実行結果に従う欠損率が所定の欠損率範囲に収まることでよい。「欠損率が所定の欠損率範囲に収まる」とは、欠損率が、欠損率範囲の一端である下限値以上であって、当該欠損率範囲の他端である上限値以下であることでよい。
【0188】
前記クエリ処理部は、前記所定の出力条件が満たされない場合、(x3)を実行してもしなくてもよい。また、前記クエリ処理部は、前記所定の条件が満たされない場合、前記受け付けられたクエリに基づく別の変換規則を含む匿名加工範囲を対象の匿名加工範囲として(x1)~(x3)のうち少なくとも(x1)および(x2)を行ってよい。「別の変換規則」は、前記所定の出力条件が満たされないことを契機に前記受け付けられたクエリを基に生成された変換規則でもよいし、前記受け付けられたクエリを基に生成された抽象度(匿名度合)が異なる二つ以上の変換規則から前記所定の出力条件が満たされないことを契機に選択された変換規則でもよい。別の変換規則についての少なくとも(x1)および(x2)の実施は、前記受け付けられたクエリが、複数通りの変換規則の明示(例えば「CHOICE()」)を含む場合に行われてよい。
【0189】
別の変換規則について、下記のうちの少なくとも一つが行われてよい。
・変換規則の抽象度が高い順に変換規則が選択されるようになっていて、当該別の変換規則よりも先の変換規則の方が抽象度が高く、且つ、当該先の変換規則を含んだクエリの応答が出力条件を満たさなかった場合、当該別の変換規則を含むクエリの応答は出力条件を満たさないと判断される。この場合、当該別の変換規則を含むクエリは実行されない。それに加えて、当該別の変換規則よりも抽象度の低い残りの変換規則についても実行がされないでもよい。
・変換規則の抽象度が高い順に変換規則が選択されるようになっていて、当該別の変換規則よりも先の変換規則の方が抽象度が高く、当該先の変換規則を含んだクエリの応答が出力条件を満たしている場合(例えば、更に、当該先の変換規則を含んだクエリの応答が出力条件を満たしていても応答がクエリ発行元に必ずしも返らない場合)、当該別の変換規則を含むクエリの応答は出力条件を満たす可能性があると判断される。この場合、当該別の変換規則を含むクエリは実行される。
・変換規則の抽象度が低い順に変換規則が選択されるようになっていて、当該別の変換規則よりも先の変換規則の方が抽象度が低く、且つ、当該先の変換規則を含んだクエリの応答が出力条件を満たさなかった場合、当該別の変換規則を含むクエリの応答は出力条件を満たさないと判断される。この場合、当該別の変換規則を含むクエリは実行されない。それに加えて、当該別の変換規則よりも抽象度の高い残りの変換規則についても実行がされないでもよい。
・変換規則の抽象度が低い順に変換規則が選択されるようになっていて、当該別の変換規則よりも先の変換規則の方が抽象度が低く、当該先の変換規則を含んだクエリの応答が出力条件を満たしている場合(例えば、更に、当該先の変換規則を含んだクエリの応答が出力条件を満たしていても応答がクエリ発行元に必ずしも返らない場合)、当該別の変換規則を含むクエリの応答は出力条件を満たす可能性があると判断される。この場合、当該別の変換規則を含むクエリは実行される。
【0190】
前記クエリ処理部は、さらに、前記匿名加工処理の実行に関する情報であり、匿名加工範囲、および、前記所定の出力条件が満たされたか否かに関する情報を含んだ情報である匿名化結果を、当該匿名加工処理の匿名加工履歴に含めてもよい。前記クエリ処理部は、前記受け付けられたクエリについて実行された一つ以上の匿名加工処理に対応した一つ以上の匿名加工履歴が含む一つ以上の匿名化結果(以下、一つ以上の先の匿名化結果)と、前記別の変換規則を含む匿名加工範囲とを基に、前記別の変換規則を含む匿名加工範囲についての匿名加工処理を実行するか否かを判断してよい。ここで言う「先の匿名化結果」は、当該別の変換規則に対応した匿名加工範囲を部分集合として含む匿名加工範囲に対応した匿名化結果でよい。また、「前記別の変換規則を含む匿名加工範囲についての匿名加工処理を実行するか否か」の判断は、例えば、先の匿名化結果に従う、匿名化条件、出力条件及び成否(当該出力条件を満たしたか否か)と、当該別の変換規則に対応した匿名化条件及び出力条件と、先の匿名化結果に対応した変換規則の抽象度と、当該別の変換規則の抽象度とを基に行われてよい。
【符号の説明】
【0191】
100…DBサーバ