IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

特開2024-75439クエリ実行方法およびクエリ実行プログラム
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024075439
(43)【公開日】2024-06-03
(54)【発明の名称】クエリ実行方法およびクエリ実行プログラム
(51)【国際特許分類】
   G06F 16/903 20190101AFI20240527BHJP
【FI】
G06F16/903
【審査請求】未請求
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2022186949
(22)【出願日】2022-11-22
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100104190
【弁理士】
【氏名又は名称】酒井 昭徳
(72)【発明者】
【氏名】今井 智大
(72)【発明者】
【氏名】横田 耕一
(72)【発明者】
【氏名】野田 政秀
(72)【発明者】
【氏名】郭 兆功
(72)【発明者】
【氏名】國川 雅司
【テーマコード(参考)】
5B175
【Fターム(参考)】
5B175DA01
5B175GC01
5B175GC04
(57)【要約】
【課題】エンティティが有する性質に基づく適切なクエリ分割によりクエリ実行の処理効率を向上できること。
【解決手段】クエリ実行装置100は、エンティティE同士が所定のリレーションシップを持ったデジタルツインに対し、投入される複数回のクエリQを実行する。クエリ実行装置100は、クエリQ中のエンティティEのうち、データ内容の変更頻度が低いエンティティである静的エンティティE2を特定する。クエリ実行装置100は、特定した静的エンティティE2を起点としてクエリQを複数の分割クエリ「あ」、「い」に分割し、分割クエリ「あ」、「い」を並列実行することで、クエリ実行を短時間で行うことができ、処理効率を向上できる。
【選択図】図1
【特許請求の範囲】
【請求項1】
エンティティ同士が所定のリレーションシップを持ったデジタルツインに対し、投入される複数回のクエリを実行するクエリ実行方法において、
前記クエリ中の前記エンティティのうち、データ内容の変更頻度が低いエンティティである静的エンティティを特定し、
特定した前記静的エンティティを起点として前記クエリを複数の分割クエリに分割し、
前記分割クエリを並列実行する、
処理をコンピュータが実行することを特徴とするクエリ実行方法。
【請求項2】
前記静的エンティティは、
前記クエリから、前記デジタルツインが有するエンティティと、プロパティと、リレーションシップを抽出し、特定のリレーションシップを有するエンティティを前記静的エンティティと特定する、
ことを特徴とする請求項1に記載のクエリ実行方法。
【請求項3】
前記クエリの分割は、
投入された前記クエリがクエリ並列実行パターンに一致するか否かにより分割の有無を判断し、
前記クエリ並列実行パターンに一致すれば、前記クエリを分割し、
前記クエリ並列実行パターンに一致しなければ、前記クエリを分割せずにクエリ実行する、
ことを特徴とする請求項1に記載のクエリ実行方法。
【請求項4】
前記クエリ並列実行パターンは、
1回目に投入された前記クエリから、前記デジタルツインが有するエンティティと、プロパティと、リレーションシップを抽出し、特定のリレーションシップを有するエンティティを前記静的エンティティと特定し、
特定した前記静的エンティティを起点として前記クエリを複数に分割する前記クエリ実行パターンを生成し、
2回目以降に投入される前記クエリに対し、
投入された前記クエリが、生成した前記クエリ並列実行パターンに一致するか否かにより分割の有無を判断し、
前記クエリ並列実行パターンに一致すれば、前記クエリを分割し、
分割した複数の前記クエリを並列実行する、
ことを特徴とする請求項1に記載のクエリ実行方法。
【請求項5】
前記静的エンティティは、
前記クエリ中における複数の前記静的エンティティ毎に分割した場合の各分割クエリの処理時間に基づき、特定することを特徴とする請求項4に記載のクエリ実行方法。
【請求項6】
前記並列実行後の複数の分割クエリのクエリ実行結果について、並列処理した前後の分割クエリの前記起点のエンティティが等しければ正常と判断し、後段のクエリ結果を出力し、
各分割クエリの前記起点のエンティティが等しくなければ、後段のクエリに対する差分クエリを生成し、生成した差分クエリに基づく後段クエリを再投入する、
ことを特徴とする請求項1に記載のクエリ実行方法。
【請求項7】
エンティティ同士が所定のリレーションシップを持ったデジタルツインに対し、投入される複数回のクエリを実行するクエリ実行プログラムにおいて、
前記クエリ中の前記エンティティのうち、データ内容の変更頻度が低いエンティティである静的エンティティを特定し、
特定した前記静的エンティティを起点として前記クエリを複数の分割クエリに分割し、
前記分割クエリを並列実行する、
処理をコンピュータに実行させることを特徴とするクエリ実行プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、クエリ実行方法およびクエリ実行プログラムに関する。
【背景技術】
【0002】
デジタルツインにより、実際に稼働している対象物を仮想空間上にモデルとして表現できる。デジタルツインが保持する情報をアプリケーションが利用することで、各種のサービスを提供できる。デジタルツインは、リレーションシップを持ったデータであり、エンティティと、プロパティと、リレーションシップの3つのデータ型で表現される。クエリ実行によりデジタルツインのリレーションを辿ることで、データ同士の繋がりを探索できる。
【0003】
情報探索の先行技術としては、例えば、データベースに格納するXMLデータの事前解析により木構造の中間表現を生成し、インデックスを用いた検索により木構造を辿り検索結果を得る技術がある。また、スレッド生成ユニットが連続イベント処理クエリを演算子で分割し、演算子毎の制約条件に基づいて、並列実行可能な部分クエリを抽出し、並列実行する技術がある。また、実世界のモデル化にあたり、インスタンス生成やインスタンスへのアクセスにより固有の実行空間を生成して処理を行うことで、実行空間の量に応じてシステム構成を柔軟に変更する技術がある。また、マーケティングキャンペーンの管理・分析のシステムにおいて、各データと処理に標準化したメタデータを付与し、動的および静的に連携して実行することで、リアルタイムかつインタラクティブなデータ処理を行う技術がある。また、ビッグデータからデータを抽出するシステムにおいて、検索クエリの到着で各リレーショナル・データベースのデータ取得クエリを生成して取得したデータを並列処理することで、複数種類のリレーショナル・データベースからのデータ抽出を行う技術がある。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2001-34619号公報
【特許文献2】特表2016-514299号公報
【特許文献3】特開平6-332711号公報
【特許文献4】米国特許第7707163号明細書
【特許文献5】米国特許第10268722号明細書
【発明の概要】
【発明が解決しようとする課題】
【0005】
従来技術において、例えば、インデックスを用いた検索をデジタルツインに適用した場合、全てのデジタルツインの情報をインデックスに登録する必要がある。デジタルツインのエンティティは、静的および動的性質を有しており、情報が頻繁に変更される動的なエンティティについては、インデックスを用いた検索は困難である。
【0006】
従来技術では、単に投入したクエリに基づく検索等のデータ処理を実行し、エンティティが有する静的および動的な性質を考慮していない。このため、多段のリレーションシップを辿るエンティティの取得には、多数回のクエリ投入が必要となり時間がかかり、クエリ実行の処理効率を向上できなかった。
【0007】
一つの側面では、本発明は、エンティティが有する性質に基づく適切なクエリ分割によりクエリ実行の処理効率を向上できることを目的とする。
【課題を解決するための手段】
【0008】
本発明の一側面によれば、エンティティ同士が所定のリレーションシップを持ったデジタルツインに対し、投入される複数回のクエリを実行するクエリ実行方法において、前記クエリ中の前記エンティティのうち、データ内容の変更頻度が低いエンティティである静的エンティティを特定し、特定した前記静的エンティティを起点として前記クエリを複数の分割クエリに分割し、前記分割クエリを並列実行する、処理をコンピュータが実行することを要件とする。
【発明の効果】
【0009】
本発明の一態様によれば、エンティティが有する性質に基づく適切なクエリ分割によりクエリ実行の処理効率を向上できるという効果を奏する。
【図面の簡単な説明】
【0010】
図1図1は、実施の形態にかかるクエリ実行方法の概要を示す説明図である。
図2図2は、クエリ実行装置が実行するデータ処理の流れの例を示す図である。
図3図3は、既存の技術によるデータ処理例を示す説明図である。
図4図4は、既存技術によるデータ処理時間を示すタイミングチャートである。
図5図5は、実施の形態に適用するデジタルツインのデータ構造例を示す図である。
図6A図6Aは、実施の形態にかかるエンティティの性質別の分類例の説明図である。
図6B図6Bは、エンティティ間の上位関係の有無のテーブル例を示す図表である。
図7A図7Aは、動的なエンティティを起点とした分割時の不具合を示す説明図である。(その1)
図7B図7Bは、動的なエンティティを起点とした分割時の不具合を示す説明図である。(その2)
図8図8は、クエリ並列実行パターンテーブルの例を示す図表である。
図9図9は、デジタルツインの実際のデータ例を示す図である。
図10図10は、並列実行時のクエリデータの詳細例を示す図である。
図11図11は、実施の形態によるデータ処理時間を示すタイミングチャートである。
図12図12は、クエリ実行装置が実行するデータ処理の他の例を示す説明図である。
図13図13は、実施の形態のクエリ実行装置の機能ブロック図である。
図14図14は、クエリ実行装置のハードウェア構成例を示す図である。
図15図15は、クエリ実行装置が実行する処理例を示すフローチャートである。
図16図16は、クエリ実行装置が実行する処理例の詳細を示すフローチャートである。(その1)
図17図17は、クエリ実行装置が実行する処理例の詳細を示すフローチャートである。(その2)
【発明を実施するための形態】
【0011】
以下に図面を参照して、開示のクエリ実行方法およびクエリ実行プログラムの実施の形態を詳細に説明する。
【0012】
(実施の形態にかかるクエリ実行方法の一実施例)
図1は、実施の形態にかかるクエリ実行方法の概要を示す説明図である。実施の形態のクエリ実行装置100は、例えば、デジタルツインへのアクセス時、デジタルツインのエンティティの関係性に基づくクエリを抽出し、クエリ中のエンティティの静的あるいは動的な性質を分類判断する。そして、クエリ実行装置100は、エンティティの性質に基づきクエリを分割し、分割したクエリを並列実行する処理を行う。クエリ実行装置100は、サーバ等のコンピュータである。
【0013】
図1(a)には、デジタルツインのデータ構造例を示す。デジタルツイン(DT)は、エンティティEと、プロパティPと、リレーション(リレーションシップ)Rの3つのデータ型で表現される。
【0014】
実施の形態のクエリ実行装置100について、例えば、デジタルツインに対しユーザの購買に関する行動履歴に基づきデジタルツインを探索し、ユーザに対し商品の推薦リストを作成するデータ処理(クエリ処理)の例を用いて説明する。ユーザ(来店者)は、行動履歴として、ショッピングセンターの店舗Bに来店して品を購入したとする。
【0015】
エンティティEは、例えば、保有者または保有者の被保有物のデータである。図1(a)の例では、エンティティEは、ユーザU、購買対象の品E1、および品を保有する店舗E2である。ここで、店舗E2を保有者とすると、保有者(店舗E2)の非保有物が品E1である。プロパティPは、例えば、保有者の非保有物(品E1)を購入するユーザ(来店者)Uの行動履歴のデータである。リレーションシップRは、プロパティとエンティティEとの関係性を示すデータである。
【0016】
クエリ実行装置100が実行するデータ処理の流れの例は、例えば、下記1.~5.である。
1.来店者(ユーザ)の購買に関する行動履歴を取得し、以前訪問した店舗E2が保有する商品E1一式を取得する。
2.各商品E1のメーカーα,β,…(E3、エンティティ)を取得対象として抽出する。
3.メーカーα,β,…それぞれが製造している商品E4(エンティティ)を取得する。
4.取得した商品の一覧(価格、売り上げ情報を含む)からユーザUに対する商品推薦リストを生成する。
5.ユーザUに対し、商品推薦リストを提示する。
【0017】
ここで、店舗E2が保有する商品E1は、売り切れや、商品入れ替えにより頻繁に変更されるものであり、ある時期においては商品E1のデータは存在しない(削除等)場合がある。
【0018】
例えば、owendByは、エンティティのリレーションについて、実世界での上下関係を示すものであり、refPointerは、エンティティのリレーションの上下関係を示していないものである。図1(a)には、リレーションシップRを点線で示している。
【0019】
実施の形態のクエリ実行装置100は、上下関係を示すリレーションによって、通常はわからない各エンティティの動的/あるいは静的な性質を抽出する。クエリ実行装置100は、エンティティに上下関係がある場合、上位のエンティティはエンティティの作成/および削除頻度が少ない(静的エンティティ)と分類判断し、下位のエンティティはエンティティの作成/および削除頻度が多い(動的エンティティ)と分類判断する。
【0020】
静的なエンティティは、作成および削除頻度が少なく、また、数が少ないため、複数回のクエリ取得時においてもエンティティが存在し、同じエンティティが参照される可能性が高い。このため、クエリ実行装置100は、静的なエンティティを並列処理の起点として利用する。例えば、クエリ実行装置100は、クエリ取得時、このクエリを図1(b)に示したように分割する。
【0021】
図1(b)には、クエリ実行装置100が取得する(クエリ実行装置100に投入される)クエリQの例を示す。この1文のクエリQには、デジタルツインに対するデータ処理が示されている。このクエリQが示す処理要求の概要を(3行)の各行毎に説明する。
【0022】
1.1 ユーザUのデジタルツインの行動(Activity)の中から訪問した店舗Bのリンクを取得。
1.2 店舗Bのリンクのリレーションを辿って店舗Bのエンティティを取得。
1.3 店舗BへowendByリレーションを持っている在庫商品のエンティティを取得。
2.各在庫商品のデジタルツイン中のメーカーへのリンクのリレーションを辿ってメーカーのデジタルツインを取得し、重複削除。
3.各メーカーのデジタルツインへowendByリレーションを持っている商品のデジタルツインを取得。
【0023】
そして、実施の形態のクエリ実行装置100は、1文のクエリQの途中の静的なエンティティを起点として、クエリを分解し、分解したクエリを用いて並列にデータ取得を実行する。
【0024】
具体的には、図1(b)に示すクエリQについて、クエリ実行装置100は、「あ」、「い」の2つのクエリに分解する。分解後の一方のクエリ「あ」は元のクエリQの1、2行目、他方のクエリ「い」は元のクエリQの3行目に相当する。
【0025】
図1(a)には、図1(b)に示した分解後のクエリ「あ」、「い」にそれぞれ対応するデータ処理の範囲を示している。クエリ実行装置100は、静的なエンティティについて店舗Bと、メーカーα、β、…を判断する。
【0026】
クエリ実行装置100は、エンティティEについて、店舗B(E2)については、下位の商品E1からowendByで多く参照されているため、静的なエンティティと判断する。また、クエリ実行装置100は、メーカーα、β、…(E3)については、下位の商品E4からowendByで多く参照されているため、静的なエンティティと判断する。一方、クエリ実行装置100は、ユーザ(来店者)Uについては、owendByで多く参照されていないため、動的なエンティティと判断する。
【0027】
図1(a)において、クエリ実行装置100は、クエリ処理「あ」に対応する処理は、静的なエンティティである店舗E2と、静的なエンティティであるメーカーα、β、…の静的なエンティティE3の取得までの処理を含む。また、クエリ実行装置100は、クエリ処理「い」に対応する処理は、各メーカーα,β,…の静的なエンティティE3からメーカーα,β,…が製造する商品のエンティティE4の取得までの処理を含む。
【0028】
図1(a)に示したように、店舗Bの来店者Uが商品「まんじゅう」と「クッキー」を購入したとする。この場合、クエリ実行装置100は、上記処理により、商品「まんじゅう「クッキー」のメーカーα,βが製造している他の商品「せんべい」と「えびせん」をこの来店者Uに対して商品推薦リストとして提示する。
【0029】
リレーションシップRが保有者(ownedBy等)のエンティティE2(店舗B)はデータ内容の変更頻度が少ない。実施の形態のクエリ実行装置100は、1回目のクエリの後、2回目以降のクエリでこのエンティティE2を起点とするクエリが再び来るものとの予測のもと探索のデータ処理を行う。データ内容の変更頻度が少ないエンティティE2を起点にするデータ処理により、無駄になる確率の少ないクエリの投入を可能にする。ここで、クエリ実行装置100は、クエリQについて、エンティティE2を起点として分割し、並列実行することで、データ処理時間の短縮を図る。
【0030】
なお、保有者(ownedBy等)以外のエンティティ(たとえは品E1)はデータ内容の変更が多い(変更頻度が高い)ため、このエンティティE1を起点にすると、投機(並列)実行が無駄になる確率が高い。
【0031】
より具体的には、クエリ実行装置100は、デジタルツインを利用するアプリケーションやサービスで処理からクエリを生成可能であることに基づき、エンティティ間の実世界の上下関係のリレーションを利用し、エンティティの性質を静的/動的に分類判断する。そして、クエリ実行装置100は、静的なエンティティを起点としてクエリを分解し、分解したクエリを並列実行する。
【0032】
例えば、図1(b)に示したように「あ」と「い」の2つに分解したクエリを並列実行することにより、要求されたクエリに基づくデータ処理を短時間で行えるようになる。また、クエリ実行装置100は、多段のリレーションを辿るエンティティを短時間で取得できる。
【0033】
(既存の技術の説明)
ここで、既存の技術内容と課題を説明しておく。既存の技術のクエリ実行装置が実行するデータ処理の流れ(ユースケース)は、上述した実施の形態と同様に下記1.~4.であるとする。
【0034】
図2は、クエリ実行装置が実行するデータ処理の流れの例を示す図である。図2の例では図1対応のデータ処理を示す。クエリ実行装置100は、下記の処理1.~4.を順次実行する。
1.来店者(ユーザU)の購買に関する行動履歴を取得し、以前訪問した店舗が保有する商品一式を取得する(ステップS201)。
2.各商品のメーカーを取得対象として抽出する(ステップS202)。
3.メーカーの商品一覧を取得する(ステップS203)。
4.取得した商品一覧(価格、売り上げ情報を含む)から来店者に対する商品推薦リストLを生成する(ステップS204)。
5.ユーザUに商品推薦リストLを提示。
【0035】
図3は、既存の技術によるデータ処理例を示す説明図である。図3に示すデジタルツインのデータ構造例自体は、実施の形態と同様であるとする。既存の技術で図2に示したデータ処理を行う場合を考える。例えば、データ処理装置が事前に利用するデジタルツインへのインデックスとして、来店者Uのエンティティ(activity)には、recent(ショッピングセンター→店舗B→まんじゅう)のインデックスが作成済みであるとする。
【0036】
このように、デジタルツインにインデックス手法を用いた検索を行う場合には、全てのデジタルツインが事前に定義され、かつデータ変更がないことが望まれる。しかし、デジタルツインでは、エンティティには、図3の商品E1「まんじゅう」に示すように、店舗Bの商品の入れ替えや売り切れ等により、エンティティの作成/および削除頻度が多い動的な性質を有するものが含まれる。このため、デジタルツインに対し、インデックス手法による検索は適用することができない。
【0037】
また、既存の技術では、エンティティである品E1についてメーカーα、β、…別にそれぞれ1000個ある場合、必要な情報を出力するために多くのリレーション(例えば、1000個×メーカー数)を辿る必要があるため、データ処理時間が増大する。
【0038】
図4は、既存技術によるデータ処理時間を示すタイミングチャートである。図4には、デジタルツインのデータを保持するデジタルツイン(DT)システムAに対し、DTアクセスシステムBがアクセスする構成例を示す。
【0039】
DTアクセスシステムBは、1回目のクエリ投入(ステップS401)により、DTシステムAにApiリクエストを送出する。DTシステムAは、1回目のクエリ処理を処理時間T1で実行し(ステップS402)、DTアクセスシステムBに1回目のクエリ結果を出力し、DTアクセスシステムBは、1回目のクエリ結果を出力する(ステップS403)。この後、DTアクセスシステムBは、2回目のクエリ投入(ステップS404)により、DTシステムAにApiリクエストを送出する。
【0040】
DTシステムAは、2回目のクエリ処理を処理時間T2で実行し(ステップS405)、DTアクセスシステムBに2回目のクエリ結果を出力し、DTアクセスシステムBは、2回目のクエリ結果を出力する(ステップS406)。なお、図4に示す横軸の時間軸において、実際は、クエリ実行の期間T1,T2部分が大部分の時間を占める。
【0041】
既存技術では、クエリ毎にシーケンシャルにクエリ処理を実施するため、クエリ数が増えるほど、DTシステムAでは累積的に全体のクエリ処理時間が増大する(T1+T2)。例えば、図3で示したデータ処理では、多くのリレーション(例えば、1000個×メーカー数)の回数のクエリ実行が必要となり、データ処理時間がかかることになる。
【0042】
(実施の形態のデータ処理の詳細説明)
以下、実施の形態のクエリ実行装置100が行うデータ処理の詳細を説明する。
【0043】
図5は、実施の形態に適用するデジタルツインのデータ構造例を示す図である。デジタルツイン(DT)は、エンティティEと、プロパティPと、リレーションシップRの3つのデータ型で表現される。デジタルツインは、例えば、ETSIによって標準化されたNGSI-LDや、Azure(登録商標)DTDLによって実装されている。
【0044】
ETSIはEuropean Telecommunications Standardization Instituteの略である。NGSIはNext Generation Service Interfacesの略であり、LDはLinked Dataの略である。DTDLはDigital Twins Definition Languageの略である。
【0045】
図5において、来店者(ユーザ)Uの行動履歴(購買履歴)がプロパティPである。リレーションシップRは、例えば、refPointer、ownedByを用いて表現される。例えば、(1)「ユーザの購入情報 refPointer 消しゴム」は、ユーザUの購入情報(プロパティP)に消しゴム(エンティティE1)が存在する、という意味である。また、(2)「消しゴム ownedBy 雑貨店」は、消しゴム(E1)は雑貨店(E2)の被保有物である、という意味である。リレーションシップRを辿ることで、繋いだデータ同士に意味を持たせることができる。
【0046】
図6Aは、実施の形態にかかるエンティティの性質別の分類例の説明図である。図6Aに示すデジタルツインのデータ構造自体は、図1(a)と同様である。
【0047】
図6Aに示すエンティティEのリレーションシップRには、実世界での上下関係を示すowendByと、エンティティのリレーションの上下関係を示していないrefPointerが存在している。
【0048】
このため、クエリ実行装置100は、上下関係を示すリレーションによって、通常はわからない各エンティティの動的/あるいは静的な性質を抽出する。クエリ実行装置100は、エンティティに上下関係がある場合、上位のエンティティはエンティティの作成/および削除頻度が少ない(静的)に分類判断し、下位のエンティティはエンティティの作成/および削除頻度が多い(動的)と分類判断する。
【0049】
具体的には、クエリ実行装置100は、図6Aに示す店舗B(エンティティE2)については、下位のデジタルツイン(エンティティE1)からowendByで多く参照されているため、静的なエンティティと判断する。また、クエリ実行装置100は、メーカーα、β、…(エンティティE3)については、下位のデジタルツイン(エンティティE4)からowendByで多く参照されているため、静的なエンティティと判断する。
【0050】
一方、クエリ実行装置100は、ユーザUについては、owendByで多く参照されていないため、動的なエンティティと判断する。また、エンティティ(品)E1は、店舗Bに対しowendByで多く参照し、下位に位置しており、クエリ実行装置100はE1を動的なエンティティと判断する。また、エンティティ(品)E4は、メーカーα,β,…に対しowendByで多く参照し、下位に位置しており、クエリ実行装置100はE4を動的なエンティティと判断する。
【0051】
図6Bは、エンティティ間の上位関係の有無のテーブル例を示す図表である。クエリ実行装置100は、図6Aを用いて説明したエンティティ間の上下関係の有無を、図6Bに示す上下関係有無テーブル600に予め設定しておく。
【0052】
上下関係有無テーブル600には、リレーション名別の上下関係の有無(〇,×)が設定される。例えば、リレーション「owendBy」は上下関係を有する(〇)設定であり、その他のリレーション、例えば、「refPointer]は上限関係を有さない(×)と設定される。図6Bに示す例では、上下関係有無テーブル600のリレーション「isIn」は、上下関係を有さない(×)と設定している。この「isIn」が上下関係を有する(〇)例については、後述する。
【0053】
クエリ実行装置100は、図6Aに示すデータ構造に対応して、図6Bの上下関係有無テーブル600を作成しておく。これにより、クエリ実行装置100は、データ処理時、上下関係有無テーブル600の設定を参照し、デジタルツインのエンティティ間の上下関係、および静的あるいは動的なエンティティを判断する。
【0054】
静的なエンティティは、作成および削除頻度が少なく、また、数が少ないため、2回目以降の複数回のクエリ取得時においてもエンティティが存在し、同じエンティティが参照される可能性が高い。
【0055】
このため、実施の形態のクエリ実行装置100は、図6Bに示したエンティティ間の上下関係有無テーブル600参照による上下関係の有無の判断後、静的なエンティティを並列処理の起点として用いる(図1(b)参照)。そして、クエリ実行装置100は、2回目以降のクエリ投入時には、図1(b)に示したように、クエリ途中の静的なエンティティを起点としてクエリを「あ」、「い」に分割し、分割した「あ」、「い」のクエリを並列実行する。
【0056】
図7A図7Bは、動的なエンティティを起点とした分割時の不具合を示す説明図である。図7Aは時期t1におけるクエリ分割時のデータ取得の流れ、図7Bは時期t2におけるクエリ分割時のデータ取得の流れを示す。
【0057】
図7Aに示す時期t1において、動的なエンティティE1(品E11,E12)でクエリ分割することを考える。また、デジタルツインの探索では、最終的にエンティティE4のデータが欲しいため、このエンティティE4(品E41,E42)でクエリ分割することを考える。
【0058】
しかしながら、図7Bに示すように、時期t2において、店舗BのエンティティE1は、数が多く(例えば、1000個~)、データ内容が頻繁に変更(追加・削除)されるため、E1で分割を実行したとき、実際の結果と異なり無効となる。例えば、図7Aに示す時期t1のときに存在した品E11は、図7Bに示す時期t2では売り切れ等で存在していない(削除)とともに、図7Aに示す時期t1のときに存在していない品E13が、図7Bに示す時期t2で新たに販売(追加)されている。
【0059】
また、図7Bに示すように、メーカーα,β,…のエンティティE4は数が多く(例えば、200個~)、入れ替わりや内部のプロパティ変更が多いため、エンティティE4も中身が入れ替わり、E4で分割実行しても実際の結果と異なり無効となる。例えば、品E41,E42は、図7Aに示す時期t1と、図7Bに示す時期t2とでは内部のプロパティ(売上)がa→b,z→zzzに変わっている。
【0060】
このように、動的エンティティ等、静的エンティティ以外のエンティティを起点としたクエリ分割を行おうとした場合には、エンティティが変化するため並列実行したデータ取得が無効になる。したがって、上述したように静的エンティティを起点とした分割が有効となる。
【0061】
以上の説明から、下記の条件1.~3.が導出される。
1.デジタルツインを利用するアプリケーションやサービスでは、処理からクエリを生成可能である。
2.エンティティ間の上下関係リレーションを利用することで、エンティティの性質が静的あるいは動的と判定可能である。
3.エンティティを起点としてクエリを分解、および並列実行可能である。
【0062】
したがって、実施の形態のクエリ実行装置100は、デジタルツインを利用するアプリケーションやサービスのクエリにおいて、エンティティ間の上下関係を示すリレーションを利用し、動的あるいは静的なエンティティの性質を判定する。そして、クエリ実行装置100は、静的なエンティティでクエリを分割し、分割したクエリを並列実行する。これにより、クエリ実行装置100は、クエリ取得後、デジタルツインの探索によるデータ処理結果までのデータ処理を効率的に行い、また、取得時間を短縮化する。
【0063】
(データ処理の概要)
クエリ実行装置100は、以下の処理A.~D.の手順でデータ処理を行う。
A.投入されたクエリに対し、1回目は通常通り処理を実行し、クエリ抽出する。
【0064】
B.上記A.の処理実行後、クエリを解析する。クエリ解析では、クエリ中のエンティティの動的/静的を算出し、並列実行パターンを生成する。
【0065】
図8は、クエリ並列実行パターンテーブルの例を示す図表である。クエリ実行装置100は、1回目のクエリ実行後、クエリ並列実行パターンテーブル800を作成する。クエリ並列実行パターンテーブル800は、クエリを並列実行するか否かを判定するために作成する。
【0066】
クエリ並列実行パターンテーブル800は、トリガクエリ、並列実行クエリ、並列実行エンティティ、全体クエリ、の各項目を有する。トリガクエリは、実行済みクエリの先頭(図1(b)の1.1に示したUser.activity.first.place)であり、クエリ実行装置100は、2回目移行にマッチングを行うため保存する。並列実行クエリは、並列実行するクエリ列(図1(b)の「い」(|maker| relashonship(ownedBy))である。
【0067】
並列実行エンティティは、並列実行クエリで実行の基点となるエンティティであり、図1(a),(b)に示すメーカーα,βである。全体クエリは、処理全体のクエリを結合したものである。
【0068】
C.投入された2回目以降のクエリに対する処理を実行する。
C-1.実行時にクエリを抽出し、クエリ並列実行パターンのトリガクエリ(User.activity.first.place)と現在のクエリ「あ」が一致するか検索する。
C-2.同じクエリの実行が検出された場合、メーカーα、メーカーβのエンティティを基点にクエリを前段クエリ「あ」と、並列実行クエリ「い」(|maker| relashonship(ownedBy))に分割し、「あ」、「い」を並列実行する。
【0069】
D.「あ」、「い」の処理実行後、全体クエリと現在のクエリを比較する。
D-1.比較結果が同一のクエリだった場合には、並列実行したクエリの結果を出力する。
D-2.比較結果が異なるクエリの場合には、並列実行結果を捨て最新の結果をもとに後半のクエリを実行し、結果を出力する。
【0070】
(デジタルツインの実際のデータ例)
図9は、デジタルツインの実際のデータ例を示す図である。図9(a)には、デジタルツイン(DT)のエンティティE、プロパティP、リレーションシップRの実際の構造例を示す。
【0071】
図9(a)に示すデータ構造例において、来店者(ユーザU)の店舗Bとの関係の実際のデータ例を図9(b)に示す。エンティティ(ユーザU、プロパティP)がリレーションシップR(refPointer)でエンティティE2(店舗B)に関連付けられている。
【0072】
図9(b)に示すデータ内容は、例えば、エンティティEには、識別子(id)「userA」が設定される。プロパティPには、type「shopping」、date「日付」、place「ショッピングセンターの店舗B」が設定される。リレーションシップRには、リレーションシップのtype「refPointer」、value「(店舗Bの情報、URL)expample.com.shoppingcenterA/shopB」が設定される。
【0073】
また、図9(a)に示すデータ構造例において、エンティティE1(品)の店舗Bとの関係の実際のデータ例を図9(c)に示す。エンティティE1(品、プロパティP)がリレーションシップR(owendBy)でエンティティE2(店舗B)に関連付けられている。図9(c)に示すデータ内容は、例えば、エンティティEには、id「id0001」が設定される。プロパティPには、name「(品名)まんじゅう]、メーカー「α」、売値「100円」、場所「棚A中央1」、在庫数「29」が設定される。リレーションシップRには、リレーションシップのtype「owendBy」、value「(店舗Bの情報、URL)expample.com.shoppingcenterA/shopB」が設定される。
【0074】
図10は、並列実行時のクエリデータの詳細例を示す図である。図10(a)は、抽出したクエリを示す。このクエリQは、例えば、投入された2回目以降のクエリであり、id「samplequely」と、クエリQの値queryValueとを有する。
【0075】
queryValueは、「(User.activity.first.place).relashonship(refPointer).relashonship(ownedBy).makers.uniq{|maker|relashonship(ownedBy)}であるとする。
【0076】
クエリ実行装置100は、図10(a)に示すクエリQを図10(b)に示す前段クエリ「あ」と、図10(c)に示す後段クエリ「い」に分割する。クエリ実行装置100は、図10(b)に示す前段クエリ「あ」について、idを「samplequely2」に設定し、そのtypeとして前段クエリを示す「first」と、queryValueと、masterQueryValueと、を設定する。
【0077】
queryValueは、クエリQを分割した前段部分の値「(User.activity.first.place).relashonship(refPointer).relashonship(ownedBy).makers.uniq」である。masterQueryValueは、図10(a)に示した全体のクエリQの値である。
【0078】
また、クエリ実行装置100は、図10(c)に示す後段クエリ「い」について、idを「samplequely3」に設定する。また、クエリ実行装置100は、typeとして後段クエリを示す「second」と、queryValueと、targetEntity(ターゲットのエンティティ)と、masterQueryValueと、を設定する。
【0079】
queryValueは、クエリQを分割した後段部分の値「{|maker|relashonship(ownedBy)}」である。targetEntityは、「メーカーα、メーカーβ」である。masterQueryValueは、図10(a)に示した全体のクエリQの値である。
【0080】
図11は、実施の形態によるデータ処理時間を示すタイミングチャートである。図11には、デジタルツインのデータを保持するデジタルツイン(DT)システムAに対し、DTアクセスシステムBがアクセスする構成例を示す。上述したクエリ実行装置100は、DTアクセスシステムBに相当する。
【0081】
DTアクセスシステムBは、1回目のクエリ投入(ステップS1101)により、DTシステムAにApiリクエストを送出する。DTシステムAは、1回目のクエリ処理を処理時間T1で実行し(ステップS1102)、DTアクセスシステムBに1回目のクエリ結果を出力し、DTアクセスシステムBは、1回目のクエリ結果を出力する(ステップS1104)。
【0082】
また、DTアクセスシステムBは、(1)ステップS1101で投入されたクエリに対する抽出を行う(ステップS1103)。ステップS1103の抽出は、DTシステムAによる1回目のクエリ処理(ステップS1102)と並行して行う。
【0083】
ステップS1104の後、DTアクセスシステムBは、ステップS1103で抽出した(2)クエリを解析し、エンティティの性質が静的であるか動的であるかを求め、並列実行パターンを生成する(ステップS1105)。この後、DTアクセスシステムBは、2回目のクエリ投入(ステップS1106)により、DTシステムAにApiリクエストを送出する。DTシステムAは、2回目のクエリ処理を実行する(ステップS1107)。ステップS1107では、分割された前段クエリ「あ」の処理を実行する。
【0084】
ここで、DTアクセスシステムBは、(3-1)ステップS1101で投入された2回目のクエリを抽出し、トリガクエリ(「あ」のクエリ)とのマッチングを行う(ステップS1108)。次に、DTアクセスシステムBは、(3-2)ステップS1108のマッチング結果がトリガクエリにヒット(マッチング)すれば、並列実行する後段クエリ「い」を投入する(ステップS1109)。ステップS1108,ステップS1109の処理は、DTシステムAによる2回目のクエリ処理(ステップS1107)と並行して行う。
【0085】
ステップS1109により、DTアクセスシステムBは、DTシステムAにApiリクエストを送出する。DTシステムAは、2回目の並列実行クエリ「い」の処理を実行する(ステップS1110)。
【0086】
ここで、DTシステムAは、前段クエリ「あ」の処理(ステップS1107)と、後段クエリ「い」の処理(ステップS1110)とを並列実行する。前段クエリ「あ」と後段クエリ「い」の並列実行にかかる処理時間は、2回目のクエリを単独実行したときの時間T2(図4参照)よりも短くできる(「あ」+「い」の処理時間<T2)。
【0087】
DTシステムAは、2回目のクエリ結果として、ステップS1107とステップS1110それぞれのクエリ結果をDTアクセスシステムBに出力する。DTアクセスシステムBは、(4)前段クエリ「あ」の処理(ステップS1107)と、後段クエリ「い」の処理(ステップS1110)のクエリ結果を比較する(ステップS1111)。そして、DTアクセスシステムBは、(4-1)並列実行したクエリの結果を出力する(ステップS1112)。
【0088】
ここで、DTアクセスシステムBは、並列実行したことによるクエリの結果に問題があった場合には、DTシステムAに再度アクセスする。そして、DTアクセスシステムBは、(4-2-1)最新の結果を元に後段クエリ「い」を再度実行し(ステップS1113)、クエリ結果をDTアクセスシステムBに出力する。DTアクセスシステムBは、(4-2-2)クエリ結果を出力し(ステップS1114)、以上、2回目のクエリ投入迄の処理を終了する。
【0089】
以後、DTシステムAおよびDTアクセスシステムBは、3回目以降のクエリ投入時、ステップS1106以降の処理を同様に実行する。なお、図11に示す横軸の時間軸において、実際は、クエリ実行の期間「1回目のクエリ」、「2回目のクエリ「あ」,「い」」部分が大部分の時間を占める。
【0090】
上記処理において、ステップS1105で生成する並列実行パターンは、データ内容の変更頻度が少ないエンティティE2(店舗B)を起点とするクエリ分割を行っている。2回目以降、複数投入されるクエリは、前回同様のクエリが再び来ることが多い。この前提に基づく実施の形態によれば、多数回のクエリ投入に対する並列実行により、クエリ数が多いほど、既存技術に比してデータ処理時間を大幅に短縮できるようになる。
【0091】
実施の形態によれば、デジタルツインの多段のリレーションを辿るエンティティの取得時間の抑制を実現できる。一つのエンティティの取得にかかる時間を50msと仮定すると、クエリ全体では前段クエリ:1000+後段クエリ:1000×メーカー数(例では2以上)のエンティティ取得が行われる。なお、実際には静的エンティティも含まれるが、少数個であるため誤差範囲となる。そして、分割したクエリを並列実行することで、クエリにかかるデータ処理時間を、後段クエリのみの時間程度に抑制可能となる(=1000×50ms=50秒の抑制(数十%に相当)。なお、クエリ実行装置100は、投入されたクエリが並列実行可能なクエリパターンにヒットしなかった場合には、抑制は行わない。
【0092】
(データ処理の他の例-isInへの適用例)
図12は、クエリ実行装置が実行するデータ処理の他の例を示す説明図である。上述の説明では、リレーションシップとしてowendByを例に説明した。図12では、isInに適用したデータ処理例として、例えば、ユーザが複数のオフィス間で移動して業務を行う前提であり、あるオフィスにいるユーザの人事DB上の本オフィスを探索し、空きオフィスを調査する例について説明する。ここで、オフィスの収容人数は、計画上適切に配分されているという想定であり、実際のオフィス利用傾向が計画と異なるため、探索を行う例について説明する。このような探索は、例えば人事部が行う。
【0093】
図12(a)には、クエリ実行装置が実行するデータ処理の流れの例を示す。クエリ実行装置100は、例えば、下記の処理1.~5.を順次実行する。
1.あるユーザ(User1)の行動履歴を起点に調査オフィス(オフィスA)を決定する(ステップS1201)。例えば、オフィスAを利用したユーザ(User1)から使用上の苦情が来た場合等に処理開始する。
2.オフィスAを利用していたユーザ(User2,3)の本オフィス(オフィスB,C)を探索する(ステップS1202)。
3.各本オフィス(オフィスB,C)の利用者(User4,5)を抽出する(ステップS1203)。
4.各オフィス(オフィスA,B,C)の混雑具合を算出する(ステップS1204)。
5.各オフィスの収容人数の改善案Lを提示する。
【0094】
図12(b)には、データ処理例を示す。上述した説明同様に、各部に該当するエンティティE、リレーションシップRを記載してある。ここで、動的なエンティティE1であるUser2,3は、日毎・時間毎にオフィスが変わる可能性があり流動的であるとする。この場合、2回目以降等、次のクエリタイミングで同じエンティティE1が利用される可能性は低い。したがって、上述したクエリ分割および並列実行ではクエリ結果が異なる可能性が高い。
【0095】
ここで、クエリ実行装置100は、isInでUser2,3の保有者(静的エンティティE3)となっているオフィスB,Cで分割を行う。オフィスB,Cは、User2,3の本オフィスであり、内容がほぼ変わらないエンティティであるため、次のクエリタイミングでも同じエンティティが利用される可能性が高い。この場合、クエリ実行装置100は、このエンティティE3,E4を起点として、クエリを前段クエリと後段クエリに分割し、並列実行することで、効率的な探査を行うことができる。
【0096】
なお、図12に示したisInの適用例において、図6Bに示したエンティティ間の上下関係有無テーブル600は、isInのみ「上下関係あり(〇)」と設定し、クエリ実行装置100がこの上下関係有無テーブル600を参照する。
【0097】
(クエリ実行装置の機能ブロック図)
図13は、実施の形態のクエリ実行装置の機能ブロック図である。クエリ実行装置100は、上述したDTアクセスシステムB(図11参照)に相当する。
【0098】
クエリ実行装置100には、クエリ投入アプリCが作成したクエリQが投入される。クエリ実行装置100は、クエリ抽出部1301、クエリ並列実行パターン生成部1302、クエリ並列実行判定部1303、クエリ実行部1304、クエリ結果出力部1305を含む。また、クエリ実行装置100は、並列クエリ実行結果保存部1306、クエリ結果整合部1307、再実行クエリ差分抽出部1308、を含む。
【0099】
クエリ抽出部1301は、クエリ投入アプリCが作成したクエリQが示すデジタルツインDTへのアクセス要求から、DTのエンティティの関係性に基づくクエリを抽出する。クエリ抽出部1301は、上下関係有無テーブル600(図6)を参照してクエリ抽出を行う。
【0100】
クエリ並列実行パターン生成部1302は、エンティティの特定リレーションの参照量に応じてクエリQ中のエンティティの動的あるいは静的な性質を算出し、算出した性質を元にクエリQを分割したクエリ並列実行パターンを生成する。
【0101】
クエリ並列実行判定部1303は、クエリ並列実行パターン生成部1302が生成したクエリ並列実行パターンについて、現在のクエリQが並列実行可能かを判定する。クエリ並列実行判定部1303は、クエリ並列実行パターンテーブル800(図8)を参照して現在のクエリQが並列実行可能かを判定する。クエリ並列実行判定部1303は、判定結果が並列実行可能な場合は、元のクエリを前段クエリ「あ」と後段クエリ「い」に分割し、並列実行するクエリとしてクエリ実行部1304に出力する。
【0102】
クエリ実行部1304は、クエリ並列実行判定部1303から主力されたクエリ毎に対応するDTシステムAにアクセスし、前段クエリ「あ」、後段クエリ「い」それぞれに対応する探索処理を行う。クエリ結果出力部1305は、クエリ実行部1304の探索によりクエリ結果をクエリ投入アプリCに出力する。
【0103】
並列クエリ実行結果保存部1306は、並列実行したクエリの結果を保存する。クエリ結果整合部1307は、並列実行済みのクエリが流れてきた場合、その内容を確認する。クエリ結果整合部1307は、並列実行結果が正しい(すなわち、前段クエリ「あ」の結果エンティティと、後段クエリ「い」の開始エンティティが等しい)場合には、後段のクエリ結果を出力する。一方、並列続行結果が正しくない場合には、並列実行した後段クエリ「い」に対する正しい後段クエリ「い」を再投入する。クエリ結果整合部1307は、分割されていた前段クエリ「あ」と後段クエリ場合には結果を結合し、出力する。
【0104】
再実行クエリ差分抽出部1308は、クエリ結果整合部1307から受け取った並列実行した後段クエリ「い」と、再投入された正しい後段クエリ「い」とを比較し、取得が必要なエンティティのみを含む差分クエリおよび差分実行結果を生成する。再実行クエリ差分抽出部1308は、差分クエリをクエリ実行部1304に出力し、差分実行結果を並列クエリ実行結果保存部1306に出力する。
【0105】
このクエリ実行装置100に対する追加機能として設けることができる。再実行クエリ差分抽出部1308は、並列実行した後段クエリと、実際の後段クエリが一部異なる場合に、後段クエリの差分を生成し、差分クエリのみを実行する。この再実行クエリ差分抽出部1308を設けることで、取得時間の抑制の効率化を図ることができる。
【0106】
(クエリ実行装置のハードウェア構成例)
図14は、クエリ実行装置のハードウェア構成例を示す図である。クエリ実行装置100は、図14に示す汎用のハードウェアからなるサーバ等のコンピュータで構成することができる。
【0107】
クエリ実行装置100は、CPU(Central Processing Unit)1401と、メモリ1402と、ネットワークI/F(Interface)1403と、を有する。また、クエリ実行装置100は、記録媒体I/F1404と、記録媒体1405と、可搬型記録媒体I/F1406と、可搬型記録媒体1407と、を有する。また、各構成部は、バス1400によってそれぞれ接続される。
【0108】
CPU1401は、クエリ実行装置100の全体の制御を司る制御部として機能する。CPU1401は、複数のコアを有していてもよい。メモリ1402は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMがOSのプログラムを記憶し、ROMがアプリケーションプログラムを記憶し、RAMがCPU1401のワークエリアとして使用される。メモリ1402に記憶されるプログラムは、CPU1401にロードされることで、コーディングされている処理をCPU1401に実行させる。
【0109】
ネットワークI/F1403は、通信回線を通じてネットワークNWに接続され、ネットワークNWを介して外部のコンピュータに接続される。外部のコンピュータは、例えば、クエリ投入アプリCを有する外部の端末装置等である。そして、ネットワークI/F1403は、ネットワークNWと装置内部とのインターフェースを司り、外部のコンピュータからのデータの入出力を制御する。ネットワークI/F1403には、例えば、モデムやLANアダプタなどを採用することができる。
【0110】
記録媒体I/F1404は、CPU1401の制御にしたがって記録媒体1405に対するデータのリード/ライトを制御する。記録媒体1405は、記録媒体I/F1404の制御で書き込まれたデータを記憶する。記録媒体1405としては、例えば、磁気ディスク、光ディスクなどが挙げられる。
【0111】
可搬型記録媒体I/F1406は、CPU1401の制御にしたがって可搬型記録媒体1407に対するデータのリード/ライトを制御する。可搬型記録媒体1407は、可搬型記録媒体I/F1406の制御で書き込まれたデータを記憶する。可搬型記録媒体1407としては、例えば、CD(Compact Disc)-ROM、DVD(Digital Versatile Disk)、USB(Universal Serial Bus)メモリなどが挙げられる。
【0112】
なお、クエリ実行装置100は、上述した構成部の他に、例えば、入力装置、ディスプレイなどを有することにしてもよい。
【0113】
図13に示したクエリ抽出部1301~再実行クエリ差分抽出部1308の機能は、図14に示したCPU1401がプログラム実行することで機能を実現できる。図6に示した上下関係有無テーブル600と、図8に示したクエリ並列実行パターンテーブル800は、例えば、図14に示したメモリ1402、記録媒体1405、可搬型記録媒体1407を用いて機能を実現できる。
【0114】
(クエリ実行装置のデータ処理例)
図15は、クエリ実行装置が実行する処理例を示すフローチャートである。図15には、クエリ実行装置100のCPU1401が実行する処理内容を示す。
【0115】
クエリ実行装置100(CPU1401)は、クエリ処理を行うプログラムを実行することで(ステップS1501)、以下の処理を行う。はじめに、クエリ実行装置100は、投入されたクエリQからDTのエンティティの関係性に基づくクエリを抽出する(ステップS1502)。
【0116】
次に、クエリ実行装置100は、抽出したクエリがクエリ並列実行パターンに一致するか否かを判定する(ステップS1503)。判定結果が一致しなければ(ステップS1503:No)、クエリ実行装置100は、ステップS1504以下の処理に移行する。一方、判定結果が一致すれば(ステップS1503:Yes)、クエリ実行装置100は、ステップS1508以下の処理に移行する。
【0117】
ステップS1504では、クエリ実行装置100は、クエリQを実行する(ステップS1504)。次に、クエリ実行装置100は、クエリQ中の各エンティティの静的/動的な性質を算出する(ステップS1505)。
【0118】
次に、クエリ実行装置100は、ステップS1505で算出した各エンティティ中に静的エンティティが存在するか否かを判断する(ステップS1506)。判断結果、存在する場合には(ステップS1506:Yes)、クエリ実行装置100は、ステップS1507の処理に移行する。一方、判断結果、存在しない場合には(ステップS1506:No)、クエリ実行装置100は、ステップS1501の処理に戻る。
【0119】
ステップS1507では、クエリ実行装置100は、静的なエンティティを抽出し、この静的エンティティを起点にクエリ並列実行パターンを生成し(ステップS1507)、ステップS1501の処理に戻る。
【0120】
また、ステップS1508では、クエリ実行装置100は、クエリ並列実行パターンの並列実行エンティティを起点に、クエリQを前段クエリ「あ」と並列実行クエリ(後段クエリ「い」)に分割し、並列実行する(ステップS1508)。
【0121】
次に、クエリ実行装置100は、前段クエリ「あ」の処理終了後、前段クエリ「あ」の結果と並列実行エンティティが一致しているかを確認する(ステップS1509)。クエリ実行装置100は、前段クエリ「あ」の結果と並列実行エンティティが一致していれば(ステップS1510:Yes)、並列実行クエリの結果を出力する(ステップS1511)。
【0122】
一方、前段クエリ「あ」の結果と並列実行エンティティが一致していなければ(ステップS1510:No)、クエリ実行装置100は、並列実行結果クエリ(後段クエリ「い」)の結果を捨てる。そして、クエリ実行装置100は、前段クエリ「あ」の結果を元に並列実行クエリを実行する(ステップS1512)。
【0123】
クエリ実行装置100は、ステップS1511、あるいはステップS1512の処理後、初期状態(ステップS1501)に戻る。
【0124】
図16は、クエリ実行装置が実行する処理例の詳細を示すフローチャートである。図16には、図15で説明したクエリ分割処理(S1507)を詳細に示し、他の処理部分には図15と同じ符号を付してある。
【0125】
S1507では、はじめに、クエリ実行装置100は、各性的エンティティのクエリ中における出現順序を算出する(ステップS1507a)。出現順序は処理の段階を示している。例えば、図1図7Bに示した「店舗B」は2番目、「メーカーα,メーカーβ」は4番目となる。
【0126】
次に、クエリ実行装置100は、同じ出現順序の各静的エンティティについて、各静的エンティティを分割起点とした場合のクエリ前後の処理時間を算出する(ステップS1507b)。
【0127】
次に、クエリ実行装置100は、ステップS1507bで算出した各処理時間の差が所定の閾値以内であるか否かを判断する(ステップS1507c)。閾値は、例えば、30秒、クエリ全体処理時間の1/3、等である。ここで、クエリ実行装置100は、処理時間の閾値は、クエリ全体が前段、後段で一定の長さ以上で分割されているかを判定している。各処理時間の差が閾値を超える場合には(ステップS1507c:Yes)、クエリ実行装置100は、ステップS1507dの処理に移行する。一方、各処理時間の差が閾値以内の場合には(ステップS1507c:No)、分割場所が前後どちらかに偏っており、並列処理の効果が薄いため、クエリ実行装置100は、クエリ分割を行わず、ステップS1501の処理に戻る。
【0128】
ステップS1507dでは、クエリ実行装置100は、同じ出現順序の静的なエンティティを抽出し、抽出したエンティティを起点にクエリを分割し、クエリ並列実行パターンを生成する(ステップS1507d)。
【0129】
図16に示した処理例では、以下2つの処理を行う。ここでは、一つの同じ出現順序のエンティティ群を選び、選んだクエリを「あ」と「い」の2つに分割することを想定している。
【0130】
クエリ実行装置100は、下記2つの分割時の各処理時間を算出する。
分割の一つ目:店舗Bを起点に前後の処理時間を算出(例えば、店舗B前3秒:店舗B後87秒)。
分割の二つ目:メーカーα、メーカーβ…を起点として前後の処理時間を算出(例えば、メーカーα,β…前40秒、メーカーα,β後50秒)。
【0131】
クエリ実行装置100は、ステップS1507cで前後の処理時間の差をチェックすることで、図1の「い」に示すように、メーカーα,β側を分割起点として選んでいる。
【0132】
図17は、クエリ実行装置が実行するクエリ実行の処理例の詳細を示すフローチャートである。図17には、図15で説明したクエリ分割処理(S1507)を詳細に示し、他の処理部分には図15と同じ符号を付してある。そして、図17では、クエリ分割をさらに複数、例えば3分割できるかを判定する処理例を説明する。
【0133】
図17に示す処理例では、3分割できるかの判定を行うため、以下3つの処理を行う。そして、図17に示すクエリ分割が分割時の処理であるステップS1507(ステップS1507a~ステップS1507d)の基本処理自体は、図16と同様にでき、ステップS1507cの閾値判定で用いる閾値のみ変更している(30秒→20秒)。
【0134】
クエリ実行装置100は、下記3つの分割時の各処理時間を算出する。
分割の一つ目:クエリ先頭と店舗B間の処理時間を算出(例:25秒)。
分割の二つ目:店舗Bとメーカーα、メーカーβ…間の処理時間を算出(例:30秒)。
分割の三つ目:メーカーα、メーカーβ…と、クエリ末端までの処理時間を算出(例:35秒)。
【0135】
そして、クエリ実行装置100は、これら3区間の分散を求める、16.66…と算出する。この場合、分散の算出結果が閾値以内のため、クエリ実行装置100は、3分割を実施する。分散算出は、下記URLに掲示されているように周知である。URL:https://sci-pursuit.com/math/statistics/variance.html#
【0136】
上述した説明では、実施の形態のクエリ実行装置100は、ユーザUの買い物向けレコメンドをユースケースとして説明した。実施の形態は、これに限らず、ユーザ行動履歴から訪問場所の周辺の店舗リストを取得し、同種の観光場所を検索してレコメンドするユースケースにも適用できる。さらには、企業の情報を検索して、同じ会社を検索してレコメンドするユースケースにも適用できる等、各種ユースケースにおけるデジタルツインの探索に適用できる。
【0137】
以上説明した実施の形態のクエリ実行装置100は、エンティティ同士が所定のリレーションシップを持ったデジタルツインに対し、投入される複数回のクエリを実行する。クエリ実行装置100は、クエリ中のエンティティのうち、データ内容の変更頻度が低いエンティティである静的エンティティを特定し、特定した静的エンティティを起点としてクエリを複数の分割クエリに分割し、分割クエリを並列実行する。このように、データ内容の変更頻度が低いエンティティであるエンティティを起点とするクエリ分割において、2回目以降、複数投入されるクエリは、前回同様のクエリが再び来ることが多い。このような前提において、多数回のクエリ投入に対する並列実行により、クエリ数が多いほど、データ処理時間を大幅に短縮できることになる。デジタルツインにおける多段のリレーションシップを辿るエンティティの取得には、多数回のクエリ投入が必要となるが、実施の形態によれば、適切なクエリ分割と分割クエリに並列実行により、クエリ実行の処理効率を向上できるようになる。
【0138】
また、クエリ実行装置100は、静的エンティティは、クエリから、デジタルツインが有するエンティティと、プロパティと、リレーションシップを抽出する。そして、クエリ実行装置100は、OwendByやisIn等の特定のリレーションシップを有するエンティティを静的エンティティと特定してもよい。例えば、予めリレーションシップを有するエンティティを静的エンティティとして設定しておくことで、エンティティのうち静的エンティティを容易に特定できるようになる。
【0139】
また、クエリ実行装置100は、クエリの分割は、投入されたクエリがクエリ並列実行パターンに一致するか否かにより分割の有無を判断する。そして、クエリ実行装置100は、クエリ並列実行パターンに一致すれば、クエリを分割し、クエリ並列実行パターンに一致しなければ、クエリを分割せずにクエリ実行することとしてもよい。これにより、投入されるクエリに対する分割お予備並列実行の有無を適切に判断でき、処理効率を向上できるようになる。
【0140】
また、クエリ実行装置100は、クエリ並列実行パターンを1回目に投入されたクエリから、デジタルツインが有するエンティティと、プロパティと、リレーションシップを抽出し、特定のリレーションシップを有するエンティティを静的エンティティと特定する。クエリ実行装置100は、特定した静的エンティティを起点としてクエリを複数に分割するクエリ実行パターンを生成する。そして、クエリ実行装置100は、2回目以降に投入されるクエリに対し、投入されたクエリが、生成したクエリ並列実行パターンに一致するか否かにより分割の有無を判断する。クエリ実行装置100は、クエリ並列実行パターンに一致すれば、クエリを分割し、分割した複数のクエリを並列実行することとしてもよい。このように、投入される1回目のクエリを解析し、クエリ実行パターンを生成しておくことで、2回目以降複数回投入されるクエリをクエリ実行パターンに基づき並列実行でき、クエリ実行の処理効率を向上できるようになる。
【0141】
また、クエリ実行装置100は、静的エンティティは、クエリ中における複数の静的エンティティ毎に分割した場合の各分割クエリの処理時間に基づき、特定することとしてもよい。例えば、クエリ実行装置100は、処理時間は、分割クエリの数に応じて設定する。これにより、静的エンティティを起点としたクエリの分割を適切に行えるようになる。
【0142】
また、クエリ実行装置100は、並列実行後の複数の分割クエリのクエリ実行結果について、並列処理した前後の分割クエリの起点のエンティティが等しければ正常と判断し、後段のクエリ結果を出力する。クエリ実行装置100は、各分割クエリの起点のエンティティが等しくなければ、後段のクエリに対する差分クエリを生成し、生成した差分クエリに基づく後段クエリを再投入することとしてもよい。これにより、分割クエリの並列実行を実行結果に基づき適切に判断でき、分割クエリの並列処理の効率化を図ることができるようになる。
【0143】
なお、本発明の実施の形態で説明したクエリ実行方法は、予め用意されたプログラムをサーバ等のプロセッサに実行させることにより実現することができる。本方法は、ハードディスク、フレキシブルディスク、CD-ROM(Compact Disc-Read Only Memory)、DVD(Digital Versatile Disk)、フラッシュメモリ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本方法は、インターネット等のネットワークを介して配布してもよい。
【0144】
上述した実施の形態に関し、さらに以下の付記を開示する。
【0145】
(付記1)エンティティ同士が所定のリレーションシップを持ったデジタルツインに対し、投入される複数回のクエリを実行するクエリ実行方法において、
前記クエリ中の前記エンティティのうち、データ内容の変更頻度が低いエンティティである静的エンティティを特定し、
特定した前記静的エンティティを起点として前記クエリを複数の分割クエリに分割し、
前記分割クエリを並列実行する、
処理をコンピュータが実行することを特徴とするクエリ実行方法。
【0146】
(付記2)前記静的エンティティは、
前記クエリから、前記デジタルツインが有するエンティティと、プロパティと、リレーションシップを抽出し、特定のリレーションシップを有するエンティティを前記静的エンティティと特定する、
ことを特徴とする付記1に記載のクエリ実行方法。
【0147】
(付記3)前記クエリの分割は、
投入された前記クエリがクエリ並列実行パターンに一致するか否かにより分割の有無を判断し、
前記クエリ並列実行パターンに一致すれば、前記クエリを分割し、
前記クエリ並列実行パターンに一致しなければ、前記クエリを分割せずにクエリ実行する、
ことを特徴とする付記1に記載のクエリ実行方法。
【0148】
(付記4)前記クエリ並列実行パターンは、
1回目に投入された前記クエリから、前記デジタルツインが有するエンティティと、プロパティと、リレーションシップを抽出し、特定のリレーションシップを有するエンティティを前記静的エンティティと特定し、
特定した前記静的エンティティを起点として前記クエリを複数に分割する前記クエリ実行パターンを生成し、
2回目以降に投入される前記クエリに対し、
投入された前記クエリが、生成した前記クエリ並列実行パターンに一致するか否かにより分割の有無を判断し、
前記クエリ並列実行パターンに一致すれば、前記クエリを分割し、
分割した複数の前記クエリを並列実行する、
ことを特徴とする付記1に記載のクエリ実行方法。
【0149】
(付記5)前記静的エンティティは、
前記クエリ中における複数の前記静的エンティティ毎に分割した場合の各分割クエリの処理時間に基づき、特定することを特徴とする付記4に記載のクエリ実行方法。
【0150】
(付記6)前記処理時間は、前記分割クエリの数に応じて設定する、ことを特徴とする付記5に記載のクエリ実行方法。
【0151】
(付記7)前記並列実行後の複数の分割クエリのクエリ実行結果について、並列処理した前後の分割クエリの前記起点のエンティティが等しければ正常と判断し、後段のクエリ結果を出力し、
各分割クエリの前記起点のエンティティが等しくなければ、後段のクエリに対する差分クエリを生成し、生成した差分クエリに基づく後段クエリを再投入する、
ことを特徴とする付記1に記載のクエリ実行方法。
【0152】
(付記8)エンティティ同士が所定のリレーションシップを持ったデジタルツインに対し、投入される複数回のクエリを実行するクエリ実行プログラムにおいて、
前記クエリ中の前記エンティティのうち、データ内容の変更頻度が低いエンティティである静的エンティティを特定し、
特定した前記静的エンティティを起点として前記クエリを複数の分割クエリに分割し、
前記分割クエリを並列実行する、
処理をコンピュータに実行させることを特徴とするクエリ実行プログラム。
【符号の説明】
【0153】
100 クエリ実行装置
600 上下関係有無テーブル
800 クエリ並列実行パターンテーブル
1301 クエリ抽出部
1302 クエリ並列実行パターン生成部
1303 クエリ並列実行判定部
1304 クエリ実行部
1305 クエリ結果出力部
1306 並列クエリ実行結果保存部
1307 クエリ結果整合部
1308 再実行クエリ差分抽出部
1401 CPU
1402 メモリ
1403 ネットワークI/F
1405 記録媒体
1407 可搬型記録媒体
A DTシステム
B DTアクセスシステム
C クエリ投入アプリ
DT デジタルツイン
E(E1~E4) エンティティ
NW ネットワーク
P プロパティ
Q クエリ
R リレーションシップ
U ユーザ
図1
図2
図3
図4
図5
図6A
図6B
図7A
図7B
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17