(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024076307
(43)【公開日】2024-06-05
(54)【発明の名称】情報処理プログラム、情報処理方法、および情報処理装置
(51)【国際特許分類】
G06F 17/16 20060101AFI20240529BHJP
【FI】
G06F17/16 Q
【審査請求】未請求
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2022187832
(22)【出願日】2022-11-24
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100104190
【弁理士】
【氏名又は名称】酒井 昭徳
(72)【発明者】
【氏名】長坂 侑亮
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB31
(57)【要約】
【課題】動的に変化するグラフデータを効率的に扱えるようにすること。
【解決手段】情報処理装置101は、グラフデータ110に基づいて、第1配列データ111と、第2配列データ112と、ブロックデータ113と、ブロック幅データ114と、第3配列データ115とを作成する。情報処理装置101は、グラフデータ110に新たなノードを追加する場合、第1配列データ111に新たなノードのIDを追加し、第2配列データ112に新たなノードのIDを追加する。また、情報処理装置101は、ブロックデータ113に、新たなノードとエッジによりつながれた他ノードのIDを並べた配列を格納するための行領域を設定する。また、情報処理装置101は、ブロックデータ113における新たなノードのIDに対応する行を特定する情報を第3配列データ115に追加する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
ノードとノード間をつなぐエッジにより形成される構造を表すグラフデータに基づいて、前記グラフデータが表すノードのIDを並べた第1配列データと、前記第1配列データに含まれるIDを当該IDのノードとエッジによりつながれた他ノード数が降順となるように並べた第2配列データと、前記第2配列データに含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行として、前記第2配列データにおける前記各IDの順番に従って列方向に並べたブロックデータと、前記ブロックデータの列数を示すブロック幅データと、前記ブロックデータにおける、前記第1配列データに含まれる各IDに対応する行を特定する第3配列データとを作成し、
前記グラフデータに新たなノードを追加する場合、前記第1配列データに前記新たなノードのIDを追加し、前記第2配列データに前記新たなノードのIDを追加し、
前記ブロックデータに、前記新たなノードとエッジによりつながれた他ノードのIDを並べた配列を格納するための行領域を設定し、
前記ブロックデータにおける前記新たなノードのIDに対応する行を特定する情報を前記第3配列データに追加する、
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
【請求項2】
前記グラフデータから第1のノードを削除する場合、前記第3配列データを参照して、前記第2配列データから前記第1のノードのIDを削除し、
前記第3配列データを参照して、前記ブロックデータ内の前記第1のノードのIDに対応する第1の行の要素を削除し、
前記第2配列データを参照して、前記第1の行の要素それぞれに対応する前記ブロックデータ内の行から前記第1のノードのIDを削除し、
前記第3配列データから前記第1のノードのIDに対応する要素を削除し、
前記第1配列データから前記第1のノードのIDを削除する、
処理を前記コンピュータに実行させることを特徴とする請求項1に記載の情報処理プログラム。
【請求項3】
前記グラフデータに第2のノードと第3のノードとをつなぐ新たなエッジを追加する場合、前記第3配列データを参照して、前記ブロックデータにおける、前記第2のノードのIDに対応する第2の行を特定し、
特定した前記第2の行に前記第3のノードのIDを追加し、
前記第3配列データを参照して、前記ブロックデータにおける、前記第3のノードのIDに対応する第3の行を特定し、
特定した前記第3の行に前記第2のノードのIDを追加し、
処理を前記コンピュータに実行させることを特徴とする請求項2に記載の情報処理プログラム。
【請求項4】
前記グラフデータから第4のノードと第5のノードとをつなぐエッジを削除する場合、前記第3配列データを参照して、前記ブロックデータにおける、前記第4のノードのIDに対応する第4の行を特定し、
特定した前記第4の行から前記第5のノードのIDを削除し、
前記第3配列データを参照して、前記ブロックデータにおける、前記第5のノードのIDに対応する第5の行を特定し、
特定した前記第5の行から前記第4のノードのIDを削除する、
処理を前記コンピュータに実行させることを特徴とする請求項3に記載の情報処理プログラム。
【請求項5】
前記第1配列データについて、前記第1のノードのIDが削除された空白箇所を詰めるように更新し、
前記ブロックデータおよび前記第2配列データを参照して、更新後の前記第1配列データに含まれるIDを当該IDのノードとエッジによりつながれた他ノード数が降順となるように並べることにより、前記第2配列データを更新するとともに、前記ブロック幅データを更新し、
更新後の前記第2配列データに含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行として、当該第2配列データにおける前記各IDの順番に従って列方向に並べることにより、前記ブロックデータを更新し、
更新後の前記ブロックデータにおける、更新後の前記第1配列データに含まれる各IDに対応する行を特定するように前記第3配列データを更新する、
処理を前記コンピュータに実行させることを特徴とする請求項4に記載の情報処理プログラム。
【請求項6】
所定のブロックサイズに応じて、作成した前記第2配列データを複数の第2配列データに分割し、
分割した前記複数の第2配列データそれぞれについて、前記第2配列データに含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行として、前記第2配列データにおける前記各IDの順番に従って列方向に並べたブロックデータを作成し、
作成した前記ブロックデータのうち、前記第1配列データに含まれる各IDに対応するブロックデータを特定する第4配列データと、当該ブロックデータにおける前記各IDに対応する行を特定する第5配列データとを含む前記第3配列データを作成する、
ことを特徴とする請求項1~5のいずれか一つに記載の情報処理プログラム。
【請求項7】
前記グラフデータは、CSR形式の行列データである、ことを特徴とする請求項1に記載の情報処理プログラム。
【請求項8】
ノードとノード間をつなぐエッジにより形成される構造を表すグラフデータに基づいて、前記グラフデータが表すノードのIDを並べた第1配列データと、前記第1配列データに含まれるIDを当該IDのノードとエッジによりつながれた他ノード数が降順となるように並べた第2配列データと、前記第2配列データに含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行として、前記第2配列データにおける前記各IDの順番に従って列方向に並べたブロックデータと、前記ブロックデータの列数を示すブロック幅データと、前記ブロックデータにおける、前記第1配列データに含まれる各IDに対応する行を特定する第3配列データとを作成し、
前記グラフデータに新たなノードを追加する場合、前記第1配列データに前記新たなノードのIDを追加し、前記第2配列データに前記新たなノードのIDを追加し、
前記ブロックデータに、前記新たなノードとエッジによりつながれた他ノードのIDを並べた配列を格納するための行領域を設定し、
前記ブロックデータにおける前記新たなノードのIDに対応する行を特定する情報を前記第3配列データに追加する、
処理をコンピュータが実行することを特徴とする情報処理方法。
【請求項9】
ノードとノード間をつなぐエッジにより形成される構造を表すグラフデータに基づいて、前記グラフデータが表すノードのIDを並べた第1配列データと、前記第1配列データに含まれるIDを当該IDのノードとエッジによりつながれた他ノード数が降順となるように並べた第2配列データと、前記第2配列データに含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行として、前記第2配列データにおける前記各IDの順番に従って列方向に並べたブロックデータと、前記ブロックデータの列数を示すブロック幅データと、前記ブロックデータにおける、前記第1配列データに含まれる各IDに対応する行を特定する第3配列データとを作成し、
前記グラフデータに新たなノードを追加する場合、前記第1配列データに前記新たなノードのIDを追加し、前記第2配列データに前記新たなノードのIDを追加し、
前記ブロックデータに、前記新たなノードとエッジによりつながれた他ノードのIDを並べた配列を格納するための行領域を設定し、
前記ブロックデータにおける前記新たなノードのIDに対応する行を特定する情報を前記第3配列データに追加する、
制御部を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理プログラム、情報処理方法、および情報処理装置に関する。
【背景技術】
【0002】
従来、SNS(Social Networking Service)におけるユーザ間の関係性や分子構造における原子間のつながりなどを、ノード(頂点)とエッジを用いたグラフ構造で表現する場合がある。グラフデータの構造は、時間の経過とともに変化する場合がある。グラフデータの格納方法としては、例えば、隣接リストや隣接行列などがある。
【0003】
先行技術としては、圧縮行列のU番目の行からV番目の行までの複数の行を含む行群を取得し、行群の各行内での要素の並べ替えにより、係数行列のU番目の列からV番目の列までの列とは異なる列に属する要素に対応する行群内の第1要素を、圧縮行列の同じ列に集約するものがある。圧縮行列は、係数行列から値が0の要素を削除し、列数を削減する方向に圧縮したものである。Vは、Uより大きな整数である。圧縮行列を用いた演算においては、行群内の列方向に連続する複数の第1要素それぞれに対する演算がSIMD命令で実行される。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、従来技術では、動的に変化するグラフデータを効率的に扱うことが難しい。
【0006】
一つの側面では、本発明は、動的に変化するグラフデータを効率的に扱えるようにすることを目的とする。
【課題を解決するための手段】
【0007】
1つの実施態様では、ノードとノード間をつなぐエッジにより形成される構造を表すグラフデータに基づいて、前記グラフデータが表すノードのIDを並べた第1配列データと、前記第1配列データに含まれるIDを当該IDのノードとエッジによりつながれた他ノード数が降順となるように並べた第2配列データと、前記第2配列データに含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行として、前記第2配列データにおける前記各IDの順番に従って列方向に並べたブロックデータと、前記ブロックデータの列数を示すブロック幅データと、前記ブロックデータにおける、前記第1配列データに含まれる各IDに対応する行を特定する第3配列データとを作成し、前記グラフデータに新たなノードを追加する場合、前記第1配列データに前記新たなノードのIDを追加し、前記第2配列データに前記新たなノードのIDを追加し、前記ブロックデータに、前記新たなノードとエッジによりつながれた他ノードのIDを並べた配列を格納するための行領域を設定し、前記ブロックデータにおける前記新たなノードのIDに対応する行を特定する情報を前記第3配列データに追加する、情報処理プログラムが提供される。
【発明の効果】
【0008】
本発明の一側面によれば、動的に変化するグラフデータを効率的に扱えるようにすることができるという効果を奏する。
【図面の簡単な説明】
【0009】
【
図1】
図1は、実施の形態にかかる情報処理方法の一実施例を示す説明図である。
【
図2】
図2は、情報処理システム200のシステム構成例を示す説明図である。
【
図3】
図3は、データ管理装置201のハードウェア構成例を示すブロック図である。
【
図4】
図4は、グラフデータDの格納形式の一例を示す説明図である。
【
図5】
図5は、データ管理装置201の機能的構成例を示すブロック図である。
【
図6】
図6は、ノード追加時のデータ更新例を示す説明図である。
【
図7】
図7は、ノード削除時のデータ更新例を示す説明図である。
【
図8】
図8は、エッジ追加時のデータ更新例を示す説明図である。
【
図9】
図9は、エッジ削除時のデータ更新例を示す説明図である。
【
図11】
図11は、格納データを用いた演算例を示す説明図である。
【
図12】
図12は、データ管理装置201のデータ変換処理手順の一例を示すフローチャートである。
【
図13】
図13は、データ管理装置201のノード追加処理手順の一例を示すフローチャートである。
【
図14】
図14は、データ管理装置201のノード削除処理手順の一例を示すフローチャートである。
【
図15】
図15は、データ管理装置201のエッジ追加処理手順の一例を示すフローチャートである。
【
図16】
図16は、データ管理装置201のエッジ削除処理手順の一例を示すフローチャートである。
【
図17】
図17は、データ管理装置201のデータ整形処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0010】
以下に図面を参照して、本発明にかかる情報処理プログラム、情報処理方法、および情報処理装置の実施の形態を詳細に説明する。
【0011】
(実施の形態)
図1は、実施の形態にかかる情報処理方法の一実施例を示す説明図である。
図1において、情報処理装置101は、グラフデータを管理するコンピュータである。グラフデータは、例えば、SNS、分子構造、ナレッジグラフなどにおける要素間のつながりを、ノード(頂点)とエッジを用いたグラフ構造で表す情報である。
【0012】
グラフデータの従来の格納方法としては、例えば、隣接リストや隣接行列などがある。隣接リストは、グラフデータの頂点の配列を作成し、各頂点から対応するエッジをリストとしてつなげる手法である。隣接行列は、グラフデータを行列として扱い、各行が頂点に対応し、エッジでつながる頂点については「1(True)」とし、他は「0(False)」とする手法である。
【0013】
また、グラフデータを隣接行列として表した場合、疎行列となることが多い。疎行列とは、多くの要素がゼロ(0)である行列である。疎行列は、ゼロ要素を省略して管理されることが多い。圧縮方法としては、例えば、CSR(Compressed Sparse Row)形式がある。また、列方向にメモリが連続となるように配置する疎行列フォーマットとして、ELL形式やSliced ELL形式などがある。
【0014】
グラフデータは、例えば、幅優先探索や最短経路問題などの演算に用いられる。一方、グラフデータは、時間の経過とともに構造が変化することがある。例えば、SNSにおけるユーザ間の関係性をグラフ構造で表す場合、新規ユーザに応じてノードが増加したり、新たなフォロー関係が生じることでエッジが増加したりする。
【0015】
このため、グラフ構造の変化に効率的に追随しつつ、幅優先探索などの演算を効率的に行えるようにすることが望まれる。しかしながら、隣接リストや隣接行列などの従来の格納方法では、動的に変化するグラフデータを効率的に扱うことが難しい。例えば、隣接リストでは、ノードやエッジの追加、削除は行いやすいものの、幅優先探索などの演算を効率的に行うことが困難である。
【0016】
また、隣接行列では、幅優先探索などの演算を効率的に行いやすいものの、ノードやエッジの追加、削除が難しい。例えば、グラフデータを隣接行列で表す場合、ノードやエッジの追加、削除を行うにあたり、行列データを一から作成し直すことになり処理負荷が増える。
【0017】
そこで、本実施の形態では、グラフ全体を一つの行列としてまとめるのではなく、拡張可能な特性を持たせたデータとすることで、動的に変化するグラフデータを効率的に扱えるようにする情報処理方法について説明する。ここで、情報処理装置101の処理例(下記(1)および(2)の処理に対応)について説明する。
【0018】
(1)情報処理装置101は、グラフデータ110に基づいて、第1配列データ111と、第2配列データ112と、ブロックデータ113と、ブロック幅データ114と、第3配列データ115とを作成する。ここで、グラフデータ110は、ノードとノード間をつなぐエッジにより形成されるグラフ構造を表す情報である。
【0019】
図1の例では、グラフデータ110を、ノード0~7と、ノード0~7間をつなぐエッジにより形成されるグラフ構造を表す情報とする。
図1中、丸印内の数字は、ノードのIDを示す。IDは、ノードを一意に識別する識別情報である。ここでは、IDは、0を起点とする整数で表される。
【0020】
第1配列データ111は、グラフデータ110に含まれるノードのIDを並べた配列を示す。
図1の例では、第1配列データ111は、グラフデータ110に含まれるノードのID「0~7」を昇順に並べた配列を示す。第2配列データ112は、第1配列データ111に含まれるIDを当該IDのノードとエッジによりつながれた他ノード数が降順となるように並べた配列を示す。
【0021】
図1の例では、エッジによりつながれた他ノード数が多い順にIDを並べると、「1,5,0,7,2,3,4,6」となる。各IDのノードとエッジによりつながれた他ノード数は、例えば、グラフデータ110を隣接行列などの行列データで表す場合の非ゼロ要素の数に相当する。
【0022】
ブロックデータ113は、第2配列データ112に含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行として、第2配列データ112における各IDの順番に従って当該配列を列方向に並べた行列データである。例えば、ブロックデータ113の1行目には、第2配列データ112の1番目のID「1」のノードとエッジによりつながれた他ノードのID「0,2,3,4,5,7」が昇順に並んでいる。
【0023】
ブロック幅データ114は、ブロックデータ113の列数を示す。
図1の例では、ブロックデータ113の列数は、「6」である。第3配列データ115は、ブロックデータ113における、第1配列データ111に含まれる各IDに対応する行(配列の位置)を特定する情報である。
【0024】
図1の例では、第3配列データ115には、第1配列データ111に含まれる各IDに対応する行番号が示されている。ただし、行番号は、0を起点とする整数で表される。例えば、ID「0」に対応する行番号は、3行目を示す「2」である。
【0025】
(2)情報処理装置101は、グラフデータ110に新たなノードを追加する場合、第1配列データ111に新たなノードのIDを追加し、第2配列データ112に新たなノードのIDを追加する。また、情報処理装置101は、ブロックデータ113に、新たなノードとエッジによりつながれた他ノードのIDを並べた配列を格納するための行領域を設定する。また、情報処理装置101は、ブロックデータ113における新たなノードのIDに対応する行(配列の位置)を特定する情報を第3配列データ115に追加する。
【0026】
図1の例では、ID「8」の新たなノードを追加する場合を想定する。この場合、情報処理装置101は、第1配列データ111の末尾にID「8」を追加し、第2配列データ112の末尾にID「8」を追加する。また、情報処理装置101は、ブロックデータ113に、新たなノードとエッジによりつながれた他ノードのIDを並べた配列を格納するための行領域120を設定する。また、情報処理装置101は、ブロックデータ113における新たなノードのID「8」に対応する行番号「8」を第3配列データ115に追加する。
【0027】
このように、情報処理装置101によれば、動的に変化するグラフデータ110を、効率的に扱えるようにすることができる。例えば、情報処理装置101は、グラフデータ110を隣接行列で表す場合に比べて、ノードの追加によるグラフ構造の変化に効率的に追随することができる。また、情報処理装置101は、第1配列データ111や第3配列データ115をポインタとして、各ノード(例えば、新たに追加したノード)の情報に容易にアクセスすることができる。
【0028】
また、情報処理装置101は、グラフデータ110を隣接リストで表す場合に比べて、幅優先探索や最短経路問題などの演算を効率的に行えるようにすることができる。例えば、情報処理装置101は、グラフデータ110とベクトルとの積演算などを行うにあたり、第2配列データ112とブロックデータ113を用いて、SIMDを活用して積演算を行うことが可能となり、演算処理の高速化を図ることができる。また、情報処理装置101は、ブロック幅データ114から、ブロックデータ113の幅を容易に特定することができる。
【0029】
(情報処理システム200のシステム構成例)
つぎに、
図1に示した情報処理装置101を含む情報処理システム200のシステム構成例について説明する。ここでは、
図1に示した情報処理装置101を、情報処理システム200内のデータ管理装置201に適用した場合を例に挙げて説明する。情報処理システム200は、例えば、SNSのユーザ間の関係性などのデータ分析を行うコンピュータシステムに適用される。
【0030】
図2は、情報処理システム200のシステム構成例を示す説明図である。
図2において、情報処理システム200は、データ管理装置201と、クライアント装置202と、を含む。情報処理システム200において、データ管理装置201およびクライアント装置202は、有線または無線のネットワーク210を介して接続される。ネットワーク210は、例えば、インターネット、LAN(Local Area Network)、WAN(Wide Area Network)などである。
【0031】
ここで、データ管理装置201は、グラフデータDを管理するコンピュータである。グラフデータDは、例えば、SNSにおけるユーザ間の関係性などを、ノード(頂点)とエッジを用いて表す情報である。グラフデータDは、例えば、CSR形式の行列データである。
図1に示したグラフデータ110は、例えば、グラフデータDに対応する。データ管理装置201は、例えば、サーバである。
【0032】
クライアント装置202は、情報処理システム200のユーザが使用するコンピュータである。ユーザは、例えば、SNSのユーザ間の関係性などのデータ分析を行う者である。クライアント装置202は、例えば、PC(Personal Computer)、タブレットPCなどである。
【0033】
なお、ここではデータ管理装置201とクライアント装置202とを別体に設けることにしたが、これに限らない。例えば、データ管理装置201は、クライアント装置202により実現されてもよい。また、情報処理システム200には、複数のクライアント装置202が含まれてもよい。
【0034】
(データ管理装置201のハードウェア構成例)
つぎに、データ管理装置201のハードウェア構成例について説明する。
【0035】
図3は、データ管理装置201のハードウェア構成例を示すブロック図である。
図3において、データ管理装置201は、CPU(Central Processing Unit)301と、メモリ302と、ディスクドライブ303と、ディスク304と、通信I/F(Interface)305と、可搬型記録媒体I/F306と、可搬型記録媒体307と、を有する。また、各構成部は、バス300によってそれぞれ接続される。
【0036】
ここで、CPU301は、データ管理装置201の全体の制御を司る。CPU301は、複数のコアを有していてもよい。メモリ302は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMがOSのプログラムを記憶し、ROMがアプリケーションプログラムを記憶し、RAMがCPU301のワークエリアとして使用される。メモリ302に記憶されるプログラムは、CPU301にロードされることで、コーディングされている処理をCPU301に実行させる。
【0037】
ディスクドライブ303は、CPU301の制御に従ってディスク304に対するデータのリード/ライトを制御する。ディスク304は、ディスクドライブ303の制御で書き込まれたデータを記憶する。ディスク304は、例えば、磁気ディスク、光ディスクなどである。
【0038】
通信I/F305は、通信回線を通じてネットワーク210に接続され、ネットワーク210を介して外部のコンピュータ(例えば、
図2に示したクライアント装置202)に接続される。そして、通信I/F305は、ネットワーク210と装置内部とのインターフェースを司り、外部のコンピュータからのデータの入出力を制御する。通信I/F305には、例えば、モデムやLANアダプタなどを採用することができる。
【0039】
可搬型記録媒体I/F306は、CPU301の制御に従って可搬型記録媒体307に対するデータのリード/ライトを制御する。可搬型記録媒体307は、可搬型記録媒体I/F306の制御で書き込まれたデータを記憶する。可搬型記録媒体307は、例えば、CD(Compact Disc)-ROM、DVD(Digital Versatile Disk)、USB(Universal Serial Bus)メモリなどである。
【0040】
なお、データ管理装置201は、上述した構成部のほかに、例えば、入力装置、ディスプレイなどを有してもよい。また、データ管理装置201は、上述した構成部のうち、例えば、可搬型記録媒体I/F306、可搬型記録媒体307を有さなくてもよい。また、
図2に示したクライアント装置202についても、データ管理装置201と同様のハードウェア構成により実現することができる。ただし、クライアント装置202は、上述した構成部のほかに、例えば、入力装置、ディスプレイなどを有する。
【0041】
(グラフデータDの格納形式)
つぎに、グラフデータDの格納形式について説明する。
【0042】
図4は、グラフデータDの格納形式の一例を示す説明図である。
図4において、グラフデータDは、ノードN0~N7とエッジE0~E10により形成されるグラフ構造を表す情報である。各ノードN0~N7は、例えば、SNSにおけるユーザを表す。エッジE0~E10は、ノード間をつなぐエッジである。各エッジE0~E10は、例えば、SNSにおけるユーザ間の関係性を表す。
【0043】
グラフデータDは、例えば、頂点IDデータd1と、対応行データd2と、対応ブロックデータd3と、ブロックd4と、対応頂点データd5と、ブロック幅データd6とに変換されて格納される。ブロックd4は、ブロックd4-1とブロックd4-2とを含む。対応頂点データd5は、対応頂点データd5-1と対応頂点データd5-2とを含む。
【0044】
ここで、頂点IDデータd1は、グラフデータDに含まれるノードN0~N7のIDを昇順に並べた配列を示す。ノードN#の「#」は、ノードのIDを示す。対応行データd2および対応ブロックデータd3は、ブロックd4-1,d4-2における、頂点IDデータd1に含まれる各IDに対応する行(配列の位置)を特定する情報(ポインタに相当)である。
【0045】
具体的には、対応ブロックデータd3は、頂点IDデータd1に含まれる各IDに対応する行がどのブロックにあるかを示す情報であり、ブロック内の最初の要素へのポインタに相当する。対応行データd2は、頂点IDデータd1に含まれる各IDに対応する行がブロック内のどの行なのかを示す情報であり、ブロック内の該当箇所へのポインタに相当する。
【0046】
各ブロックd4-1,d4-2は、各対応頂点データd5-1,d5-2に含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行とする行列データである。各ブロックd4-1,d4-2では、各対応頂点データd5-1,d5-2における各IDの順番に従って、各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列が列方向に並べられている。
【0047】
対応頂点データd5は、頂点IDデータd1に含まれるIDを当該IDのノードとエッジによりつながれた他ノード数が降順となるように並べた配列を示す。対応頂点データd5は、所定のブロックサイズBに応じて、対応頂点データd5-1,d5-2に分割されている。ここでは、ブロックサイズBは、「B=4」である。ブロック幅データd6は、各ブロックd4-1,d4-2の列数を示す。
【0048】
図1に示した第1配列データ111は、例えば、頂点IDデータd1に対応する。
図1に示した第2配列データ112は、例えば、対応頂点データd5-1,d5-2に対応する。
図1に示した第3配列データ115は、例えば、対応行データd2および対応ブロックデータd3に対応する。
図1に示したブロックデータ113は、例えば、ブロックd4-1,d4-2に対応する。
図1に示したブロック幅データ114は、例えば、ブロック幅データd6に対応する。なお、グラフデータDを変換する具体的な処理内容については、
図5を用いて後述する。
【0049】
(データ管理装置201の機能的構成例)
つぎに、データ管理装置201の機能的構成例について説明する。
【0050】
図5は、データ管理装置201の機能的構成例を示すブロック図である。
図5において、データ管理装置201は、受付部501と、作成部502と、更新部503と、整形部504と、出力部505と、を含む。受付部501~出力部505は制御部500となる機能であり、具体的には、例えば、
図3に示したメモリ302、ディスク304、可搬型記録媒体307などの記憶装置に記憶されたプログラムをCPU301に実行させることにより、または、通信I/F305により、その機能を実現する。各機能部の処理結果は、例えば、メモリ302、ディスク304などの記憶装置に記憶される。
【0051】
受付部501は、グラフデータDの入力を受け付ける。ここで、グラフデータDは、ノードと、ノード間をつなぐエッジにより形成されるグラフ構造を表す情報であり、例えば、
図4に示したグラフデータDである。グラフデータDは、例えば、CSR形式の行列データである。CSR形式は、ゼロ要素を省略して疎行列を管理するための圧縮形式の一つである。
【0052】
CSR形式の行列データは、例えば、グラフデータDを隣接行例で表し、ゼロ要素を省略して表したものである。CSR形式の行列データは、例えば、row pointerとcolumn indexとを含む。row pointerは、各行の開始インデックスを示す(Index Pointer)。column indexは、非ゼロ要素の列インデックスを示す。
【0053】
受付部501は、ブロックサイズBの入力を受け付ける。ここで、ブロックサイズBは、全体N行の行列データをB行ずつのブロックに分割するための情報であり、例えば、行数によって指定される。ブロックサイズBは、任意に指定可能であり、例えば、4行程度の値に設定される。
【0054】
具体的には、例えば、受付部501は、
図2に示したクライアント装置202から受信することにより、グラフデータDとブロックサイズBとの入力を受け付ける。また、受付部501は、不図示の入力装置を用いたユーザの操作入力により、グラフデータDとブロックサイズBとの入力を受け付けてもよい。
【0055】
以下の説明では、受付部501が受け付けたグラフデータDとして、
図4に示したグラフデータDを例に挙げて説明する場合がある。
【0056】
作成部502は、受け付けたグラフデータDに基づいて、頂点IDデータd1と、対応行データd2と、対応ブロックデータd3と、ブロックd4と、対応頂点データd5と、ブロック幅データd6とを作成する。ブロックd4は、例えば、ブロックd4-1とブロックd4-2とを含む。対応頂点データd5は、例えば、対応頂点データd5-1と対応頂点データd5-2とを含む。
【0057】
具体的には、例えば、作成部502は、グラフデータD(CSR形式の行列データ)のrow pointerを参照して、ノードN0~N7のIDを昇順に並べた配列を示す頂点IDデータd1(例えば、
図4参照)を作成する。
【0058】
また、作成部502は、頂点IDデータd1に含まれるIDを当該IDのノードとエッジによりつながれた他ノード数が降順となるように並べた配列を示す対応頂点データd5を作成する。ここで、各ノードとエッジによりつながれた他ノード数は、例えば、グラフ構造を隣接行列で表した場合の各ノードに対応する行における非ゼロ要素数に相当する。
【0059】
各ノードとエッジによりつながれた他ノード数は、例えば、グラフデータD(CSR形式の行列データ)のcolumn indexから特定することができる。
図4の例では、各ノードのIDをエッジによりつながれた他ノード数が降順となるように並べると、「1,5,0,7,2,3,4,6」となる。この場合、対応頂点データd5は、(1,5,0,7,2,3,4,6)という配列(8行1列)となる。
【0060】
つぎに、作成部502は、受け付けたブロックサイズBに応じて、作成した対応頂点データd5を分割する。ここで、ブロックサイズBを「B=4」とする。この場合、作成部502は、対応頂点データd5を4行で区切って、対応頂点データd5-1と対応頂点データd5-2とに分割する。
【0061】
対応頂点データd5-1は、(1,5,0,7)という配列(4行1列)である。対応頂点データd5-2は、(2,3,4,6)という配列(4行1列)である。ただし、作成部502は、例えば、対応頂点データd5を分割せず、対応頂点データd5のまま扱うことにしてもよい。
【0062】
また、作成部502は、対応頂点データd5に含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行とするブロックd4を作成する。より詳細に説明すると、例えば、作成部502は、分割した対応頂点データd5-1,d5-2それぞれについて、ブロックd4-1,d4-2を作成する。
【0063】
ここで、ブロックd4-1は、対応頂点データd5-1に含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行とする行列データである。ブロックd4-1では、対応頂点データd5-1における各IDの順番に従って、他ノードのIDを並べて表す配列が列方向に並べられる。
【0064】
また、ブロックd4-2は、対応頂点データd5-2に含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行とする行列データである。ブロックd4-2では、対応頂点データd5-2における各IDの順番に従って、他ノードのIDを並べて表す配列が列方向に並べられる。
【0065】
また、作成部502は、各ブロックd4-1,d4-2の列数を示すブロック幅データd6を作成する。各ブロックd4-1,d4-2は、他ノードのIDを並べて表す配列を表現し得る最小の列数で構成される。
図4の例では、ブロックd4-1の列数は、「6」である。また、ブロックd4-2の列数は、「2」である。この場合、ブロック幅データd6は、(6,2)という配列(2行1列)となる。
【0066】
このように、作成部502は、例えば、ブロック(行列データ)をブロックサイズBで区切ったデータとすることで、各ブロック内にゼロ要素ができるだけ含まれないようにする。
【0067】
また、作成部502は、ブロックd4における、頂点IDデータd1に含まれる各IDに対応する行を特定する情報(第3配列データ)を作成する。例えば、作成部502は、作成したブロックd4-1,d4-2および対応頂点データd5-1,d5-2を参照して、各ブロックd4-1,d4-2における、頂点IDデータd1に含まれる各IDに対応する行を特定する情報(対応行データd2、対応ブロックデータd3)を作成する。
【0068】
より詳細に説明すると、例えば、作成部502は、作成したブロックd4-1,d4-2のうち、頂点IDデータd1に含まれる各IDに対応するブロックを特定する対応ブロックデータd3(第4配列データ)を作成する。また、作成部502は、頂点IDデータd1に含まれる各IDに対応するブロックにおける当該各IDに対応する行を特定する対応行データd2(第5配列データ)を作成する。なお、ブロックd4が1つの場合、対応ブロックデータd3の要素は、すべて「0」となる。
【0069】
・ノードの追加
また、受付部501は、ノード追加指示を受け付ける。ここで、ノード追加指示とは、グラフデータDに新たなノードを追加する指示である。具体的には、例えば、受付部501は、クライアント装置202から受信することにより、ノード追加指示を受け付ける。また、受付部501は、不図示の入力装置を用いたユーザの操作入力により、ノード追加指示を受け付けてもよい。
【0070】
更新部503は、グラフデータDに新たなノードを追加する場合、頂点IDデータd1に新たなノードのIDを追加し、対応頂点データd5に新たなノードのIDを追加する。新たなノードのIDは、例えば、現在のノードのIDの最大値をIDmaxとすると、「IDmax+1」となる。また、更新部503は、ブロックd4に、新たなノードとエッジによりつながれた他ノードのIDを並べた配列を格納するための行領域を設定する。また、更新部503は、ブロックb4における新たなノードのIDに対応する行を特定する情報を対応行データd2、対応ブロックデータd3に追加する。
【0071】
具体的には、例えば、更新部503は、ノード追加指示に応じて、頂点IDデータd1の末尾に新たなノードのIDを追加する。この際、更新部503は、頂点IDデータd1の末尾に空きがない場合、頂点IDデータd1の領域を拡大する。例えば、更新部503は、頂点IDデータd1の領域をブロックサイズB分拡大する。ただし、更新部503は、頂点IDデータd1の領域を1要素分拡大してもよい。
【0072】
また、更新部503は、対応頂点データd5に新たなノードのIDを追加する。例えば、更新部503は、対応頂点データd5内の最後方の対応頂点データd5-2の末尾に新たなノードのIDを追加する。この際、更新部503は、対応頂点データd5-2の末尾に空きがない場合、対応頂点データd5の領域を拡大する。例えば、更新部503は、ブロックサイズB分の領域を確保して、新たな対応頂点データとする。そして、更新部503は、新たな対応頂点データの先頭に新たなノードのIDを追加する。ただし、更新部503は、対応頂点データd5の領域を1要素分拡大してもよい。なお、更新部503は、ブロックサイズB分の領域単位で対応頂点データd5を拡大することで、例えば、1要素単位で拡大する場合に比べて、以降、さらにノードが追加される際の処理負荷を抑えることができる。
【0073】
また、更新部503は、対応頂点データd5に追加したIDに対応するブロックd4内の位置に、新たなノードとエッジによりつながれた他ノードのIDを並べた配列を格納するための行領域に設定する。例えば、更新部503は、ブロックd4内の最後方のブロックd4-2内の先頭の空き行を、新たなノードとエッジによりつながれた他ノードのIDを並べた配列を格納するための行領域に設定する。
【0074】
この際、更新部503は、ブロックd4に空き行がない場合、新たなブロックを作成する。例えば、更新部503は、ブロックd4-2内に空き行がない場合、ブロックサイズB分の領域を確保して、新たなブロックとする。ただし、更新部503は、1行分の領域を新たなブロックとしてもよい。この時点では、ブロックの列数は、例えば、「1」である。なお、更新部503は、ブロックサイズB分の領域単位でブロックd4を拡大することで、例えば、1行単位で拡大する場合に比べて、以降、さらにノードが追加される際の処理負荷を抑えることができる。
【0075】
また、更新部503は、頂点IDデータd1に追加した新たなノードのIDに対応する行がどのブロックにあるかを示す情報を対応ブロックデータd3の末尾に追加する。この際、更新部503は、対応ブロックデータd3の末尾に空きがない場合、対応ブロックデータd3の領域を拡大する。例えば、更新部503は、対応ブロックデータd3の領域をブロックサイズB分拡大する。ただし、更新部503は、対応ブロックデータd3の領域を1要素分拡大してもよい。なお、更新部503は、ブロックサイズB分の領域単位で対応ブロックデータd3を拡大することで、例えば、1要素単位で拡大する場合に比べて、以降、さらにノードが追加される際の処理負荷を抑えることができる。
【0076】
また、更新部503は、頂点IDデータd1に追加した新たなノードIDに対応する行がブロック内のどの行なのかを示す情報を対応行データd2の末尾に追加する。この際、更新部503は、対応行データd2の末尾に空きがない場合、対応行データd2の領域を拡大する。例えば、更新部503は、対応行データd2の領域をブロックサイズB分拡大する。ただし、更新部503は、対応行データd2の領域を1要素分拡大してもよい。更新部503は、ブロックサイズB分の領域単位で対応行データd2を拡大することで、例えば、1要素単位で拡大する場合に比べて、以降、さらにノードが追加される際の処理負荷を抑えることができる。
【0077】
なお、グラフデータDに新たなノードを追加する場合の具体的な処理例については、
図6を用いて後述する。
【0078】
・ノードの削除
また、受付部501は、ノード削除指示を受け付ける。ここで、ノード削除指示とは、グラフデータDから第1のノードを削除する指示である。第1のノードは、グラフデータDが表すいずれかのノードである。ノード削除指示には、例えば、削除対象の第1のノードのIDが含まれる。
【0079】
具体的には、例えば、受付部501は、クライアント装置202から受信することにより、ノード削除指示を受け付ける。また、受付部501は、不図示の入力装置を用いたユーザの操作入力により、ノード削除指示を受け付けてもよい。
【0080】
更新部503は、グラフデータDから第1のノードを削除する場合、ブロックd4における、頂点IDデータd1に含まれる各IDに対応する行を特定する情報を参照して、対応頂点データd5から第1のノードのIDを削除し、ブロックd4内の第1のノードのIDに対応する第1の行(配列)の要素を削除する。なお、削除は、例えば、削除対象の情報を「-1」に変換することによって実現される。
【0081】
以下の説明では、ブロックd4における、頂点IDデータd1に含まれる各IDに対応する行を特定する情報として、「対応行データd2および対応ブロックデータd3」を例に挙げて説明する場合がある。
【0082】
また、更新部503は、対応頂点データd5を参照して、第1の行の要素(ID)それぞれに対応するブロックd4内の行から第1のノードのIDを削除する。また、更新部503は、対応行データd2および対応ブロックデータd3から、第1のノードのIDに対応する要素を削除する。また、更新部503は、頂点IDデータd1から第1のノードのIDを削除する。
【0083】
具体的には、例えば、更新部503は、ノード削除指示に応じて、対応行データd2および対応ブロックデータd3を参照して、対応頂点データd5における第1のノードのIDの位置を特定し、その位置の要素を「-1」にする。また、更新部503は、対応行データd2および対応ブロックデータd3を参照して、ブロックd4-1,d4-2における第1のノードのIDに対応する第1の行を特定し、その行の要素すべてを「-1」にする。
【0084】
また、更新部503は、対応頂点データd5を参照して、特定した第1の行の要素(ID)それぞれに対応するブロックd4-1,d4-2における行を特定し、その行に含まれる第1のノードのIDを「-1」にする。そして、更新部503は、対応行データd2および対応ブロックデータd3における、第1のノードのIDに対応する要素を「-1」にし、頂点IDデータd1における第1のノードのIDを「-1」にする。
【0085】
なお、グラフデータDから第1のノードを削除する場合の具体的な処理例については、
図7を用いて後述する。
【0086】
・エッジの追加
また、受付部501は、エッジ追加指示を受け付ける。ここで、エッジ追加指示とは、グラフデータDに新たなエッジを追加する指示である。ここでは、新たなエッジによりつながれる2つのノードを「第2のノード」と「第3のノード」とする。第2のノードおよび第3のノードは、グラフデータDが表すいずれかのノードである。
【0087】
エッジ追加指示には、例えば、新たなエッジによりつながれる第2のノードのIDと第3のノードのIDが含まれる。具体的には、例えば、受付部501は、クライアント装置202から受信することにより、エッジ追加指示を受け付ける。また、受付部501は、不図示の入力装置を用いたユーザの操作入力により、エッジ追加指示を受け付けてもよい。
【0088】
更新部503は、グラフデータDに第2のノードと第3のノードとをつなぐ新たなエッジを追加する場合、対応行データd2および対応ブロックデータd3を参照して、ブロックd4における、第2のノードのIDに対応する第2の行を特定する。そして、更新部503は、特定した第2の行に第3のノードのIDを追加する。
【0089】
また、更新部503は、対応行データd2および対応ブロックデータd3を参照して、ブロックd4における、第2のノードのIDに対応する第3の行を特定する。そして、更新部503は、特定した第3の行に第2のノードのIDを追加する。また、更新部503は、第2のノードのIDおよび第3のノードのIDを追加したブロックd4に基づいて、ブロック幅データd6を更新する。
【0090】
具体的には、例えば、更新部503は、エッジ追加指示に応じて、対応行データd2および対応ブロックデータd3を参照して、ブロックd4-1,d4-2における、第2のノードのIDに対応する第2の行を特定する。そして、更新部503は、特定した第2の行に第3のノードのIDを追加する。この際、更新部503は、第2の行に空きがない場合、第2の行を含むブロックの領域を拡大する。例えば、更新部503は、ブロックの列数を2倍にすることで、ブロックの領域を拡大する。ただし、更新部503は、ブロックの領域を1列分拡大してもよい。
【0091】
また、更新部503は、対応行データd2および対応ブロックデータd3を参照して、ブロックd4-1,d4-2における、第3のノードのIDに対応する第3の行を特定する。そして、更新部503は、特定した第3の行に第2のノードのIDを追加する。この際、更新部503は、第3の行に空きがない場合、第3の行を含むブロックの領域を拡大する。また、更新部503は、第2のノードのIDおよび第3のノードのIDを追加したブロックd4-1,d4-2に基づいて、ブロック幅データd6を更新する。
【0092】
なお、グラフデータDに新たなエッジを追加する場合の具体的な処理例については、
図8を用いて後述する。
【0093】
・エッジの削除
また、受付部501は、エッジ削除指示を受け付ける。ここで、エッジ削除指示とは、グラフデータDからエッジを削除する指示である。ここでは、削除対象のエッジによりつながれた2つのノードを「第4のノード」と「第5のノード」とする。第4のノードおよび第5のノードは、グラフデータDが表すいずれかのノードである。
【0094】
エッジ削除指示には、例えば、削除対象のエッジによりつながれた第4のノードのIDと第5のノードのIDが含まれる。具体的には、例えば、受付部501は、クライアント装置202から受信することにより、エッジ削除指示を受け付ける。また、受付部501は、不図示の入力装置を用いたユーザの操作入力により、エッジ削除指示を受け付けてもよい。
【0095】
更新部503は、グラフデータDから第4のノードと第5のノードとをつなぐエッジを削除する場合、対応行データd2および対応ブロックデータd3を参照して、ブロックd4における、第4のノードのIDに対応する第4の行を特定する。そして、更新部503は、特定した第4の行から第5のノードのIDを削除する。
【0096】
また、更新部503は、対応行データd2および対応ブロックデータd3を参照して、ブロックd4における、第5のノードのIDに対応する第5の行を特定する。そして、更新部503は、特定した第5の行から第4のノードのIDを削除する。
【0097】
なお、グラフデータDからエッジを削除する場合の具体的な処理例については、
図9を用いて後述する。
【0098】
整形部504は、データ整形を行う。ここで、グラフデータD内のノードやエッジの追加、削除が繰り返し行われると、ブロックd4等における空白部分の割合が増加する場合がある。このため、整形部504は、グラフデータDから変換された格納データ(例えば、頂点IDデータd1、対応行データd2、対応ブロックデータd3、ブロックd4、対応頂点データd5、ブロック幅データd6)の整形を行う。
【0099】
データ整形は、例えば、所定の時間ごと、または、所定のタイミングで実行される。所定時間は、任意に設定可能であり、例えば、1日、1週間などに設定される。所定のタイミングは、任意に設定可能であり、例えば、ノードやエッジなどの追加、削除の操作が所定数行われたタイミングなどに設定される。
【0100】
具体的には、例えば、整形部504は、頂点IDデータd1について、第1のノードのIDが削除された空白箇所を詰めるように更新する。つぎに、整形部504は、ブロックd4および対応頂点データd5を参照して、更新後の頂点IDデータd1に含まれるIDを当該IDのノードとエッジによりつながれた他ノード数が降順となるように並べることにより、対応頂点データd5を更新する。また、整形部504は、ブロック幅データd6を更新する。
【0101】
そして、整形部504は、更新後の対応頂点データd5に含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行として、更新後の対応頂点データd5における各IDの順番に従って列方向に並べることにより、ブロックd4を更新する。
【0102】
つぎに、整形部504は、更新後のブロックd4における、更新後の頂点IDデータd1に含まれる各IDに対応する行を特定するように対応行データd2および対応ブロックデータd3を更新する。
【0103】
なお、データ整形を行う場合の具体的な処理例については、
図10を用いて後述する。
【0104】
出力部505は、グラフデータDから変換された格納データを出力する。ここで、格納データは、例えば、最新の頂点IDデータd1、対応行データd2、対応ブロックデータd3、ブロックd4、対応頂点データd5およびブロック幅データd6を含む。出力部505の出力形式としては、例えば、メモリ302、ディスク304などの記憶装置への記憶、通信I/F305による他のコンピュータへの送信などがある。
【0105】
例えば、データ管理装置201は、メモリ302などに記憶された格納データを用いて、幅優先探索や最短経路問題などの演算を行うことができる。また、他のコンピュータにおいて、データ管理装置201からの格納データを用いて、幅優先探索や最短経路問題などの演算を行うことができる。
【0106】
なお、グラフデータDから変換された格納データを用いた演算例については、
図11を用いて後述する。
【0107】
(ノード追加時のデータ更新例)
つぎに、
図6を用いて、
図4に示したグラフデータDに新たなノードを追加する場合の具体的な処理例について説明する。ここでは、ブロックサイズBを「B=4」とする。
【0108】
図6は、ノード追加時のデータ更新例を示す説明図である。
図6において、グラフデータDに、ID「8」の新たなノードN8を追加する場合を想定する。この場合、更新部503は、頂点IDデータd1の末尾にノードN8のID「8」を追加する。ただし、ここでは頂点IDデータd1の末尾に空きがない。このため、更新部503は、頂点IDデータd1の領域をブロックサイズB分(4行分)拡大する。
【0109】
また、更新部503は、対応頂点データd5内の最後方の対応頂点データd5-2の末尾にノードN8のID「8」を追加する。ただし、ここでは対応頂点データd5-2の末尾に空きがない。このため、更新部503は、ブロックサイズB分の領域を確保して、新たな対応頂点データd5-3とする。そして、更新部503は、対応頂点データd5-3の先頭にノードN8のID「8」を追加する。
【0110】
また、更新部503は、ブロックd4にノードN8とエッジによりつながれた他ノードのIDを並べた配列を格納するための行領域を設定する。ここでは、更新部503は、ブロックサイズB分の領域(4行1列)を確保して、対応頂点データd5-3に対応するブロックd4-3を作成する。そして、更新部503は、ブロックd4-3内の先頭の行を、対応頂点データd5-3のID「8」に対応する行領域に設定する。
【0111】
また、更新部503は、頂点IDデータd1に追加したID「8」に対応する行が、どのブロックにあるのかを示す情報を対応ブロックデータd3の末尾に追加する。どのブロックにあるのかを示す情報は、例えば、3番目のブロックd4-3を示すブロック番号「2」である(ブロック番号は、0から始まる整数)。ただし、ここでは対応ブロックデータd3の末尾に空きがない。このため、更新部503は、対応ブロックデータd3の領域をブロックサイズB分拡大する。そして、更新部503は、対応ブロックデータd3の末尾に「2」を追加する。
【0112】
また、更新部503は、頂点IDデータd1に追加したノードID「8」に対応する行がブロック内のどの行なのかを示す情報を対応行データd2の末尾に追加する。どの行なのかを示す情報は、例えば、1行目の行を示す行番号「0」である(行番号は、0から始まる整数)。ただし、ここでは対応行データd2の末尾に空きがない。このため、更新部503は対応行データd2の領域をブロックサイズB分拡大する。そして、更新部503は、対応行データd2の末尾に「0」を追加する。
【0113】
これにより、更新部503は、新たなノードN8の追加によるグラフ構造の変化に応じて、グラフデータDの格納データを更新することができる。
【0114】
(ノード削除時のデータ更新例)
つぎに、
図7を用いて、
図4に示したグラフデータDからノードを削除する場合の具体的な処理例について説明する。
【0115】
図7は、ノード削除時のデータ更新例を示す説明図である。
図7において、グラフデータDから、ID「2」のノードN2を削除する場合を想定する。この場合、更新部503は、対応行データd2および対応ブロックデータd3を参照して、対応頂点データd5におけるノードN2のID「2」の位置を特定し、その位置の要素を「-1」にする。ここでは、対応頂点データd5-2の1番目の要素が「-1」で初期化される。ただし、
図7では、「-1」を空白で示す。
【0116】
また、更新部503は、対応行データd2および対応ブロックデータd3を参照して、ブロックd4におけるノードN2のID「2」に対応する行を特定し、その行の要素(1,3)すべてを「-1」にする。ここでは、ブロックd4-2の1行目の要素すべてが「-1」で初期化される。
【0117】
また、更新部503は、対応頂点データd5を参照して、特定した行の要素(1,3)それぞれに対応するブロックd4における行を特定し、その行に含まれるノードN2のID「2」を「-1」にする。ここでは、ブロックd4-1の1行目の2番目の要素が「-1」で初期化される。また、ブロックd4-2の2行目の2番目の要素が「-1」で初期化される。これにより、ノードN2につながれたエッジE3,E8が削除される。
【0118】
そして、更新部503は、対応行データd2および対応ブロックデータd3における、ノードN2のID「2」に対応する要素を「-1」にし、頂点IDデータd1におけるノードN2のID「2」を「-1」にする。
【0119】
これにより、更新部503は、ノードN2の削除によるグラフ構造の変化に応じて、グラフデータDの格納データを更新することができる。
【0120】
(エッジ追加時のデータ更新例)
つぎに、
図8を用いて、
図4に示したグラフデータDに新たなエッジを追加する場合の具体的な処理例について説明する。
【0121】
図8は、エッジ追加時のデータ更新例を示す説明図である。
図8において、グラフデータDに、ノードN4とノードN7とをつなぐエッジE11を追加する場合を想定する。この場合、更新部503は、対応行データd2および対応ブロックデータd3を参照して、ブロックd4-2におけるノードN4のID「4」に対応する行(3行目)を特定する。
【0122】
そして、更新部503は、特定した行(3行目)にノードN7のID「7」を追加する。ただし、ここでは特定した行(3行目)に空きがない。このため、更新部503は、ブロックb4-2の列数を2倍にすることで、ブロックb4-2の領域を拡大し、3行目の3番目の要素(先頭の空き要素)にノードN7のID「7」を追加する。これにより、ノードN4とノードN7との接続関係が記録される。
【0123】
また、更新部503は、対応行データd2および対応ブロックデータd3を参照して、ブロックd4-1におけるノードN7のID「2」に対応する行(4行目)を特定する。そして、更新部503は、特定した行(4行目)の4番目の要素(先頭の空き要素)にノードN4のID「4」を追加する。また、ブロックd4-2の領域を拡大したため、更新部503は、ブロック幅データd6の2遍目の要素を「4」とする。
【0124】
これにより、更新部503は、ノードN4とノードN7とをつなぐ新たなエッジN11の追加によるグラフ構造の変化に応じて、グラフデータDの格納データを更新することができる。
【0125】
(エッジ削除時のデータ更新例)
つぎに、
図9を用いて、
図4に示したグラフデータDからエッジを削除する場合の具体的な処理例について説明する。
【0126】
図9は、エッジ削除時のデータ更新例を示す説明図である。
図9において、グラフデータDから、ノードN1とノードN4とをつなぐエッジE5を削除する場合を想定する。この場合、更新部503は、対応行データd2および対応ブロックデータd3を参照して、ブロックd4-1におけるノードN1のID「1」に対応する行(1行目)を特定する。そして、更新部503は、特定した行(1行目)からノードN4のID「4」を削除する。
【0127】
また、更新部503は、対応行データd2および対応ブロックデータd3を参照して、ブロックd4-2におけるノードN4のID「4」に対応する行(3行目)を特定する。そして、更新部503は、特定した行(3行目)からノードN1のID「1」を削除する。これにより、ノードN1とノードN4との接続関係が削除される。
【0128】
これにより、更新部503は、ノードN1とノードN4とをつなぐエッジE5の削除によるグラフ構造の変化に応じて、グラフデータDの格納データを更新することができる。
【0129】
(データ整形例)
つぎに、
図10を用いて、データ整形を行う場合の具体的な処理例について説明する。ここでは、
図4に示したグラフデータDに、ノードN8と、ノードN4とノードN7とをつなぐエッジを追加し、グラフデータDから、ノードN2と、ノードN1とノードN4とをつなぐエッジを削除した後に、データ整形を行う場合を例に挙げて説明する。
【0130】
図10は、データ整形例を示す説明図である。
図10において、整形部504は、頂点IDデータd1を、空白箇所を詰めるように更新する。つぎに、整形部504は、ブロックd4および対応頂点データd5を参照して、更新後の頂点IDデータd1に含まれるIDを当該IDのノードとエッジによりつながれた他ノード数が降順となるように並べることにより、対応頂点データd5を更新する。
【0131】
ここで、更新後の頂点IDデータd1に含まれるIDのノードとエッジによりつながれた他ノード数は、ブロックd4における当該IDに対応する行における非ゼロ要素数に相当する。例えば、ブロックd4-1におけるID「1」に対応する行(1行目)非ゼロ要素数は「5」である。
【0132】
ここでは、更新後の頂点IDデータd1に含まれるIDを当該IDのノードとエッジによりつながれた他ノード数が降順となるように並べると、「1,5,7,0,4,3,6,8」となる。この場合、更新部503は、対応頂点データd5-1を(1,5,7,0)という配列に更新し、対応頂点データd5-2を(4,3,6,8)という配列に更新し、対応頂点データd5-3を削除する。
【0133】
また、整形部504は、ブロックd4を参照して、更新後の対応頂点データd5に含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行として、更新後の対応頂点データd5における各IDの順番に従って列方向に並べることにより、ブロックd4を更新する。
【0134】
具体的には、例えば、整形部504は、ブロックd4-1と更新後の対応頂点データd5-1から、新たなブロックd4-1を作成し、ブロックd4-2と更新後の対応頂点データd5-2から、新たなブロックd4-2を作成することにより、ブロックd4を更新する。
【0135】
例えば、ID「1」のノードとエッジによりつながれた他ノードのIDを並べて表すと、「0,3,4,5,7」となる。また、更新後の対応頂点データd5におけるID「1」の順番は、「1」である。このため、新たなブロックd4-1の1行目が、ID「1」のノードとエッジによりつながれた他ノードのIDを並べた配列(0,3,4,5,7)となる。
【0136】
つぎに、整形部504は、更新後のブロックd4に基づいて、ブロック幅データd6を更新する。ここでは、ブロックd4-1が4行5列の行列データとなり、ブロックd4-2が4行3列の行列データとなる。このため、ブロック幅データd6が(5,3)という配列に更新される。
【0137】
また、整形部504は、更新後のブロックd4における、更新後の頂点IDデータd1に含まれる各IDに対応する行を特定するように対応行データd2および対応ブロックデータd3を更新する。例えば、更新後のブロックd4におけるID「0」に対応する行を特定するように、対応行データd2の1番目の要素が「3」となり、対応ブロックデータd3の1番目の要素が「0」となっている。
【0138】
これにより、整形部504は、ノードやエッジの追加や削除の操作が繰り返し行われて、格納データにおける空白部分の割合が増加しても、格納データを整形して効率的に扱える情報にすることができる。
【0139】
(格納データを用いた演算例)
つぎに、
図11を用いて、グラフデータDから変換された格納データを用いた演算例について説明する。
【0140】
図11は、格納データを用いた演算例を示す説明図である。
図11において、グラフデータDから変換された格納データのうち、ブロックd4(ブロックd4-1,d4-2)と対応頂点データd5(対応頂点データd5-1,d5-2)とが示されている。演算には、ブロックd4と対応頂点データd5とが使用される。
【0141】
ここでは、ブロックd4と対応頂点データd5とを用いて、行列とベクトルv1との積を行う場合を想定する。ただし、ブロックd4の幅(列数)は、ブロック幅データd6から特定される。例えば、データ管理装置201は、各対応頂点データd5-1,d5-2のIDに対応するブロックd4-1,d4-2内の各行について、各行の要素を参照して、ベクトルv1と掛け合わせて合算する。
【0142】
対応頂点データd5-1のID「0」を例に挙げると、ID「0」に対応するブロックd4-1,d4-2内の位置は、ブロックd4-1の2行目である。この場合、データ管理装置201は、ブロックd4-1の2行目の要素「1,5,7(列インデックス)」を参照して、ベクトルv1の1番目の要素(b)、5番目の要素(f)、7番目の要素(h)それぞれにアクセスして合算処理(内積)を行う。
【0143】
ここで、ブロックd4-1の2行目の各要素「1,5,7(列インデックス)」は、非ゼロ要素(1)の位置を示す。このため、ID「0」に対応する合算処理の結果は、演算結果1100の先頭の「b+f+h」となる。このような演算を行うにあたり、データ管理装置201は、例えば、内積演算にSIMDを活用することで、高速に処理を行うことが可能となる。また、データ管理装置201は、ブロック幅データd6を参照することで、ブロックd4の幅(列数)を容易に判断することができる。
【0144】
(データ管理装置201の各種処理手順)
つぎに、データ管理装置201の各種処理手順について説明する。まず、
図12を用いて、データ管理装置201のデータ変換処理手順について説明する。
【0145】
図12は、データ管理装置201のデータ変換処理手順の一例を示すフローチャートである。
図12のフローチャートにおいて、まず、データ管理装置201は、グラフデータDとブロックサイズBとの入力を受け付ける(ステップS1201)。グラフデータDは、例えば、CSR形式の行列データである。
【0146】
つぎに、データ管理装置201は、受け付けたグラフデータDに基づいて、頂点IDデータd1を作成する(ステップS1202)。そして、データ管理装置201は、頂点IDデータd1に含まれるIDを当該IDのノードとエッジによりつながれた他ノード数が降順となるように並べた配列をブロックサイズBに応じて分割することにより、対応頂点データd5を作成する(ステップS1203)。対応頂点データd5は、例えば、
図4に示したような対応頂点データd5-1と対応頂点データd5-2とを含む。
【0147】
つぎに、データ管理装置201は、作成した対応頂点データd5に含まれるIDのノードとエッジによりつながれた他ノード数に応じて、ブロックd4の列数を示すブロック幅データd6を作成する(ステップS1204)。そして、データ管理装置201は、作成したブロック幅データd6とブロックサイズBとに基づいて、ブロックd4の領域を確保する(ステップS1205)。
【0148】
つぎに、データ管理装置201は、対応頂点データd5に含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行とするブロックd4を、確保した領域に作成する(ステップS1206)。ブロックd4では、対応頂点データd5における各IDの順番に従って、他ノードのIDを並べて表す配列が列方向に並べられる。
【0149】
具体的には、例えば、データ管理装置201は、受け付けたグラフデータDの行列データを対応頂点データd5に沿う形で、確保した領域にコピーすることにより、ブロックd4を作成する。ブロックd4は、例えば、
図4に示したようなブロックd4-1とブロックd4-2とを含む。
【0150】
つぎに、データ管理装置201は、作成したブロックd4および対応頂点データd5を参照して、ブロックd4における、頂点IDデータd1に含まれる各IDに対応する行を特定する情報として、対応行データd2および対応ブロックデータd3を作成する(ステップS1207)。そして、データ管理装置201は、本フローチャートによる一連の処理を終了する。
【0151】
これにより、データ管理装置201は、動的に変化するグラフデータDを効率的に扱える格納データ(頂点IDデータd1、対応行データd2、対応ブロックデータd3、ブロックd4、対応頂点データd5、ブロック幅データd6)に変換することができる。
【0152】
つぎに、
図13を用いて、データ管理装置201のノード追加処理手順について説明する。
【0153】
図13は、データ管理装置201のノード追加処理手順の一例を示すフローチャートである。
図13のフローチャートにおいて、まず、データ管理装置201は、ノード追加指示を受け付けたか否かを判断する(ステップS1301)。ここで、データ管理装置201は、ノード追加指示を受け付けるのを待つ(ステップS1301:No)。
【0154】
データ管理装置201は、ノード追加指示を受け付けた場合(ステップS1301:Yes)、現在の最大のノードのIDmaxを特定する(ステップS1302)。そして、データ管理装置201は、追加するノードのIDを「IDmax+1」に設定する(ステップS1303)。
【0155】
つぎに、データ管理装置201は、頂点IDデータd1に空きがあるか否かを判断する(ステップS1304)。ここで、頂点IDデータd1に空きがある場合(ステップS1304:Yes)、データ管理装置201は、ステップS1306に移行する。一方、頂点IDデータd1に空きがない場合には(ステップS1304:No)、データ管理装置201は、頂点IDデータd1の領域をブロックサイズB分拡大する(ステップS1305)。
【0156】
そして、データ管理装置201は、頂点IDデータd1の末尾に新たなノードのIDを追加する(ステップS1306)。つぎに、データ管理装置201は、対応頂点データd5に空きがあるか否かを判断する(ステップS1307)。ここで、対応頂点データd5に空きがある場合(ステップS1307:Yes)、データ管理装置201は、ステップS1310に移行する。
【0157】
一方、対応頂点データd5に空きがない場合には(ステップS1307:No)、データ管理装置201は、ブロックサイズB分の領域を確保して、新たな対応頂点データd5を作成する(ステップS1308)。つぎに、データ管理装置201は、新たな対応頂点データd5に対応する新たなブロックb4を作成する(ステップS1309)。ここで作成されるブロックb4は、例えば、
図6に示したブロックd4-3(4行1列)である。
【0158】
そして、データ管理装置201は、対応頂点データd5に新たなノードのIDを追加する(ステップS1310)。つぎに、データ管理装置201は、ブロックb4に、対応頂点データd5に追加した新たなノードのIDに対応する行領域を設定する(ステップS1311)。
【0159】
そして、データ管理装置201は、ブロックd4における新たなノードのIDに対応する行を特定する情報を、対応行データd2および対応ブロックデータd3に追加して(ステップS1312)、本フローチャートによる一連の処理を終了する。なお、ステップS1312において、対応行データd2および対応ブロックデータd3に空きがない場合、対応行データd2および対応ブロックデータd3の領域を拡大する。
【0160】
これにより、データ管理装置201は、新たなノードの追加によるグラフ構造の変化に応じて、グラフデータDの格納データを更新することができる。
【0161】
つぎに、
図14を用いて、データ管理装置201のノード削除処理手順について説明する。
【0162】
図14は、データ管理装置201のノード削除処理手順の一例を示すフローチャートである。
図14のフローチャートにおいて、まず、データ管理装置201は、ノード削除指示を受け付けたか否かを判断する(ステップS1401)。ここで、データ管理装置201は、ノード削除指示を受け付けるのを待つ(ステップS1401:No)。
【0163】
データ管理装置201は、ノード削除指示を受け付けた場合(ステップS1401:Yes)、頂点IDデータd1に削除IDがあるか否かを判断する(ステップS1402)。削除IDは、削除対象のノードのIDであり、例えば、ノード削除指示に含まれる。
【0164】
ここで、頂点IDデータd1に削除IDがない場合(ステップS1402:No)、データ管理装置201は、本フローチャートによる一連の処理を終了する。この際、データ管理装置201は、例えば、ノード削除指示に対して、削除対象のノードが存在しない旨のエラー応答を行ってもよい。
【0165】
一方、頂点IDデータd1に削除IDがある場合(ステップS1402:Yes)、データ管理装置201は、対応行データd2および対応ブロックデータd3を参照して、対応頂点データd5における削除IDの位置を特定し、その位置の要素を削除する(ステップS1403)。なお、要素の削除は、値を「-1」とすることにより行われる。
【0166】
つぎに、データ管理装置201は、対応行データd2および対応ブロックデータd3を参照して、ブロックd4における削除IDに対応する行を特定し、その行の要素すべてを削除する(ステップS1404)。ただし、削除した要素(ID)は、次のステップ(ステップS1405)で使用される。
【0167】
つぎに、データ管理装置201は、対応頂点データd5を参照して、削除した要素(ID)それぞれに対応するブロックd4における行を特定し(ステップS1405)、その行に含まれる削除IDを削除する(ステップS1406)。
【0168】
そして、データ管理装置201は、対応行データd2および対応ブロックデータd3から削除IDに対応する要素を削除し(ステップS1407)、頂点IDデータd1における削除IDを削除して(ステップS1408)、本フローチャートによる一連の処理を終了する。
【0169】
これにより、データ管理装置201は、ノードの削除によるグラフ構造の変化に応じて、グラフデータDの格納データを更新することができる。
【0170】
つぎに、
図15を用いて、データ管理装置201のエッジ追加処理手順について説明する。
【0171】
図15は、データ管理装置201のエッジ追加処理手順の一例を示すフローチャートである。
図15のフローチャートにおいて、まず、データ管理装置201は、エッジ追加指示を受け付けたか否かを判断する(ステップS1501)。ここでは、新たなエッジによりつながれるノードのIDを「$1」と「$2」とする。ID「$1」およびID「$2」は、例えば、エッジ追加指示に含まれる。
【0172】
ここで、データ管理装置201は、エッジ追加指示を受け付けるのを待つ(ステップS1501:No)。データ管理装置201は、エッジ追加指示を受け付けた場合(ステップS1501:Yes)、対応行データd2および対応ブロックデータd3を参照して、ブロックd4におけるID「$1」に対応する行を特定する(ステップS1502)。
【0173】
そして、データ管理装置201は、特定した行に空きがあるか否かを判断する(ステップS1503)。ここで、行に空きがある場合(ステップS1503:Yes)、データ管理装置201は、ステップS1506に移行する。
【0174】
一方、行に空きがない場合(ステップS1503:No)、データ管理装置201は、特定した行を含むブロックd4の列数を2倍にすることで、ブロックd4の領域を拡大する(ステップS1504)。つぎに、データ管理装置201は、ブロック幅データd6を更新する(ステップS1505)。そして、データ管理装置201は、特定した行にID「$2」を追加する(ステップS1506)。
【0175】
つぎに、データ管理装置201は、対応行データd2および対応ブロックデータd3を参照して、ブロックd4におけるID「$2」に対応する行を特定する(ステップS1507)。そして、データ管理装置201は、特定した行に空きがあるか否かを判断する(ステップS1508)。
【0176】
ここで、行に空きがある場合(ステップS1508:Yes)、データ管理装置201は、ステップS1511に移行する。
【0177】
一方、行に空きがない場合(ステップS1508:No)、データ管理装置201は、特定した行を含むブロックd4の列数を2倍にすることで、ブロックd4の領域を拡大する(ステップS1509)。つぎに、データ管理装置201は、ブロック幅データd6を更新する(ステップS1510)。そして、データ管理装置201は、特定した行にID「$1」を追加して(ステップS1511)、本フローチャートによる一連の処理を終了する。
【0178】
これにより、データ管理装置201は、新たなエッジの追加によるグラフ構造の変化に応じて、グラフデータDの格納データを更新することができる。
【0179】
つぎに、
図16を用いて、データ管理装置201のエッジ削除処理手順について説明する。
【0180】
図16は、データ管理装置201のエッジ削除処理手順の一例を示すフローチャートである。
図16のフローチャートにおいて、まず、データ管理装置201は、エッジ削除指示を受け付けたか否かを判断する(ステップS1601)。ここでは、削除対象のエッジによりつながれるノードのIDを「$1」と「$2」とする。ID「$1」およびID「$2」は、例えば、エッジ削除指示に含まれる。
【0181】
ここで、データ管理装置201は、エッジ削除指示を受け付けるのを待つ(ステップS1601:No)。データ管理装置201は、エッジ削除指示を受け付けた場合(ステップS1601:Yes)、対応行データd2および対応ブロックデータd3を参照して、ブロックd4におけるID「$1」に対応する行を特定する(ステップS1602)。そして、データ管理装置201は、特定した行からID「$2」を削除する(ステップS1603)。
【0182】
つぎに、データ管理装置201は、対応行データd2および対応ブロックデータd3を参照して、ブロックd4におけるID「$2」に対応する行を特定する(ステップS1604)。そして、データ管理装置201は、特定した行からID「$1」を削除して(ステップS1605)、本フローチャートによる一連の処理を終了する。
【0183】
これにより、データ管理装置201は、エッジの削除によるグラフ構造の変化に応じて、グラフデータDの格納データを更新することができる。
【0184】
つぎに、
図17を用いて、データ管理装置201のデータ整形処理手順について説明する。データ管理装置201のデータ整形処理は、例えば、所定の時間ごと、または、所定のタイミングで実行される。
【0185】
図17は、データ管理装置201のデータ整形処理手順の一例を示すフローチャートである。
図17のフローチャートにおいて、まず、データ管理装置201は、頂点IDデータd1について、昇順に空白行を詰めるように更新する(ステップS1701)。
【0186】
つぎに、データ管理装置201は、ブロックd4および対応頂点データd5を参照して、更新後の頂点IDデータd1に含まれるIDのノードとエッジによりつながれた他ノード数を算出する(ステップS1702)。そして、データ管理装置201は、更新後の頂点IDデータd1に含まれるIDを、算出した他ノード数が降順となるように並べた配列をブロックサイズBに応じて分割することにより、対応頂点データd5を再作成(更新)する(ステップS1703)。
【0187】
つぎに、データ管理装置201は、再作成した対応頂点データd5に含まれるIDのノードとエッジによりつながれた他ノード数に応じて、ブロック幅データd6を更新する(ステップS1704)。そして、データ管理装置201は、更新後のブロック幅データd6とブロックサイズBとに基づいて、ブロックd4の領域を再確保する(ステップS1705)。
【0188】
つぎに、データ管理装置201は、再作成した対応頂点データd5に含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行とするブロックd4を、再確保した領域に再作成(更新)する(ステップS1706)。ブロックd4では、再作成した対応頂点データd5における各IDの順番に従って、他ノードのIDを並べて表す配列が列方向に並べられる。具体的には、例えば、データ管理装置201は、旧ブロックデータを再作成した対応頂点データd5に沿う形で、再確保した領域にコピーすることにより、ブロックd4を再作成する。
【0189】
そして、データ管理装置201は、再作成したブロックd4における、更新後の頂点IDデータd1に含まれる各IDに対応する行を特定するように対応行データd2および対応ブロックデータd3を更新して(ステップS1707)、本フローチャートによる一連の処理を終了する。
【0190】
これにより、データ管理装置201は、ノードやエッジの追加や削除の操作が繰り返し行われて、格納データにおける空白部分の割合が増加しても、格納データを整形して効率的に扱える情報にすることができる。
【0191】
以上説明したように、実施の形態にかかるデータ管理装置201は、グラフデータDに基づいて、頂点IDデータd1と、対応行データd2と、対応ブロックデータd3と、ブロックd4と、対応頂点データd5と、ブロック幅データd6とを作成することができる。グラフデータDは、ノードとノード間をつなぐエッジにより形成される構造を表す情報であり、例えば、CSR形式の行列データである。頂点IDデータd1は、グラフデータDが表すノードのIDを並べた配列を示す。対応頂点データd5は、頂点IDデータd1に含まれるIDを当該IDのノードとエッジによりつながれた他ノード数が降順となるように並べた配列を示す。ブロックd4は、対応頂点データd5に含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行として、対応頂点データd5における各IDの順番に従って列方向に並べた行列データである。ブロック幅データd6は、ブロックd4の列数を示す。対応頂点データd5およびブロック幅データd6は、ブロックd4における、頂点IDデータd1に含まれる各IDに対応する行を特定する情報である。
【0192】
これにより、データ管理装置201は、動的に変化するグラフデータDを、効率的に扱える格納データ(頂点IDデータd1、対応行データd2、対応ブロックデータd3、ブロックd4、対応頂点データd5、ブロック幅データd6)に変換することができる。例えば、データ管理装置201は、グラフデータDを隣接行列で表す場合に比べて、グラフ構造の変化に効率的に追随することができる。また、データ管理装置201は、グラフデータDを隣接リストで表す場合に比べて、幅優先探索や最短経路問題などの演算を効率的に行えるようにすることができる。例えば、データ管理装置201は、グラフデータDとベクトルとの積演算などを行うにあたり、SIMDを活用することができ、演算処理の高速化を図ることができる。
【0193】
また、データ管理装置201は、グラフデータDに新たなノードを追加する場合、頂点IDデータd1に新たなノードのIDを追加し、対応頂点データd5に新たなノードのIDを追加する。そして、データ管理装置201は、ブロックd4に、新たなノードとエッジによりつながれた他ノードのIDを並べた配列を格納するための行領域を設定し、ブロックb4における新たなノードのIDに対応する行を特定する情報を対応行データd2、対応ブロックデータd3に追加する。
【0194】
これにより、データ管理装置201は、ノードの追加によるグラフ構造の変化に応じて、グラフデータD(格納データ)を効率的に更新することができる。例えば、データ管理装置201は、グラフデータDを隣接行列で表す場合に比べて、ノードの追加にかかる処理負荷を削減することができる。
【0195】
また、データ管理装置201は、グラフデータDから第1のノードを削除する場合、対応行データd2および対応ブロックデータd3を参照して、対応頂点データd5から第1のノードのIDを削除し、ブロックd4内の第1のノードのIDに対応する第1の行(配列)の要素を削除する。また、データ管理装置201は、対応頂点データd5を参照して、第1の行の要素(ID)それぞれに対応するブロックd4内の行から第1のノードのIDを削除する。そして、データ管理装置201は、対応行データd2および対応ブロックデータd3から、第1のノードのIDに対応する要素を削除し、頂点IDデータd1から第1のノードのIDを削除する。
【0196】
これにより、データ管理装置201は、ノードの削除によるグラフ構造の変化に応じて、グラフデータD(格納データ)を効率的に更新することができる。例えば、データ管理装置201は、グラフデータDを隣接行列で表す場合に比べて、ノードの削除にかかる処理負荷を削減することができる。
【0197】
また、データ管理装置201は、グラフデータDに第2のノードと第3のノードとをつなぐ新たなエッジを追加する場合、対応行データd2および対応ブロックデータd3を参照して、ブロックd4における、第2のノードのIDに対応する第2の行を特定し、特定した第2の行に第3のノードのIDを追加する。また、データ管理装置201は、対応行データd2および対応ブロックデータd3を参照して、ブロックd4における、第2のノードのIDに対応する第3の行を特定し、特定した第3の行に第2のノードのIDを追加する。そして、データ管理装置201は、第2のノードのIDおよび第3のノードのIDを追加したブロックd4に基づいて、ブロック幅データd6を更新する。
【0198】
これにより、データ管理装置201は、エッジの追加によるグラフ構造の変化に応じて、グラフデータD(格納データ)を効率的に更新することができる。例えば、データ管理装置201は、グラフデータDを隣接行列で表す場合に比べて、エッジの追加にかかる処理負荷を削減することができる。
【0199】
また、データ管理装置201は、グラフデータDから第4のノードと第5のノードとをつなぐエッジを削除する場合、対応行データd2および対応ブロックデータd3を参照して、ブロックd4における、第4のノードのIDに対応する第4の行を特定し、特定した第4の行から第5のノードのIDを削除する。また、データ管理装置201は、対応行データd2および対応ブロックデータd3を参照して、ブロックd4における、第5のノードのIDに対応する第5の行を特定し、特定した第5の行から第4のノードのIDを削除する。
【0200】
これにより、データ管理装置201は、エッジの削除によるグラフ構造の変化に応じて、グラフデータD(格納データ)を効率的に更新することができる。例えば、データ管理装置201は、グラフデータDを隣接行列で表す場合に比べて、エッジの削除にかかる処理負荷を削減することができる。
【0201】
また、データ管理装置201は、所定の時間ごと(または、所定のタイミング)に、頂点IDデータd1について、空白箇所を詰めるように更新する。また、データ管理装置201は、ブロックd4および対応頂点データd5を参照して、更新後の頂点IDデータd1に含まれるIDを当該IDのノードとエッジによりつながれた他ノード数が降順となるように並べることにより、対応頂点データd5を更新するとともに、ブロック幅データd6を更新する。また、データ管理装置201は、更新後の対応頂点データd5に含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行として、更新後の対応頂点データd5における各IDの順番に従って列方向に並べることにより、ブロックd4を更新する。そして、データ管理装置201は、更新後のブロックd4における、更新後の頂点IDデータd1に含まれる各IDに対応する行を特定するように対応行データd2および対応ブロックデータd3を更新する。
【0202】
これにより、データ管理装置201は、定期的に格納データの整形を行うことができる。例えば、データ管理装置201は、ノードやエッジの追加や削除の操作が繰り返し行われて、格納データにおける空白部分の割合が増加しても、格納データを整形して効率的に扱える情報にすることができる。例えば、データ管理装置201は、グラフデータDを格納するのにかかる記憶容量を削減したり、グラフデータDに対する演算時の処理負荷を削減したりすることができる。
【0203】
また、データ管理装置201は、ブロックサイズBに応じて、作成した対応頂点データd5を複数の対応頂点データd5(例えば、対応頂点データd5-1,d5-2)に分割する。また、データ管理装置201は、分割した対応頂点データd5それぞれについて、対応頂点データd5に含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行として、対応頂点データd5における各IDの順番に従って列方向に並べたブロックd4(例えば、ブロックd4-1,d4-2)を作成する。そして、データ管理装置201は、作成したブロックd4のうち、頂点IDデータd1に含まれる各IDに対応するブロックd4を特定する対応ブロックデータd3(第4配列データ)と、当該ブロックd4における各IDに対応する行を特定する対応行データd2(第5配列データ)とを作成する。
【0204】
これにより、データ管理装置201は、ブロックb4について、全体N行の行列をB行ずつのブロックに分割することで、行列データに含まれるゼロ要素数の増大を抑えることができる。例えば、データ管理装置201は、ブロックb4を1ブロックで扱う場合に比べて、列数を抑えることができ、ゼロ要素をできるだけ保持しないようにすることができる。また、データ管理装置201は、対応ブロックデータd3および対応行データd2により、各ブロックb4に容易にアクセス可能にすることができる。
【0205】
これらのことから、データ管理装置201によれば、動的に変化するグラフデータD(疎行列データ)について、グラフ構造の変化に効率的に追随しつつ、幅優先探索や最短経路問題などの演算を効率的に行えるようにすることができる。これにより、データ管理装置201は、例えば、SNSのユーザ間の関係性などのデータ分析を効率的に実行可能にすることができる。なお、データ管理装置201は、グラフデータDを管理するにあたり、例えば、行と列を逆に扱うことにしてもよい。
【0206】
なお、所定の契機に基づいてアプリケーションが要求した処理要求に応じてデータ管理装置201内でデータの書き込みや読み出し等をする場合には、本実施例によってメモリ302に記憶された変換処理結果(グラフデータDを把握する複数の頂点IDデータの関係)を、データ管理装置201が処理要求に対して行う処理に反映させることで、当該処理要求に対する正しい結果を返すことができる。
【0207】
なお、本実施の形態で説明した情報処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本情報処理プログラムは、ハードディスク、フレキシブルディスク、CD-ROM、DVD、USBメモリ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本情報処理プログラムは、インターネット等のネットワークを介して配布してもよい。
【0208】
また、本実施の形態で説明した情報処理装置101(データ管理装置201)は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けICやFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。
【0209】
上述した実施の形態に関し、さらに以下の付記を開示する。
【0210】
(付記1)ノードとノード間をつなぐエッジにより形成される構造を表すグラフデータに基づいて、前記グラフデータが表すノードのIDを並べた第1配列データと、前記第1配列データに含まれるIDを当該IDのノードとエッジによりつながれた他ノード数が降順となるように並べた第2配列データと、前記第2配列データに含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行として、前記第2配列データにおける前記各IDの順番に従って列方向に並べたブロックデータと、前記ブロックデータの列数を示すブロック幅データと、前記ブロックデータにおける、前記第1配列データに含まれる各IDに対応する行を特定する第3配列データと、を作成し、
前記グラフデータに新たなノードを追加する場合、前記第1配列データに前記新たなノードのIDを追加し、前記第2配列データに前記新たなノードのIDを追加し、
前記ブロックデータに、前記新たなノードとエッジによりつながれた他ノードのIDを並べた配列を格納するための行領域を設定し、
前記ブロックデータにおける前記新たなノードのIDに対応する行を特定する情報を前記第3配列データに追加する、
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
【0211】
(付記2)前記グラフデータから第1のノードを削除する場合、前記第3配列データを参照して、前記第2配列データから前記第1のノードのIDを削除し、
前記第3配列データを参照して、前記ブロックデータ内の前記第1のノードのIDに対応する第1の行の要素を削除し、
前記第2配列データを参照して、前記第1の行の要素それぞれに対応する前記ブロックデータ内の行から前記第1のノードのIDを削除し、
前記第3配列データから前記第1のノードのIDに対応する要素を削除し、
前記第1配列データから前記第1のノードのIDを削除する、
処理を前記コンピュータに実行させることを特徴とする付記1に記載の情報処理プログラム。
【0212】
(付記3)前記グラフデータに第2のノードと第3のノードとをつなぐ新たなエッジを追加する場合、前記第3配列データを参照して、前記ブロックデータにおける、前記第2のノードのIDに対応する第2の行を特定し、
特定した前記第2の行に前記第3のノードのIDを追加し、
前記第3配列データを参照して、前記ブロックデータにおける、前記第3のノードのIDに対応する第3の行を特定し、
特定した前記第3の行に前記第2のノードのIDを追加し、
処理を前記コンピュータに実行させることを特徴とする付記2に記載の情報処理プログラム。
【0213】
(付記4)前記グラフデータから第4のノードと第5のノードとをつなぐエッジを削除する場合、前記第3配列データを参照して、前記ブロックデータにおける、前記第4のノードのIDに対応する第4の行を特定し、
特定した前記第4の行から前記第5のノードのIDを削除し、
前記第3配列データを参照して、前記ブロックデータにおける、前記第5のノードのIDに対応する第5の行を特定し、
特定した前記第5の行から前記第4のノードのIDを削除する、
処理を前記コンピュータに実行させることを特徴とする付記3に記載の情報処理プログラム。
【0214】
(付記5)前記第1配列データについて、前記第1のノードのIDが削除された空白箇所を詰めるように更新し、
前記ブロックデータおよび前記第2配列データを参照して、更新後の前記第1配列データに含まれるIDを当該IDのノードとエッジによりつながれた他ノード数が降順となるように並べることにより、前記第2配列データを更新するとともに、前記ブロック幅データを更新し、
更新後の前記第2配列データに含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行として、当該第2配列データにおける前記各IDの順番に従って列方向に並べることにより、前記ブロックデータを更新し、
更新後の前記ブロックデータにおける、更新後の前記第1配列データに含まれる各IDに対応する行を特定するように前記第3配列データを更新する、
処理を前記コンピュータに実行させることを特徴とする付記4に記載の情報処理プログラム。
【0215】
(付記6)所定のブロックサイズに応じて、作成した前記第2配列データを複数の第2配列データに分割し、
分割した前記複数の第2配列データそれぞれについて、前記第2配列データに含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行として、前記第2配列データにおける前記各IDの順番に従って列方向に並べたブロックデータを作成し、
作成した前記ブロックデータのうち、前記第1配列データに含まれる各IDに対応するブロックデータを特定する第4配列データと、当該ブロックデータにおける前記各IDに対応する行を特定する第5配列データとを含む前記第3配列データを作成する、
ことを特徴とする付記1~5のいずれか一つに記載の情報処理プログラム。
【0216】
(付記7)前記第1配列データに前記新たなノードのIDを追加するにあたり、前記第1配列データに空きがない場合、前記第1配列データの領域を拡大し、
前記第2配列データに前記新たなノードのIDを追加するにあたり、前記第2配列データに空きがない場合、前記第2配列データの領域を拡大し、
前記ブロックデータにおける前記新たなノードのIDに対応する行を特定する情報を前記第3配列データに追加するにあたり、前記第3配列データに空きがない場合、前記第3配列データの領域を拡大する、
処理を前記コンピュータに実行させることを特徴とする付記1に記載の情報処理プログラム。
【0217】
(付記8)前記第2の行に前記第3のノードのIDを追加するにあたり、前記第2の行に空きがない場合、前記ブロックデータの領域を拡大して、前記ブロック幅データを更新し、
前記第3の行に前記第2のノードのIDを追加するにあたり、前記第3の行に空きがない場合、前記ブロックデータの領域を拡大して、前記ブロック幅データを更新する、
処理を前記コンピュータに実行させることを特徴とする付記3に記載の情報処理プログラム。
【0218】
(付記9)前記グラフデータは、CSR形式の行列データである、ことを特徴とする付記1~8のいずれか一つに記載の情報処理プログラム。
【0219】
(付記10)ノードとノード間をつなぐエッジにより形成される構造を表すグラフデータに基づいて、前記グラフデータが表すノードのIDを並べた第1配列データと、前記第1配列データに含まれるIDを当該IDのノードとエッジによりつながれた他ノード数が降順となるように並べた第2配列データと、前記第2配列データに含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行として、前記第2配列データにおける前記各IDの順番に従って列方向に並べたブロックデータと、前記ブロックデータの列数を示すブロック幅データと、前記ブロックデータにおける、前記第1配列データに含まれる各IDに対応する行を特定する第3配列データと、を作成し、
前記グラフデータに新たなノードを追加する場合、前記第1配列データに前記新たなノードのIDを追加し、前記第2配列データに前記新たなノードのIDを追加し、
前記ブロックデータに、前記新たなノードとエッジによりつながれた他ノードのIDを並べた配列を格納するための行領域を設定し、
前記ブロックデータにおける前記新たなノードのIDに対応する行を特定する情報を前記第3配列データに追加する、
処理をコンピュータが実行することを特徴とする情報処理方法。
【0220】
(付記11)ノードとノード間をつなぐエッジにより形成される構造を表すグラフデータに基づいて、前記グラフデータが表すノードのIDを並べた第1配列データと、前記第1配列データに含まれるIDを当該IDのノードとエッジによりつながれた他ノード数が降順となるように並べた第2配列データと、前記第2配列データに含まれる各IDのノードとエッジによりつながれた他ノードのIDを並べて表す配列を行として、前記第2配列データにおける前記各IDの順番に従って列方向に並べたブロックデータと、前記ブロックデータの列数を示すブロック幅データと、前記ブロックデータにおける、前記第1配列データに含まれる各IDに対応する行を特定する第3配列データと、を作成し、
前記グラフデータに新たなノードを追加する場合、前記第1配列データに前記新たなノードのIDを追加し、前記第2配列データに前記新たなノードのIDを追加し、
前記ブロックデータに、前記新たなノードとエッジによりつながれた他ノードのIDを並べた配列を格納するための行領域を設定し、
前記ブロックデータにおける前記新たなノードのIDに対応する行を特定する情報を前記第3配列データに追加する、
制御部を有することを特徴とする情報処理装置。
【符号の説明】
【0221】
101 情報処理装置
110 グラフデータ
111 第1配列データ
112 第2配列データ
113 ブロックデータ
114 ブロック幅データ
115 第3配列データ
120 行領域
200 情報処理システム
201 データ管理装置
202 クライアント装置
210 ネットワーク
300 バス
301 CPU
302 メモリ
303 ディスクドライブ
304 ディスク
305 通信I/F
306 可搬型記録媒体I/F
307 可搬型記録媒体
500 制御部
501 受付部
502 作成部
503 更新部
504 整形部
505 出力部
1100 演算結果
d1 頂点IDデータ
d2 対応行データ
d3 対応ブロックデータ
d4,d4-1,d4-2,d4-3 ブロック
d5,d5-1,d5-2,d5-3 対応頂点データ
d6 ブロック幅データ