(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-05-08
(45)【発行日】2024-05-16
(54)【発明の名称】データ分割装置、データ分割方法及びプログラム。
(51)【国際特許分類】
G06F 8/70 20180101AFI20240509BHJP
【FI】
G06F8/70
(21)【出願番号】P 2019210670
(22)【出願日】2019-11-21
【審査請求日】2022-10-11
(73)【特許権者】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100149548
【氏名又は名称】松沼 泰史
(74)【代理人】
【識別番号】100181135
【氏名又は名称】橋本 隆史
(72)【発明者】
【氏名】笹倉 秀昭
【審査官】渡辺 順哉
(56)【参考文献】
【文献】特開2021-056570(JP,A)
【文献】特開2019-133541(JP,A)
【文献】特開2005-004411(JP,A)
【文献】特開2010-122716(JP,A)
【文献】特開2019-144656(JP,A)
【文献】特開2018-025860(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00-8/77
G06F 9/44-9/445
G06F 18/23
(57)【特許請求の範囲】
【請求項1】
複数のプログラムと前記プログラムのうちの少なくとも1つからアクセスされるデータを複数含むシステムに対し、前記複数のプログラムと前記複数のデータとを複数のグループに分割するにあたり、前記複数のデータを分割するルールと該ルールの重み付けを設定する重み付け手段と、
前記重み付け手段が設定した前記ルールに基づいて前記複数のデータを前記グループの何れかに割り当てる分割手段と、
を備えるデータ分割装置。
【請求項2】
前記重み付け手段は、
前記データの分割方法を規定した分割ルールを設定する手段と、
前記データを分割する際に担保すべき条件を示す抑止ルールを設定する手段と、
を備える請求項1に記載のデータ分割装置。
【請求項3】
前記抑止ルールを設定する手段は、
同一の業務に関する前記プログラムがアクセスする1つ又は複数の前記データを異なる前記グループへ分割しないルールを設定する、
請求項2に記載のデータ分割装置。
【請求項4】
前記分割ルールを設定する手段は、
2以上の前記プログラムが1つの前記データにアクセスし、それらの前記プログラムが、参照アクセスのみを行う前記プログラムと、更新アクセスを行う前記プログラムに分類できる場合、1つの前記データを、更新アクセスを行う前記プログラムが帰属する前記グループへ割り当てるルールを設定する、
請求項2または請求項3に記載のデータ分割装置。
【請求項5】
前記抑止ルールを設定する手段は、
前記データに複製不可が設定されている場合、前記データを、前記データにアクセスする複数のプログラムの何れか1つに割り当てるルールを設定する、
請求項2から請求項4の何れか1項に記載のデータ分割装置。
【請求項6】
前記抑止ルールを設定する手段は、
前記データに分離不可が設定されている場合、前記データを、前記データにアクセスする前記プログラムが帰属する前記グループの各々に個別に割り当てるとともに、前記グループとは独立して前記データに対応するマスタデータを設け、前記マスタデータと前記グループごとに割り当てた前記データとの間で同期させるよう構成するルールを設定する、 請求項2から請求項5の何れか1項に記載のデータ分割装置。
【請求項7】
前記分割ルールを設定する手段は、
2以上の前記プログラムが1つの前記データにアクセスする場合、前記データを、それらの前記プログラムのうち、前記データにアクセスする頻度が最も多い前記プログラムが帰属するグループへ割り当てるルールを設定する、
請求項2から請求項6の何れか1項に記載のデータ分割装置。
【請求項8】
前記分割ルールを設定する手段は、
2以上の前記プログラムが1つの前記データにアクセスする場合であって、それら全ての前記プログラムが前記データにアクセスする頻度の差が所定の範囲内の場合、前記データを、前記データにアクセスする前記プログラムが帰属する前記グループの各々に個別に割り当てるとともに、前記グループとは独立して前記データに対応するマスタデータを設け、前記マスタデータと複数の前記グループごとに割り当てた前記データとの間で同期させるよう構成するルールを設定する、
請求項2から請求項7の何れか1項に記載のデータ分割装置。
【請求項9】
コンピュータによって実行されるデータ分割方法であって、
複数のプログラムと前記プログラムのうちの少なくとも1つからアクセスされるデータを複数含むシステムに対し、前記複数のプログラムと前記複数のデータとを複数のグループに分割するにあたり、前記複数のデータを分割するルールと該ルールの重み付けを設定し、
前記重み付け手段が設定した前記ルールに基づいて前記複数のデータを前記グループの何れかに割り当てる、
データ分割方法。
【請求項10】
コンピュータに、
複数のプログラムと前記プログラムのうちの少なくとも1つからアクセスされるデータを複数含むシステムに対し、前記複数のプログラムと前記複数のデータとを複数のグループに分割するにあたり、前記複数のデータを分割するルールと該ルールの重み付けを設定し、
前記重み付け手段が設定した前記ルールに基づいて前記複数のデータを前記グループの何れかに割り当てる処理を実行させる、
プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ分割装置、データ分割方法及びプログラムに関する。
【背景技術】
【0002】
モノシリックなアーキテクチャで構築された既存システムをマイクロサービス化する動きが存在する。マイクロサービスとは、ソフトウェア開発における技法・考え方の1つである。マイクロサービスにおいては、既存システムを、業務機能に沿った複数の小さいサービス、つまり、マイクロサービスに分割する。そして、全体のアプリケーションは、複数のマイクロサービスを疎結合して構成することで実現する。疎結合は、例えば、API呼び出しなどによって実現する。アプリケーションを複数のマイクロサービスに分割することによって、マイクロサービスごとに開発を行うことが可能になる。そのため、複数の開発を並列して行うことが可能になる。また、1つ1つのサービスが小さくなるため、開発者の理解、開発、テストがより容易になる。これらの理由によって、保守性が高く、ビジネス環境の変化に迅速に対応できるシステムを構築することができる。
【0003】
特許文献1には、既存システムのマイクロサービス化に関し、対象のシステムから業務別に対応するデータを分離する方法が開示されている。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
既存システムをマイクロサービス化するためには、各サービスが疎結合となるようにデータを分割する必要がある。しかし、保守性を向上させる観点でデータベースを分割する標準的な手法が提供されていない。その為、現実には、既存システムや業務に精通した有識者が手作業でデータの分割を行うことが多い。マイクロサービス化に際し、データを自動的に分割する方法が求められている。
【0006】
そこでこの発明は、上述の課題を解決するデータ分割装置、データ分割方法及びプログラムを提供することを目的としている。
【課題を解決するための手段】
【0007】
本発明の一態様によれば、データ分割装置は、複数のプログラムと前記プログラムのうちの少なくとも1つからアクセスされるデータを複数含むシステムに対し、前記複数のプログラムと前記複数のデータとを複数のグループに分割するにあたり、前記複数のデータを分割するルールと該ルールの重み付けを設定する重み付け手段と、前記重み付け手段が設定した前記ルールに基づいて前記複数のデータを前記グループの何れかに割り当てる分割手段と、を備える。
【0008】
また、本発明の他の一態様は、コンピュータによって実行されるデータ分割方法であって、複数のプログラムと前記プログラムのうちの少なくとも1つからアクセスされるデータを複数含むシステムに対し、前記複数のプログラムと前記複数のデータとを複数のグループに分割するにあたり、前記複数のデータを分割するルールと該ルールの重み付けを設定し、前記重み付け手段が設定した前記ルールに基づいて前記複数のデータを前記グループの何れかに割り当てる、データ分割方法である。
【0009】
また、本発明の他の一態様によれば、プログラムは、コンピュータに、複数のプログラムと前記プログラムのうちの少なくとも1つからアクセスされるデータを複数含むシステムに対し、前記複数のプログラムと前記複数のデータとを複数のグループに分割するにあたり、前記複数のデータを分割するルールと該ルールの重み付けを設定し、前記重み付け手段が設定した前記ルールに基づいて前記複数のデータを前記グループの何れかに割り当てる処理を実行させる。
【発明の効果】
【0010】
本発明によれば、データの分割を自動的に行うことができる。
【図面の簡単な説明】
【0011】
【
図1】本発明の一実施形態によるデータ分割装置の一例を示す機能ブロック図である。
【
図2】本発明の一実施形態による解析結果の一例を示す第1図である。
【
図3】本発明の一実施形態による解析結果の一例を示す第2図である。
【
図4】データの分割について説明する第1図である。
【
図5】データの分割について説明する第2図である。
【
図6】データの分割について説明する第3図である。
【
図7】本発明の一実施形態によるデータ分割処理の重み付けの一例を示す図である。
【
図8】本発明の一実施形態によるデータ分割方法の一例を示す第1図である。
【
図9】本発明の一実施形態によるデータ分割方法の一例を示す第2図である。
【
図10】本発明の一実施形態によるデータ分割方法の一例を示す第3図である。
【
図11】本発明の一実施形態によるデータ分割方法の一例を示す第4図である。
【
図12】本発明の一実施形態によるデータ分割方法の一例を示す第5図である。
【
図13】本発明の一実施形態のデータ分割処理の一例を示すフローチャートである。
【
図14】本発明の一実施形態のアクセス頻度によるデータ分割処理の一例を示すフローチャートである。
【
図15】本発明の一実施形態のデータ分割装置の最小構成を示す図である。
【
図16】本発明の一実施形態のデータ分割装置のハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【0012】
(データ分割装置の構成)
以下、一実施形態に係るデータ分割装置について
図1~
図16を参照して説明する。
図1は、本発明の一実施形態によるデータ分割装置の一例を示す機能ブロック図である。データ分割装置100は、既存の業務システム10(以下、既存システム10と記載する。)のソースコード11、データの構成情報12(テーブルやテーブルのレイアウト情報など)、稼働ログ13、設定情報14を取得し、マイクロサービス化のためにどのようにデータの分割・統合を行えば良いかを提案する。ここで、データとは、既存システム10の業務データが記録されるデータベースのテーブル、各テーブルの項目、ファイルなどである。データの分割とは、テーブルやファイルをマイクロサービスの何れかに帰属させること、1つのテーブルや1つのファイルを項目単位で分割して分割後のテーブルやファイルをマイクロサービスの何れかに帰属させることをいう。
【0013】
図1に示すようにデータ分割装置100は、データ取得部101と、データアクセス解析部102と、業務解析部103と、記憶部104と、重み付け部105と、分割部108と、出力部109と、を備える。
データ取得部101は、既存システム10を構成するプログラムのソースコード11、データの構成情報12、既存システム10の稼働ログ13、設定情報14を取得する。データの構成情報12には、データベースに含まれるテーブルや各テーブルの項目などの情報が含まれる。既存システム10の稼働ログ13には、既存システム10の稼働中に、既存システム10を構成する各プログラムがデータベースのどのテーブルのどの項目にアクセスしたかを示す履歴が記録されている。設定情報14には、データベースに含まれるテーブルやテーブルの項目について、複製を許可するか否か、分離可能か否かなどの既存システム10のユーザが設定した設定情報が含まれている。また、データ取得部101は、データ分割処理に用いる閾値の設定などを受け付ける。
【0014】
データアクセス解析部102は、既存システム10のソースコード11を解析して、どのプログラムが、どのデータへどのようなアクセスを行っているのか、どのプログラムが、他のどのプログラムを呼び出しているかを解析する(プログラム観点の解析)。データとは、例えば、アクセス先のデータベースのテーブルおよび項目である。アクセスには、作成(Create、以下“C”で表示)、参照(Read、以下“R“で表示)、更新(Update、以下“U”で表示)、及び、削除(Delete、以下“D”で表示)の種別が存在する。以下では、作成、参照、更新、及び削除の何れかの処理のことを「アクセス(アクセスする)」とも称する。
【0015】
業務解析部103は、既存システム10のプログラムやデータベースに関し、業務的観点から解析を行い、データアクセス解析部102による解析結果に業務的観点からの解析結果を紐づける。例えば、業務解析部103は、データの特徴(複製の可否、データ項目間の分離の可否)、プログラムの特徴(同一業務か否か)、プログラムの実行頻度やデータへのアクセス頻度の解析を行う。例えば、業務解析部103は、ユーザの設定に基づいて、テーブルや項目の複製可否や分離可否を判断する。また、例えば、業務解析部103は、ソースコード11を参照して、プログラム間の呼び出しやビルド時のリンク関係などから、1つのプロセスとして実行されるプログラム群を同一業務に関するプログラムであると解析する。また、業務解析部103は、稼働ログ13を参照して、プログラムの実行頻度やテーブル毎、テーブルの項目毎のアクセス頻度(動的なアクセス頻度)を集計する。また、業務解析部103は、ソースコード11に基づいて、プログラム別に、テーブル毎、テーブルの項目毎のアクセス頻度(静的なアクセス頻度)を解析する。そして、業務解析部103は、データアクセス解析部102による解析結果に、業務的観点から行った解析結果を紐づける。例えば、「プログラムA」が「テーブルT1」の「項目1」へ100(回/時間)アクセスしていれば、業務解析部103は、データアクセス解析部102による解析結果、例えば「プログラムA」は「テーブルT1」の「項目1」を「参照」するという解析結果に対し「100回/時間」を紐づける。また、例えば、業務解析部103は、データ取得部101が取得した設定情報に「テーブルT1」に対して「複製不可」の設定が含まれていれば、データアクセス解析部102による上記例の解析結果(「プログラムA」は「テーブルT1」の「項目1」を「参照」する)に対し、「テーブル1は複製不可」を紐づける。また、「プログラムA1」~「プログラムA5」が同一プロセス内で稼働する場合、業務解析部103は、「プログラムA1」~「プログラムA5」を同一業務のプログラムであるとして分類し、同一業務に関するプログラム群のID等を記憶部104に記録する。
【0016】
記憶部104は、データ取得部101が取得した情報や、データアクセス解析部102と業務解析部103による解析結果を記憶する。
図2~
図3に解析結果の一例を示す。
【0017】
図2は、本発明の一実施形態による解析結果の一例を示す第1図である。
図2に示す例では、解析結果の情報は、「No.」と、「種別」と、「テーブル名、ファイル名」と、複数のプログラムの「プログラム名」ごとの「アクセス種別」(CURD)と、「アクセス頻度(動的、静的)」と、「設定情報」とを対応付けた情報である。
例えば、1行目のデータは、「No.」に“1”が付された「種別」が“テーブル”で名称が“テーブルT1”のテーブルが、“プログラムA”から参照(“R”)されていること、稼働ログ13に基づく動的なアクセス頻度が“X11”、ソースコード11に基づく静的なアクセス回数が“X12”であること、テーブルT1には「複製不可」が設定されていること、を示している。
【0018】
図3は、本発明の一実施形態による解析結果の一例を示す第2図である。
図3に示す一例では、解析結果の情報は、「No.」と、「種別」と、「テーブル名、ファイル名」と、「項目名」と、複数のプログラムの「プログラム名」ごとの「アクセス種別」および「アクセス頻度(動的、静的)」と、「設定情報」とを対応付けた情報である。
例えば、1行目のデータは、「No.」に“1”が付された「種別」が“テーブル”で名称が“テーブルT3”のテーブルの“項目1“が”プログラムA“から参照(“R”)されていること、稼働ログ13に基づく動的なアクセス頻度が“X31“であること、ソースコード11に基づく静的なアクセス頻度が”X32“であることを示している。同様に2行目のデータは、テーブルT3の“項目2“が「プログラムB」から作成、更新、削除(“CUD”)されていること、稼働ログ13に基づく動的なアクセス頻度が“X41“であること、ソースコード11に基づく静的なアクセス回数が”X42“であることを示している。
【0019】
図1に戻る。重み付け部105は、既存システム10のマイクロサービス化にあたって、既存システム10のデータをどのように分割するかを判断する基準とその重みづけ(優先度)を設定する。データの分割とは、データベースのテーブルや項目を、何れかのマイクロサービスに帰属させることを意味する。
分割部108は、重み付け部105が設定した基準に則ってデータの分割を行う。
【0020】
ここで、
図4~
図6を参照して、マイクロサービス化におけるデータの分割の一例について説明する。
図4~
図6は、それぞれ、データの分割について説明する第1図~第3図である。
図4に示す例では、既存システム10は、プログラム1~8とデータベース1を含んで構成されている。また、プログラム間の矢印や、プログラムからデータベースへの矢印は、呼び出し又はアクセス関係を示す。
図4の例では、例えば、プログラム1はプログラム4を呼び出している。また、プログラム4は、プログラム1とプログラム2から呼び出されていて、プログラム6、プログラム7を呼び出し、データベース1にアクセスしている。
図4に示すように、既存システム10は、複数のプログラムが1つ以上のデータベースにアクセスする状態となっている。
【0021】
このようなプログラム群をマイクロサービス化するために、一連の処理フローをマイクロサービスと捉える方法が提案されている。まず、この方法によれば、まず、一連の処理フローの起点となるプログラムを特定する。
図4に示す例では、プログラム1、プログラム2、プログラム3は、どこからも呼び出しを受けていないプログラムである。そのため、これらのプログラムは起点となるプログラムである。続いて、全体のプログラムを処理フローごとに分割する。このとき、複数の処理フローで利用されているプログラムが存在する場合には、当該プログラムを利用されている処理フローの分だけ複製する。例えば、
図1に示す例の場合、プログラム4は、プログラム1とプログラム2から呼び出されている。プログラム1とプログラム2は別の処理フローであるから、プログラム4は複製され、プログラム1を起点とする処理フローとプログラム2を起点とする処理フローとに分割して割り当てられる。このように割り当てが行われた結果を
図5に示す。プログラム4、5、7は、複数の処理フローで呼び出されているので、複製され分割されている。このように処理フローに応じてプログラムを複製、分割することで、プログラムについては、処理フローごとに分割することが可能になる。しかしながら、データベース1は分割されていないため、このままではマイクロサービス化することができない。
【0022】
そこで、
図6に示すように、データベースについても処理フローに応じた分割が必要を行う。
図6に示す例では、データベース1は、データベース1-1、データベース1-2、データベース1-3、及びデータベース1-4に分割される。このようにデータベースを分割できれば、処理フローごとにマイクロサービス化することが可能になる。
図6に示す例では、例えば、プログラム1、プログラム4、プログラム6、及び、データベース1-1からなる処理フローを1つのマイクロサービスとすることができる。同様に、例えば、プログラム2、プログラム4、プログラム7、及び、データベース1-2からなる処理フローを1つのマイクロサービスとすることができる。データベース1-3、1-4についても同様である。
【0023】
図6のようにデータベースを分割するためには、
図5におけるデータベース1について、どのデータがどのプログラムに利用されているかを把握しなければならない。本実施形態では、データアクセス解析部102がソースコード11を解析して、この把握を行う。分割部108は、データベース1を処理フローごとにデータベース1-1~1-4へ分割する処理を行う。
図4~
図6に示す例では、抽象的・概念的にデータベース1をデータベース1-1~1-4へ分割するとして説明したが、実際には、同じデータが複数の処理フローからアクセスされていたり、ユーザによって分離不可が設定されたデータが存在したりして、具体的にどのように分割することができるかの判断が難しい。これに対し、本実施形態では、重み付け部105が、データベース1をデータベース1-1~1-4へ分割するルールを、分割部108へ提供する。分割部108は、このルールに則って、自動的にデータベース1をデータベース1-1~1-4へ分割する。重み付け部105は、抑止ルール設定部106と、分割ルール設定部107とを備える。分割ルール設定部107は、どのような場合にデータの分割が可能かを示すルールとその優先度を設定する。抑止ルール設定部106は、データの分割に際し守るべきルールとその優先度を設定する。重み付け部105、抑止ルール設定部106、分割ルール設定部107については、後に
図7~
図12を参照して詳しく説明する。
【0024】
出力部109は、分割部108による分割結果を出力する。例えば、
図6の例では、出力部109は、分割後のデータベース1-1に含まれるテーブル及びテーブルの構造をマイクロサービスA及びマイクロサービスAに属するプログラム名と対応付けて出力する。出力部109は、データベース1-2~1-4についても同様の出力を行う。
【0025】
(データ分割のルール)
次に
図7~
図13を参照してデータの分割ルールについて説明する。
図7は、本発明の一実施形態による分割処理の重み付けの一例を示す図である。
図8~
図13は、それぞれ、本発明の一実施形態による分割方法の一例を示す第1図~第5図である。
図7に、分割のルールと、そのカテゴリ及び種別、また、そのルールに基づいて分割を行うことに対する優先度を示す。カテゴリには、業務観点とプログラム観点が存在する。業務観点は、業務解析部103による解析結果に基づいてデータベースの分割を検討することを意味し、プログラム観点は、データアクセス解析部102による解析結果に基づいてデータベースの分割を検討することを意味する。種別には、抑止ルールと分割ルールが存在する。分割ルールは、データの分割方法を示し、抑止ルールは、データ分割の際に担保すべき条件を示す。優先度は、データを分割するにあたってルール(分割ルール、抑止ルール)を適用する優先度を示す。
【0026】
「No.」に“1”が付された抑止ルールは、同一業務のプログラムからのアクセスは同一とみなし、同一業務に属する異なるプログラムから異なるデータ(テーブルまたはテーブルの項目)にアクセスがある場合でも、それらのプログラムの間でデータの分割を行わないことを意味する。例えば、「プログラムA1」が「テーブルT1」へアクセスし、「プログラムA2」が「テーブルT2」へアクセスし、他のプログラムが「テーブルT1」、「テーブルT2」へアクセスすることが無く、「プログラムA1」と「プログラムA2」が同一業務のプログラムである場合、「テーブルT1」と「テーブルT2」を分割すること無く、同じ1つのマイクロサービスへ割り当てる。反対に「プログラムA」と「プログラムB」が異なる業務のプログラムであって、「プログラムA」が「テーブルX」へアクセスし、「プログラムB」が「テーブルY」へアクセスするような場合、「テーブルX」と「テーブルY」を分割する。例えば、
図8に示すように、「プログラムA」と「テーブルX」を「マイクロサービスA」として分類し、「プログラムB」と「テーブルY」を「マイクロサービスB」に分類する。また、
図9に示すように「プログラムA」が「テーブルX」の「項目1」、「項目2」へアクセスし、「プログラムB」が「テーブルX」の「項目3」、「項目4」、「項目5」へアクセスし、「プログラムA」と「プログラムB」が異なる業務のプログラムである場合、「テーブルX」を、「テーブルX」の「項目1」、「項目2」を有する「テーブルX-1」と、「テーブルX」の「項目3」、「項目4」、「項目5」を有する「テーブルX-2」へ分割する。そして、「プログラムA」と「テーブルX-1」を「マイクロサービスA」として分類し、「プログラムB」と「テーブルX-2」を「マイクロサービスB」に分類する。
図7の例では、この抑止ルールに最も高い優先度“1”が設定されている。分割部108は、この抑止ルールに基づくデータ分割を、以下に説明する他のルールによる分割よりも重んじて行う。
【0027】
「No.」に“2”が付された分割ルールは、参照アクセス(R)と更新アクセス(CUD)を分離し、更新アクセスがある方のプログラムにデータを分割することを意味する。例えば、
図10に示すように「プログラムA」が「テーブルX」の「項目3」を参照(R)し、「プログラムB」が「テーブルX」の「項目1」、「項目2」を参照(R)している場合でも、「プログラムA」が「テーブルX」の「項目1」、「項目2」に対し更新アクセス(CUD)を行い、「プログラムB」が「テーブルX」の「項目3」、「項目4」、「項目5」に対し更新アクセス(CUD)を行っていれば、「テーブルX」を、更新アクセスがある項目に基づいて、
図9の例と同様に分割し、「プログラムA」と「テーブルX-1」を「マイクロサービスA」として分類し、「プログラムB」と「テーブルX-2」を「マイクロサービスB」に分類する。
図7の例では、この抑止ルールに2番目に優先度が高い、優先度“2”が設定されている。
【0028】
「No.」に“3”が付された抑止ルールは、複製不可ならば、複製を行わないようにして分割することを定めたルールである。例えば、
図11に示すように「プログラムA」が「テーブルX」の「項目1」、「項目2」、「項目3」へ参照(R)し、「プログラムB」が「テーブルX」の「項目3」、「項目4」、「項目5」へ参照(R)していて、「テーブルX」に複製不可の設定がなされている場合、「項目3」を「プログラムA」側へ分離するか、「プログラムB」側へ分離するかが不明なため、テーブルXの分割ができないように思える。複製不可が設定されている場合、同じ項目を複数のテーブルに設けることはできない為、1つのテーブルに格納するようにして分離する。例えば、「テーブルX」を、
図9の例と同様に分割し、「プログラムA」と「テーブルX-1」を「マイクロサービスA」として分類し、「プログラムB」と「テーブルX-2」を「マイクロサービスB」に分類する。そして、「プログラムA」からAPI(REST等)呼び出しを行って「項目3」へアクセスするように構成する。
図7の例では、この抑止ルールに対し、3番目に優先度が高い、優先度“3”が設定されている。
【0029】
「No.」に“4”が付された抑止ルールは、分離不可ならば、分離しないテーブルを確保しつつ分割することを定めたルールである。例えば、
図11に示す例の場合、上記のように「項目3」の分離ができないように思える。分離不可が設定されている場合、
図11のように分割することができない。そこで、マスターとなるテーブルを新たに設けることでデータの分離を実現する。具体的には、
図12に示すように「テーブルX」を、「テーブルX」の「項目1」、「項目2」、「項目3」を有する「テーブルX-1」と、「テーブルX」の「項目3」、「項目4」、「項目5」を有する「テーブルX-2」へ分割し、「プログラムA」と「テーブルX-1」を「マイクロサービスA」として分類し、「プログラムB」と「テーブルX-2」を「マイクロサービスB」に分類する。また、「テーブルX」の「項目1」~「項目5」を有する「テーブルX-3」を新たに用意し、「テーブルX-1」と「テーブルX-2」と「テーブルX-3」の間で同期をとるように構成する。このような構成であれば、「項目1」~「項目5」が分離されていない「テーブルX-3」が存在するため、ユーザによる分離不可の要求が満たされる。
図7の例では、この抑止ルールに対し、4番目に優先度が高い、優先度“4”が設定されている。
【0030】
「No.」に“5”が付された分割ルールは、静的な解析に基づいて、アクセス頻度が多い方のプログラムにデータを分割するというルールである。例えば、
図11の例において、業務解析部103の解析結果が、プログラムBのソースコードにおいて「テーブルX」の「項目3」へのアクセスを記述している箇所が、プログラムAのソースコードにおける「テーブルX」の「項目3」へのアクセスを記述している箇所よりも多いことを示している場合、図示するように「項目3」をプログラムB側へ分割する。
図7の例では、この抑止ルールに対し、5番目に優先度が高い、優先度“5”が設定されている。
【0031】
「No.」に“6”が付された分割ルールは、動的な解析に基づいて、アクセス頻度が多い方のプログラムにデータを分割するというルールである。例えば、
図11の例において、業務解析部103による稼働ログ13の解析結果が、プログラムBによって「テーブルX」の「項目3」へアクセスされた回数が、プログラムAによって「テーブルX」の「項目3」へアクセスされた回数よりも多いことを示す場合、図示するように「項目3」をプログラムB側へ分離する。
【0032】
抑止ルール設定部106は、
図7の「No.」が“1”、“3”、“4”のルールと、その優先度を記憶している。分割ルール設定部107は、
図7の「No.」が“2”、“5”、“6”のルールと、その優先度を記憶している。
図7に示す優先度は一例であって、他の優先度が設定できるように構成されていてもよい。重み付け部105は、抑止ルール設定部106および分割ルール設定部107によって設定されたルールとその優先度の情報を、分割部108へ出力する。分割部108は、重み付け部105から提供された優先度に基づいて、データの分割を検討する。
【0033】
(データ分割装置の動作)
次に本実施形態のデータ分割処理の流れについて説明する。
図13は、本発明の一実施形態のデータ分割処理の一例を示すフローチャートである。
【0034】
まず、データ取得部101が、既存システム10のソースコード11、データベースの構成情報12、稼働ログ13、設定情報14を取得する(ステップS1)。
次にデータアクセス解析部102が、ソースコード11に基づいて、プログラム間の呼び出し、プログラムからデータベースへのアクセスを解析する(ステップS2)。例えば、データアクセス解析部102は、まず、他のプログラムから呼び出されていない起点プログラムを抽出する。そして、データアクセス解析部102は、起点プログラムから呼び出される他のプログラムを再帰的に抽出する。そして、データアクセス解析部102は、抽出した各プログラムからアクセスされるデータの情報を抽出する。そして、データアクセス解析部102は、抽出した呼び出し先プログラムの呼び出し順及び、抽出したデータへのアクセス順を処理順に整理し、整理した結果を記憶部104に記録する。記憶部104には、例えば、
図5に例示するような処理フローと当該処理フローに含まれるプログラムからアクセスされるテーブルや項目の情報が対応付けて記録される。
【0035】
次に業務解析部103は、業務的観点からの解析を行う(ステップS3)。例えば、業務解析部103は、ソースコード11に基づいて既存システム10を構成するプログラムを、同一業務に帰属するプログラム群(同一プロセスで稼働するプログラム群)ごとに分類する。例えば、業務解析部103は、ソースコード11のデータへアクセスするコードが記載された箇所を抽出して、プログラム別、テーブル別、テーブルの項目別に集計し、静的なアクセス頻度(例えば、アクセス命令が記載された箇所の数)を示す情報を算出する。例えば、業務解析部103は、稼働ログ13からデータへのアクセスが実行された履歴が記載された箇所を抽出して、アクセス元のプログラム別、テーブル別、テーブルの項目別に集計し、動的なアクセス頻度を示す情報を算出する。例えば、業務解析部103は、設定情報14を参照して、テーブル別、テーブルの項目別にユーザによる複製不可、分離不可の設定を対応付ける。業務解析部103は、業務的な解析結果を、ステップS2で記録された情報に紐づけて記憶部104に記録する。記憶部104には、
図2、
図3で例示した情報が記録される。
【0036】
以下の処理では、分割部108が、重み付け部105が設定した分割ルールおよび抑止ルールとその優先度に基づいて、データの分割を行う。前提として、抑止ルール設定部106および分割ルール設定部107は、
図7に例示するルール及び優先度の設定を予め行っている。また、分割部108は、
図7に例示する設定情報を、重み付け部105から取得している。
【0037】
まず、分割部108は、優先度“1“が設定された同一業務のプログラムからのアクセスか否かに基づく分割を行う(ステップS4)。分割部108は、データ取得部101が
図2、
図3で例示した解析結果情報およびプログラムが同一業務に属するかどうかの解析結果に基づいて、同一業務に属するプログラムからのアクセスを分割しないようにしてデータの分割を行う。換言すれば、このルールに基づくと、同一業務に属さないプログラムが、それぞれ異なるデータにアクセスしているような場合については、それらのデータについては分割することができる。例えば、分割部108は、このステップS4の処理で、
図8、
図9に例示したような分割を行う。また、
図2の例において“プログラムA”と”プログラムB“が同一業務ではない場合、“テーブルT1”と“テーブルT3”はそれぞれ、“プログラムA”が帰属するマイクロサービスと“プログラムB”が帰属するマイクロサービスへ分割することができる。
【0038】
次に分割部108は、ステップS4の処理で分割できなかったデータに対して、優先度“2”が設定された参照アクセスと更新アクセスに基づく分割ルールによる分割を行う(ステップS5)。例えば、分割部108は、このステップS5の処理で、
図10に例示したような分割を行う。また、
図2の例において“テーブルT2”を“プログラムA“が帰属するマイクロサービスへ分割することができる。
【0039】
次に分割部108は、ステップS4~S5の処理で分割できなかったデータに対して、優先度“3”が設定された“複製不可”の設定の有無による分割を行う(ステップS6)。例えば、
図11の例で、テーブルXに“複製不可”が設定されている場合、分割部108は、“テーブルX”を“テーブルX-1”と“テーブルX-2”へ分割する。なお、
図11の例で、“項目3”を“テーブルX-1”と“テーブルX-2”の何れかに振り分けるかは任意であるが、後のステップS8、S9のルールを取り入れてアクセス頻度が多い方へ分割してもよい。どのテーブルにも”複製不可“の設定がなされていなければステップS6の処理はスキップする。
【0040】
次に分割部108は、ステップS4~S6の処理で分割できなかったデータに対して、優先度“4”が設定された“分離不可”の設定の有無による分割を行う(ステップS7)。例えば、
図12の例で、テーブルXに“分離不可”が設定されている場合、分割部108は、“テーブルX”を“テーブルX-1”と“テーブルX-2”へ分割する。また、分割部108は、“テーブルX-3”を新たに設ける。なお、
図12の例で、“項目3”を“テーブルX-1”と“テーブルX-2”の何れかに振り分けるかは任意であるが、後のステップS8、S9のルールを取り入れてアクセス頻度が多い方へ分割してもよい。どのテーブルにも“分離不可”の設定がなされていなければステップS7の処理はスキップする。
【0041】
次に分割部108は、ステップS4~S7の処理で分割できなかったデータに対して、優先度“5”が設定された静的なアクセス頻度の偏りに基づく分割を行う(ステップS8)。分割部108は、同じテーブルや項目に対して、複数のプログラムからアクセスがある場合、アクセス命令が多く記載されたソースコードを含むプログラム側へそのテーブルや項目を分割する。例えば、
図11の例の場合、“プログラムA”のソースコードよりも“プログラムB”のソースコードの方が“項目3”へのアクセス命令が多く記述されている場合、分割部108は、“項目3”をプログラムBの“テーブルX-2”へ振り分け、“テーブルX”を“テーブルX-1”と“テーブルX-2”へ分割する。
【0042】
次に分割部108は、ステップS4~S8の処理で分割できなかったデータに対して、優先度“6”が設定された動的なアクセス頻度の偏りに基づく分割を行う(ステップS9)。分割部108は、同じテーブルに対して、複数のプログラムからアクセスがある場合、稼働ログ13にアクセス履歴が多く残されたプログラム側へそのテーブルや項目を分割する。例えば、例えば、
図11の例の場合、稼働ログ13に“プログラムA”よりも“プログラムB”の方が“項目3”へのアクセス履歴が多く記述されている場合、分割部108は、“項目3”をプログラムBの“テーブルX-2”へ振り分け、“テーブルX”を“テーブルX-1”と“テーブルX-2”へ分割する。
【0043】
次に分割部108は、ステップS4~S9の処理で分割できなかったデータに対して、アクセス頻度に偏りが無い場合の分割を行う(ステップS10)。アクセス頻度の観点では、アクセス頻度が単一のデータベースに偏らず、同程度である可能性がある。この場合、項目は各データベースに格納し、同期をとる手法が適切と考えられる。分割部108は、同じテーブルに対して、複数のプログラムから大きな偏りが無くアクセスがある場合、
図12に例示するように、共有データを複製して分割後のデータの各々に含めるようにしてデータの分割を行う。
【0044】
分割部108は、ステップS4~ステップS10の処理で分割した分割後のデータをそのデータが帰属するマイクロサービスと対応付けて記憶部104に記録する。出力部109は、分割結果を出力する(ステップS11)。例えば、出力部109は、
図8~
図12に例示するように、マイクロサービスごとに、そのマイクロサービスに分割されたプログラムとテーブル及びテーブルの項目を出力する。
【0045】
図14は、本発明の一実施形態のアクセス頻度によるデータ分割処理の一例を示すフローチャートである。
図13のステップS9~S10では、動的なアクセス頻度に基づく分割を行う。例えば、プログラムAとプログラムBが同じデータにアクセスする場合、アクセス頻度にどの程度の差があれば偏りがあると判定するのかが不明である。
図14に、ステップS9とステップS10の何れの方法によってデータの分割を行うかを切り替える処理の一例を示す。
まず、担当者が、データ別に閾値をデータ分割装置100へ入力する。データ取得部101は、入力された閾値を取得し、重み付け部105へ出力する。重み付け部105は、「No.」が“6”の分割ルールにおけるアクセス頻度の多少を判定する閾値に、入力された値を設定する(ステップS21)。次に分割部108は、
図2、
図3に例示する稼働ログ13の解析結果のうち動的アクセス頻度の値と、入力された閾値とを比較する(ステップS23)。動的なアクセス頻度が閾値を上回る場合(ステップS23;Yes)、分割部108は、動的なアクセス頻度が高いプログラムの方へデータを分割する(ステップS24)。つまり、ステップS9の処理による分割を行う。動的なアクセス頻度が閾値以下の場合(ステップS23;No)、つまり、アクセス頻度に大きな偏りが無い場合、分割部108は、全てのプログラムへデータを分割する(ステップS25)。つまり、ステップS10の処理による分割を行う。
【0046】
なお、同様の処理を
図13のステップS8とステップS9の処理について行ってもよい。つまり、静的なアクセス頻度の判定する閾値を入力し、その閾値に基づいて、静的なアクセス頻度に偏りがあるか否かの判定を行う(ステップS22)。アクセス頻度が閾値を上回っていれば、ステップS8の処理によってデータ分割を行い、アクセス頻度が閾値以下であればステップS9の処理によってデータ分割を行う。
【0047】
図14の処理フローによれば、例えば、閾値を70%で設定した場合、プログラムBの“データベースX”の“項目3”へのアクセス頻度が70%を超えるときには、
図11のように、“マイクロサービスB”の“データベースX-2”に“項目3”を格納する。“項目3”へのアクセス頻度が60%のときは閾値に達していないので、
図12のように“データベースX-1”と“データベースX-2”の両方に“項目3”を格納して同期をとる手法を採用する。
【0048】
しかし、閾値が70%で良いかどうかが不明な場合がある。そこで、閾値の設定を手動ではなく、稼働ログ13の解析に基づいて自動設定してもよい。既存システム10の稼働時間が長いほど稼働ログ13が増えるため、学習のために必要な情報も増える。例えば、既存システム10のうち、2つのプログラムからアクセスされる項目についての平均的なアクセス頻度の割合が7:3であれば、閾値を70%に自動設定してもよい。
【0049】
以上説明したように、データ分割装置100は、既存システム10を構成するプログラムのソースコード11と、データの構成情報12とに基づいて、各プログラムからデータへのアクセス命令を抽出し、各プログラムからアクセスしているテーブルや項目と、そのアクセス種別(“CRUD”)を抽出するデータアクセス解析部102(プログラム観点での解析)と、稼働ログ13等に基づいて、プログラムが構成する業務処理上の特性を考慮した解析を行う業務解析部103(業務観点での解析)とを備える。業務処理上の特性には、複製の可否、データ項目間の関連(分離の可否)、同一業務に関するプログラムかどうか、データへのアクセス頻度などが含まれる。また、データ分割装置100は、プログラム観点と業務観点の両方の観点からデータを分割するルールを設定する重み付け部105を備える。これにより、データ分割装置100は、プログラムと業務の両方の観点から自動的にデータ分割を行い、密結合したデータを強制的に分離し、データベースとマイクロサービスを1対1の関係に対応付け、データを帰属先へ効率的に分割する。また、テーブルの分割・統合を行う際、ソフトウェアの有識者や業務の有識者により手動で重み付けをしている作業を、データ分割装置100を使うことにより自動化し、作業者の手間を大幅に削減することができる。また、データ分割装置100は、分割が困難なテーブルについても分割案を提示する。これにより、既存システム10のマイクロサービス化を効率よく行うことができる。
【0050】
上述した実施形態において、記憶部104と他の機能部が同一の処理装置に含まれる例を説明したが、これには限られない。例えば、記憶部104を含む記憶装置が、データ分割装置100の外部に備えられてもよい。
【0051】
また、上述した実施形態において、各機能部(データ取得部101、データアクセス解析部102、業務解析部103、記憶部104、重み付け部105、抑止ルール設定部106、分割ルール設定部107、分割部108、出力部109)が、それぞれ独立の装置として設けられてもよい。
【0052】
図15は、本発明の一実施形態のデータ分割装置の最小構成を示す図である。
図15に示すようにデータ分割装置20は、少なくとも重み付け部21と、分割部22とを有している。
重み付け部21は、複数のプログラムと前記プログラムのうちの少なくとも1つからアクセスされるデータを複数含むシステムに対し、前記複数のプログラムと前記複数のデータとを複数のグループ(マイクロサービス)に分割するにあたり、前記複数のデータを分割するルールと該ルールの重み付け(優先度)を設定する手段である。
分割部22は、重み付け部21が設定したルールに基づいて複数のデータを複数のプログラムの何れかに割り当てる手段である。
【0053】
図16は、本発明の一実施形態のデータ分割装置のハードウェア構成の一例を示す図である。
コンピュータ900は、CPU901、主記憶装置902、補助記憶装置903、入出力インタフェース904、通信インタフェース905を備える。上述のデータ分割装置100は、コンピュータ900に実装される。そして、上述した各機能部(データ取得部101、データアクセス解析部102、業務解析部103、重み付け部105、抑止ルール設定部106、分割ルール設定部107、分割部108、出力部109)の動作は、プログラムの形式で補助記憶装置903に記憶されている。CPU901は、プログラムを補助記憶装置903から読み出して主記憶装置902に展開し、当該プログラムに従って上記処理を実行する。また、CPU901は、プログラムに従って、記憶領域を主記憶装置902に確保する。また、CPU901は、プログラムに従って、処理中のデータを記憶する記憶領域を補助記憶装置903に確保する。
【0054】
なお、少なくとも1つの実施形態において、補助記憶装置903は、一時的でない有形の媒体の一例である。一時的でない有形の媒体の他の例としては、入出力インタフェース904を介して接続される磁気ディスク、光磁気ディスク、CD-ROM、DVD-ROM、半導体メモリ等が挙げられる。また、このプログラムが通信回線によってコンピュータ900に配信される場合、配信を受けたコンピュータ900が当該プログラムを主記憶装置902に展開し、上記処理を実行しても良い。また、当該プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、当該プログラムは、前述した機能を補助記憶装置903に既に記憶されている他のプログラムとの組み合わせで実現するもの、いわゆる差分ファイル(差分プログラム)であっても良い。
【0055】
また、上述した実施形態におけるデータ分割装置100の一部、または全部を、LSI(Large Scale integration)等の集積回路として実現してもよい。データ分割装置100の各機能部は個別にプロセッサ化してもよいし、一部、または全部を集積してプロセッサ化してもよい。また、集積回路化の手法はLSIに限らず専用回路、または汎用プロセッサで実現してもよい。また、半導体技術の進歩によりLSIに代替する集積回路化の技術が出現した場合、当該技術による集積回路を用いてもよい。
【0056】
その他、本発明の趣旨を逸脱しない範囲で、上記した実施の形態における構成要素を周知の構成要素に置き換えることは適宜可能である。また、この発明の技術範囲は上記の実施形態に限られるものではなく、本発明の趣旨を逸脱しない範囲において種々の変更を加えることが可能である。
【符号の説明】
【0057】
10・・・既存システム
11・・・ソースコード
12・・・データの構成情報
13・・・稼働ログ
14・・・設定情報
100・・・データ分割装置
101・・・データ取得部
102・・・データアクセス解析部
103・・・業務解析部
104・・・記憶部
105・・・重み付け部
106・・・抑止ルール設定部
107・・・分割ルール設定部
108・・・分割部
109・・・出力部
900・・・コンピュータ
901・・・CPU
902・・・主記憶装置
903・・・補助記憶装置
904・・・入出力インタフェース
905・・・通信インタフェース