JP5844824B2 - Sparqlクエリ最適化方法 - Google Patents

Sparqlクエリ最適化方法 Download PDF

Info

Publication number
JP5844824B2
JP5844824B2 JP2013555049A JP2013555049A JP5844824B2 JP 5844824 B2 JP5844824 B2 JP 5844824B2 JP 2013555049 A JP2013555049 A JP 2013555049A JP 2013555049 A JP2013555049 A JP 2013555049A JP 5844824 B2 JP5844824 B2 JP 5844824B2
Authority
JP
Japan
Prior art keywords
query
rdf data
reduced
contraction
rdf
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2013555049A
Other languages
English (en)
Other versions
JPWO2013111287A1 (ja
Inventor
千代 英一郎
英一郎 千代
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Publication of JPWO2013111287A1 publication Critical patent/JPWO2013111287A1/ja
Application granted granted Critical
Publication of JP5844824B2 publication Critical patent/JP5844824B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/211Schema design and management

Description

本発明はRDFストアにおけるSPARQLクエリ処理に関する。
近年、画像・音声・文書等、多種多様なデータを種類横断的に検索したり、分析したりするための統一データ形式として、RDF(Resource Description Framework)とよばれる形式がW3C(World Wide Web Consortium)で標準化され、その利用が広まりつつある。RDFではトリプルと呼ばれる値の3つ組の集合によってすべてのデータを表現する。3つ組の値は順に主語、述語、目的語とよばれる。主語および述語の値はリソースと呼ばれるインターネット上で一意な識別子である。目的語の値はリソースもしくはリテラルとよばれる文字列や数値、日付などの具体的な値である。リソースおよびリテラルはノードと総称される。リソースは実体であり、リテラルは属性である。例えば、グラフでは、ノードがリソースであり、そのノードに関する情報がリテラルである。
図2にRDFデータの例を示す。この例は3人の社員の名前、年齢、性別情報を表している。1行が1つのトリプル(レコード)に対応しており、http://ではじまる文字列はリソース、それ以外はリテラルである。たとえば、図1の最初のトリプルにおいて、http://hitachi/ldap/1およびhttp://nameはリソース、Michael Adamsはリテラルである。このトリプルは、http://hitachi/ldap/1で識別される社員の名前がMichael Adamsであることを表している。
RDFデータを格納するデータベースシステムはRDFストアと呼ばれる。標準的なRDFストアは、SPARQLとよばれる問い合わせ言語を用いてデータの検索を行う機能を有している。SPARQLは関係データベースシステムにおけるSQLに相当する問い合わせ言語である。利用者は、求めるデータの条件をSPARQLクエリとして記述し、RDFストアに入力することで、データを取得することができる。
以下はSPARQLクエリの例である。
select ?n ?a where {
?x <http://name> ?n. ?x <http://age> ?a. filter (?a > 30).
}
このクエリは、年齢が30歳以上の従業員の名前と年齢を取得するものである。なお、クエリ内では、リソースは<と>で囲い、リテラルは"で囲って記述する。また、?ではじまる文字列(ここでは?n、?xおよび?a)は変数を表す。クエリ内の?x <http://name> ?n. および?x <http://age> ?a.はトリプルパターンと呼ばれる条件節で、変数を適当な値に置き換えることで一致するトリプルを指定する。filter (?a > 30). はフィルタパターンと呼ばれる条件節で、変数の値が満たすべき制約を表す。
クエリを実行すると、where以降に指定されたすべての条件を満たす変数の値が検索され、selectの後ろに並ぶ各変数(上記の例ではn及びa)の値が結果として返される。なお、クエリの結果である変数とその値の対応を変数束縛という。条件を満たす変数の値が複数存在する場合は、結果は変数束縛の集合となる。
たとえば、図2のRDFデータに対して上のクエリを実行した結果は、?n = "John Smith", ?a = "32"および?n = "Anne Brice", ?a = "45"であり、これら変数と値の対応が変数束縛である。SPARQLクエリの実行方法については非特許文献1の12節に記載されている.
幅広くデータ分析を行うために、RDFストアに格納されるデータ量は年々大規模化している。一般にクエリの実行効率(検索効率)は、対象データ量が増えるにつれて低下する。特に高度なデータ分析を行うためのクエリは条件指定が複雑になるため、実行時間が長くなる傾向にある。そのため、SPARQLクエリを最適化し、実行効率を向上させる方法が求められている。
SPARQLクエリを最適化する方法として、特許文献1が存在する。特許文献1で示されている方法は、SPARQLクエリを解析し、検索範囲を限定することでクエリの実行効率を向上させるというものである。この方法では、あらかじめRDFデータをデータの値に基づいていくつかのパーティションに分割しておき、クエリがRDFストアに入力されると、そのクエリを解析し、関連するパーティションに限定してクエリを実行する。一般にクエリの実行は、対象となる検索範囲が小さいほど効率が良くなるため、対象パーティション数を絞り込むことで効率を向上させることができる。
クエリに関連するパーティションの選択は、クエリ内に含まれる定数値の集合Cにもとづいて行う。各パーティションPiに含まれる定数の集合Ciをあらかじめ計算しておき、それとCを比較することで、クエリ実行に無関係なパーティションを除外することができる。
米国特許第7987179号
http://www.w3.org/TR/rdf-sparql-query/
しかしながら、上記文献1の方法は、検索範囲の限定を、クエリに含まれている定数のみにもとづいて行うため、そのクエリの検索範囲とRDFデータのパーティション分割とが適合するとは限らないので、その限定効果が十分ではない。特に、以下のような、変数に対する制約条件によって欲しいデータを指定するクエリに対して、検索範囲を限定することができない。
select ?l1 where {
?s1 degree ?d1. ?s1 label ?l1.
filter regex(?l1, "breast.*cancer").
?s2 degree ?d2. ?s2 label ?l2.
filter (?d1 < ?d2).
}
これは症例データベースから、乳がんより重度な症例を探すクエリである。このクエリでは、filter (?d1 < ?d2)という制約条件を満たす症例を探すために、すべての症例の重症度(degreeの値)を比較する必要があり、検索の対象範囲が広くなると急速に検索の効率が悪くなる。文献1の方法を用いることで、検索範囲をdegreeおよびlabelを含むものに限定することができる。しかしながら、これらは大半の症例データに含まれているため、検索範囲はほとんど狭まらない。
このようなクエリは、データ分析を行う上では頻繁に用いられるものであり、大規模データに対しても効率的に実行できる方法が求められている。
本発明の目的は、このような変数間の制約条件によって求めるデータを指定するデータ分析系のSPARQLクエリに対し、検索範囲を限定し、大規模データ上で効率的に実行する方法を提供することである。
本発明では、以下に示す手順で、あらかじめ元のRDFデータ数を小さくした縮約RDFデータを生成しておき、それを用いて元のクエリを最適化した、即ち、検索範囲を限定する条件節を追加したクエリを生成し、実行することで、クエリの実行効率を向上させる。
最初に、RDFストアが保持するRDFデータにおける属性が類似している複数のリテラルを縮約値と呼ぶひとつの値に対応づける基準を定めた縮約基準表を入力装置から受け取る。
縮約基準表とは、基準述語、縮約値、縮約範囲の3項目からなる表である。縮約基準表の例を図9Bに示す。基準述語にはリソースの名前、縮約値にはリソースに対応付ける任意の値(文字列)、縮約範囲には縮約値に対応付けられる変数Xに関する条件式が書かれている。各行は、基準述語を述語位置に持つトリプルにおいて目的語位置に存在するリテラルLが、縮約範囲に書かれた条件を満たす場合に、Lをその行に書かれた縮約値に対応づけることを意味している。リテラルが条件を満たすかどうかは、Xをそのリテラルで置き換えた式が真になるかどうかで判断される。
そして、プロセッサが縮約基準表を用いて、RDFデータに含まれる複数のリソースをひとつの縮約値に対応づける縮約表を生成する。次に、縮約基準表および縮約表を用いて、RDFデータの複数ノードをひとつのノードに集約した縮約RDFデータを生成する。また、RDFデータのノードと縮約RDFノードの対応関係を表す少なくとも1つのトリプルをRDFデータに追加する。(図10Aのリソースと縮約値との間を”abs”で繋いだトリプルをRDFデータに追加する。)
このように生成した縮約RDFデータは、RDFデータにおけるノード間のつながりを維持している。すなわち、RDFデータにトリプル(n1(主語),n2(述語),n3(目的語))が含まれており、複数のRDFデータに対するn1,n2,n3の縮約値がそれぞれa1,a2,a3であるならば、縮約RDFデータにはトリプル(a1,a2,a3)が含まれていることが保証される。
一方、縮約RDFデータは、RDFデータの複数のノードをひとつのノードにまとめて生成するため、RDFデータに比べてデータの数が小さくなる。平均してN個のノードをひとつにまとめるならば、縮約RDFデータのサイズは元RDFデータのサイズの1/Nになる。そのため、Nが十分大きくなるような縮約基準表を用いることで、縮約RDFデータに対する検索時間を元RDFデータの場合に比べて無視できる程度に短縮することができる。
次に、SPARQLクエリを入力装置から受け取り、入力されたクエリ内のリテラルを、縮約基準表を用いて対応する縮約値に置換した縮約クエリを生成する。次に、縮約クエリを用いて縮約RDFデータを検索し、クエリ内の各変数の持つ縮約値を記録した変数束縛表(クエリ内の各変数と縮約値との対応関係、図13)を生成する。
上記した通り、縮約RDFデータは元のRDFデータにおけるノード間のつながりを維持しているため、縮約RDFデータに対して縮約クエリqを用いて検索した実行したときに変数xの値が縮約値aであるならば、同じ元のクエリqを元のRDFデータに対して実行したときのxの値は必ずaに縮約される値になる。そのため、変数xの値としては、aに縮約されるものだけを調べればよいことがわかる。
次に、生成した変数束縛表を用いて、元クエリに各変数の持つ縮約値を指定した変数範囲制限節を追加した展開クエリを生成する。最後に生成した展開クエリを用いて縮約RDFデータに対応するRDFデータを検索し、検索結果を求める。
元のクエリは、検索時に調べる必要がある変数の値の範囲が、指定された縮約値に対応するものに限定された縮約クエリに変換され、これを用いて、複数のデータを変数の値の範囲が指定された縮約値に変換した縮約RDFデータを検索する。 そのため、特に大規模なRDFデータに対するクエリの検索効率が向上する。
RDFデータの例を示した図である。 本発明の構成図である。 RDFデータ縮約処理の流れを示した図である。 縮約表生成の流れを示した図である。 縮約RDFデータ生成の流れを示した図である。 クエリ処理全体の流れを示した図である。 クエリ変換処理の流れを示した図である。 クエリ展開処理の流れを示した図である。 実施例で用いるRDFデータを示した図である。 実施例で用いる縮約基準表を示した図である。 実施例で用いるクエリを示した図である。 実施例で用いる縮約表を示した図である。 実施例で用いる縮約RDFデータを示した図である。 実施例で用いる縮約クエリを示した図である。 実施例で用いる変数束縛表を示した図である。 実施例で用いる展開クエリを示した図である。 実施例で用いるクエリ結果を示した図である。 検索処理の概要を示す図である。
以下、図面を用いて発明の実施形態の一例を説明する。
図1はSPARQL最適化装置が稼働する計算機システムの構成例を示す図である。矢線はデータの流れを表している。
図示するように、計算機システムはCPU101、主記憶装置102、外部記憶装置103、キーボードなどの入力装置104、ディスプレイ装置などの出力装置105より構成されている。
外部記憶装置103には、RDFストアが管理する元RDFデータ106が格納されている。
主記憶装置102には、入力装置104から入力される縮約基準表107、RDFデータ106および縮約基準表107を用いて縮約表109および縮約RDFデータ110を生成するRDFデータ縮約部108、入力装置104から入力される元クエリ111および縮約基準表107を用いて縮約クエリを生成するクエリ変換部112、縮約クエリ113および縮約RDFデータ110を用いて変数束縛表115を生成する縮約検索部114、元クエリ111および変数束縛表115を用いて展開クエリ117を生成するクエリ展開部116、および展開クエリ117およびRDFデータ106を用いてクエリ実行結果(検索結果)119を生成するクエリ実行部118が格納されている。
上記の各用語の定義を以下に示す。
(1)縮約基準表107は、RDFデータにおける複数のリテラル(文字)又はリソース(数値)を縮約値と呼ぶひとつの値に対応づけるために定めた基準である。
(2)縮約表109は、RDFデータに含まれる複数のリソースをひとつの縮約値に対応づけるものである。
(3)変数束縛表115は、クエリ内の各変数と縮約値との対応関係を示すものである。縮約クエリ113は、入力された元クエリ内のリテラルを、縮約基準表を用いて対応する縮約値に置換したものである。
(4)展開クエリ117は、元クエリに各変数の持つ縮約値を指定した変数範囲制限節を追加したものである。
(5)縮約RDFデータ110は、縮約基準表および縮約表を用いて元のRDFデータの複数ノード(リソース及びリテラルの総称)をひとつのノードに集約したデータである。
処理の説明の前に、図9、10及び11に示した、処理で使用する各データを説明する。
図9Aは、例として用いるRDFデータ、図9Bは、縮約基準表、図9Cは、クエリを示した図である。
図9Aは、例として用いるRDFデータを3列の表形式で表したものである。各行がひとつのトリプルに対応しており、1列目が主語、2列目が述語、3列目が目的語を表している。このRDFデータは、A、B、C、DおよびEの5つの国のランク(rank)、度数(degree)、名前(name)、友好関係(friend)を表している。
図9Bは、例として用いる縮約基準表である。基準述語としてrankおよびdegreeの2つが記録されている。rankの縮約値はcLおよびcHで、それぞれ2未満および2以上の値に対応している。これは、2未満のrankの値はcL、2以上のrankの値はcHに縮約することを意味している。同様に、degreeの縮約値はdLおよびdHで、それぞれ10未満および10以上の値に対応している。これは、10未満のdegreeの値はdL、10以上のdegreeの値はdHに縮約することを意味している。
図9Cは、例として用いるSPARQLクエリ(元のクエリ)である。このクエリは、度数(?d1)が6未満の国(?s1)のランク(?c1)より低いランクの国(?s2)と友好関係にある国(?s3)のうち、そのランク(?c3)が2未満であるものの名前(?n2)を検索するものである。世界各国が公開している統計データをRDFデータとして統一的に表現しておくことで、このような国家間の複雑なデータ分析を、SPARQLクエリを用いて簡単に行うことができる。一方、世界各国の様々な統計データを集めて作られるRDFデータはきわめて大規模なものになるため、実用にあたっては効率的なクエリ処理が必要となる。
図10Aは、図9AのRDFデータおよび図9Bの縮約基準表から、本発明の図3〜5の処理によって生成される縮約表であり、図10Bは、縮約RDFデータである。
後述するステップ301で、元のRDFデータ(図9A)におけるすべてのリソースについて、入力として与えられた縮約基準表(図9B)にもとづいてその縮約値を求め、元のリソースと縮約値の対応関係を記録した縮約表(図10A)が生成される。
図11A−Dは、図9Cのクエリから、本発明の図6〜8の処理によって生成される縮約クエリ(図9A)、変数束縛表(図9B)、展開クエリ(図9C)、及び検索結果(図9D)である。図11Aは、図9Cの入力クエリを変換し、クエリ内のリテラルを対応する縮約値に置き換えた縮約クエリである。図11Bは、縮約クエリを用いて、図10Bの縮約RDFデータを検索することによって得られる検索結果であるクエリ内の各変数の縮約値(変数束縛)を、変数と対応させた変数束縛表である。図11Cは、図11Bの結果を用いて図9Cの入力クエリを展開し、検索範囲が限定された展開クエリを示す。図11Cの「*」は、その検索範囲の限定部分である。図11Dは、図11Cの展開クエリを用いて図9AのRDFデータを検索することによって得られる検索結果(変数とその値)である。
図3はRDFデータ縮約処理を含む処理全体を示したフローチャートである。
最初にステップ301で、元のRDFデータにおけるすべてのリソースについて、入力として与えられた縮約基準表にもとづいてその縮約値を求め、元のリソースと縮約値の対応関係を記録した縮約表を生成する(図4)。
次にステップ302に進み、生成した縮約表を用いて元のRDFデータを縮約し、縮約RDFデータを生成する(図5)。
最後に、ステップ303では、縮約RDFデータの検索結果に基づいて入力クエリを最適化してRDFデータを検索するクエリ最適化処理を行う(図6)。
ここで、図12を用いて、各データに基づく検索処理の概要を説明する。
(1)クエリを用いたRDFデータの検索に先立って、縮約基準表を用いて、RDFデータを縮約した縮約RDFデータを生成する。その際に、双方のデータの対応関係を示す縮約表を生成する。
(2)縮約表と縮約基準表を用いて(元の)クエリから生成した縮約クエリを用いて、縮約RDFデータを検索し、検索結果として変数束縛表を生成する。
(3)変数束縛表を用いて検索範囲を限定することによって、(元の)クエリから展開クエリを生成し、これを用いてRDFデータを検索して検索結果を得る。
即ち、本発明では、(元の)クエリではなく、それの縮約クエリを用いてRDFデータを縮約した縮約RDFデータを検索し、その結果得られる変数束縛表を用いて(元の)クエリを変換した展開クエリを用いてRDFデータを検索する。
図4はステップ301の処理を詳しくしたフローチャートである。
最初にステップ401で、処理済みのものを格納して区別するため、処理済のリソースを記録するリストを生成する(doneとする、これは処理済みを意味する)。 次にステップ402に進み、空の縮約表を生成し、元のRDFデータに含まれるすべての述語リソースについて、RDFデータから取り出したリソースと同じ値(リソース名)を縮約値として縮約表に登録する。特に、述語リソースの場合は、図10Aの第1行〜第4行のように、リソースと縮約値とが同じになり、これらが対になって登録される。
ここで、述語リソースとは、元のRDFデータにおいて、トリプルの述語(第二要素)として現れるリソースのことである。本発明では、複数の述語リソースをひとつに縮約することはしないため、縮約値として元と同じ値を用いている。
次にステップ403に進み、元のRDFデータに未処理のリソースが残っているかを調べる。未処理のリソースがない場合、縮約表が完成したので終了する。未処理のリソースが残っている場合、ステップ404に進み、ひとつ取り出す(sとする)。リソースsの縮約値は、リソース毎に、縮約基準表に記録されている全ての基準述語と順に照合することで求める(ステップ405〜410)。
最初にステップ405に進み、処理済みの基準述語を表す空のリストを生成する。次に、ステップ406に進み、リソースsの縮約値を表す空の文字列を生成する(リソースsの縮約値のリストをvsとする)。
本発明では、述語でないリソースの縮約値として、縮約基準表を用いて各基準述語における縮約値を、順次、図10Aの縮約表に格納する。これにより、図10Aの第5行〜第10行に示す述語でないリソースのように、ひとつでも縮約値の異なる基準述語を持つリソースを区別して扱うことができる。
次にステップ407に進み、未処理の基準述語が残っているかを調べる。未処理の基準述語が残っている場合、ステップ408に進み、ひとつ取り出す(pとする)。以下では、図10Aに示すRDFデータの主語、述語、及び目的語に対応する呼号をそれぞれs、p、oとし、それぞれの縮約値の記号をそれぞれcs、cp、coとする。
次にステップ409に進み、元のRDFデータからsを主語、pを述語を含むトリプル(s,p,o)を取り出し、縮約基準表に基づいて目的語oの縮約値を求める(coとする)。次にステップ410に進み、co(目的語oの縮約値)をvs(リソースsの縮約値のリスト)に追加し、p(未処理基準述語)を処理済みリスト(done 2)に追加した後、ステップ407に戻る。
ステップ407において、未処理の基準述語がない場合、主語sの縮約値を求め終えたので、ステップ411に進む。
ステップ411では、縮約表に主語sの縮約値がvsであることを記録する。次に、ステップ412に進み主語sを処理済リストに追加した後、ステップ403に戻る。
図5はステップ302の縮約RDFデータ生成処理を詳しくしたフローチャートである。縮約RDFデータの生成は、元のRDFデータの各トリプルを、ステップ301で生成した縮約表および縮約基準表にもとづいて縮約していくことで行う。
最初にステップ501で、処理済のトリプルを記録するリストを生成する(doneとする)。次にステップ502に進み、図10Bに示す空の縮約RDFデータを生成する(CGとする)。
次にステップ503に進み、元のRDFデータに未処理のトリプルが残っているかを調べる。未処理のトリプルがない場合、縮約RDFデータ生成処理を終了する。未処理のトリプルが残っている場合、ステップ504に進み、ひとつ取り出す((s、p、o)とする)。
次にステップ505に進み、s、p、oに対応する縮約値を縮約表と縮約基準表から求める(cs、cp、coとする)。RDFの仕様により、s、pはリソース、oはリソースまたはリテラルである。oがリソースの場合、縮約表にリソースの縮約値が記録されているので、対応する縮約値を取り出す。oがリテラルの場合、pが基準述語ならば、図4のステップ409と同じように、入力された縮約基準表にもとづき縮約値を求める。pが基準述語でなければ、その他の値すべてを表す「other」を縮約値とする。
次にステップ506に進み、求めた縮約値cs、cp、coからなるトリプル(cs、cp、co)を縮約RDFデータ(CG)に追加する。次にステップ507に進み、リソースsとその縮約値csの対応を表すトリプル(s、abs、cs)を元のRDFデータに追加する。これは、クエリ実行時(検索時)に検索範囲を限定するのに用いる。「abs」は元データと縮約値とを対応付ける述語である。次にステップ508に進み、(s、p、o)を処理済みリストdoneに追加し、ステップ503に戻る。
図6はクエリ最適化実行処理303の流れを示したフローチャートである。本処理は、図3の縮約処理で生成した縮約表および縮約RDFデータを用いて、RDFストアに入力されたクエリを最適化し、検索範囲の限定されたクエリを生成する。生成したクエリを用いて元のRDFデータを検索し、検索結果を出力する。ここで、「最適化」とは、(元の)クエリから、検索範囲を限定する条件節を追加したクエリを生成することである。
最初にステップ601で、入力クエリqを変換し、クエリ内のリテラルを対応する縮約値に置き換えた縮約クエリを生成する(aqとする)。
次にステップ602に進み、縮約クエリaqを用いて縮約RDFデータを検索し、クエリ内の各変数の縮約値を求める(arsとする)。縮約RDFデータはRDF形式のため、縮約クエリを用いた縮約RDFデータの検索はRDFストアが行っている非特許文献1の定義にもとづく通常のクエリ処理、即ち、トリプルのリストからクエリに合うトリプルを取り出す処理とほぼ同様であり、異なるのはfilter節における比較式の判定処理だけである。
縮約値v1とv2の非等値比較v1 != v2は(「!=」は「≠」と同じ)、通常のクエリ処理ではv1とv2の値が同じであれば偽、そうでなければ真と判定するが、縮約値の場合、値が同じであっても、縮約前の値が同じとは限らないため、常に真と判定するようにする。また縮約値の大小比較v1 < v2は、縮約基準表を参照してv1とv2に対応する元の値の範囲を調べ、その大小関係によって判定する。たとえば、v1に対応する元の値の範囲が20以下、v2に対応する元の値の範囲が50以上と縮約基準表に書かれていれば、v1 < v2の結果は真と判定する。その他の大小比較(v1 > v2、v1 <= v2、 v2 <= v1)も同様である。これらの修正により、クエリの結果が最適化によって変化することを防ぐことができる。即ち、展開クエリに追加した制限条件によって検索漏れが生じることを防ぐことができる。
次にステップ603に進み、クエリ内の各変数の縮約値arsを用いて入力クエリqを展開、即ち、変数範囲制限節をクエリに追加し、検索範囲の限定された展開クエリを生成する(qsとする)。
次にステップ604に進み、展開クエリqsを用いて元のRDFデータを検索し、クエリ内の各変数に対応する値(検索結果)を求める(rsとする)。これはRDFストアが行っている通常のクエリ処理と同じである。次にステップ605に進み、クエリ内の各変数に対応する値rsを検索結果として出力し、終了する。
図7は、ステップ601のクエリ変換処理を詳しく示したフローチャートである。クエリ変換処理は、元のクエリのwhere節に書かれているパターン(条件節)をひとつずつ、元のクエリに含まれている値を縮約値に変換することで行う。
最初にステップ701で、元のクエリqの変数節を*にし、where節を空にした縮約クエリを生成する(aqとする)。変数節を*にするのは、クエリ内のすべての変数の縮約値を求めるためである。次にステップ702に進み、処理済のパターンを記録する空のリスト(図11A)を生成する(doneとする)。
次にステップ703に進み、未処理のパターンが、図11Aのデータに残っているかを調べる。未処理のパターンがない場合、クエリ変換処理を終了する。未処理のパターンが残っている場合、ステップ704に進み、パターンをひとつ取り出す(patとする)。
次にステップ705に進み、patに含まれているリテラルを、縮約基準表を用いて縮約値に置き換えたパターンを生成する(apatとする)。縮約値の求め方は、図4のステップ409と同じである。用いる基準述語は、リテラルがトリプルパターン(トリプルの一部が変数になっている条件節、図11Aの2、3、5、7−9行目の”filter”が付いていないもの)に含まれ、述語が変数でない場合、その変数でないものを基準述語にする。リテラルがフィルタパターンの比較式に含まれ、比較相手の変数を目的語とするトリプルパターンが存在する場合、その変数でないものを基準述語にする。いずれにも該当しない場合、常に真となるフィルタパターン filter (1 = 1)を生成する。
次にステップ706に進み、リテラルを縮約値に置き換えたパターンapatを縮約クエリaqのwhere節に追加する。次にステップ707に進み、未処理パターンであるpatを処理済リストdoneに追加し、ステップ703に戻る。
図8は、ステップ603のクエリ展開処理を詳しく示したフローチャートである。
最初にステップ801で、空の展開クエリ集合を生成する(qsとする)。次にステップ802に進み、処理済の変数束縛を記録する空のリスト(図11C、展開クエリを格納するためのもの)を生成する(doneとする)。
次にステップ803に進み、未処理の変数束縛が残っているかを調べる。未処理の変数束縛がない場合、クエリ展開処理を終了する。未処理の変数束縛が残っている場合、ステップ804に進み、変数束縛をひとつ取り出す(rとする)。
次にステップ805に進み、元のクエリqをコピーして新しいクエリを生成する(qeとする)。クエリ展開処理では、元のクエリをコピーした新しいクエリqeに、変数の値の範囲を制限するパターンを追加することで、検索範囲の限定された展開クエリを生成する(ステップ806〜ステップ810)。
以上の処理により、filterパターンでそのまま検索すると、2つの変数の値の比較に時間がかかるが、展開クエリでは、変数範囲制限節によってチェック対象の値の範囲が制限されるので、2つの変数の値の比較の時間が短縮される。
最初にステップ806に進み、処理済の変数を記録する空のリストを生成する(done2とする)。
次にステップ807に進み、未処理の変数が残っているかを調べる。ステップ807において、未処理の変数がない場合、ステップ811に進み、生成した展開クエリqeを展開クエリ集合qsに追加する。展開クエリ集合には、それぞれ変数制限節の異なるクエリの展開クエリが格納されている。次にステップ812に進み、変数束縛rを処理済リストdoneに追加し、ステップ803に戻る。
ステップ807において、未処理の変数が残っている場合、ステップ808に進み、ひとつ取り出す(?xとする)。次にステップ809に進み、変数束縛rに記録されている変数?xの値cvを求め、パターン「?x <abs> cv.」を展開クエリqeのwhere節に追加する。次にステップ810に進み、変数?xを処理済リストdone2に追加し、ステップ807に戻る。
(処理の具体例)
以下では、具体例を用いて本発明の実施例を示す。
ステップ301の処理について、図4に示されているフローチャートに沿って説明する。
最初にステップ401で、処理済のリソースを記録するリストを生成する(doneとする)。次にステップ402に進み、空の縮約表を生成し、元のRDFデータに含まれるすべての述語リソースについて、元と同じ値(リソース名)を縮約値として記録し、処理済リストdoneに登録する。図9AのRDFデータの述語の列から、rank, degree, name, friendの4つが述語リソースとして得られる。そこで、縮約表にリソースとその縮約値との対、即ち、(rank、 rank)、 (degree、 degree)、 (name、 name)及び(friend、friend)を登録する。またrank、 degree、 name、 friendを処理済リストdoneに登録する。
次にステップ403に進み、元のRDFデータに未処理のリソースが残っているかを調べる。未処理のリソースが残っているため、ステップ404に進み、ひとつ取り出す。ここでは主語Aが取り出されたとする。
次にステップ405に進み、処理済みの基準述語を表す空のリストを生成する(done2とする)。次に、ステップ406に進み、主語Aの縮約値を表す空のリストを生成する(vsとする)。
次にステップ407に進み、未処理の基準述語が残っているかを調べる。未処理の基準述語としてrankとdegreeが残っているので、ステップ408に進み、基準述語をひとつ取り出す。ここではrankが取り出されたとする。
次にステップ409に進み、元のRDFデータからAを主語、rankを述語とするトリプルを取り出す。ここでは(A、rank、1)が取り出される。1は2未満なので、縮約基準表から、その縮約値が「cL」であることがわかる。次にステップ410に進み、縮約値「cL」を主語Aの縮約値を表す空のリストvsに追加し、rankをdone2に追加する。これにより、vs = cL、done2 = rankとなる。
次にステップ407に進み、未処理の基準述語が残っているかを調べる。未処理の基準述語としてdegreeが残っているので、ステップ408に進み、取り出す。
次にステップ409に進み、元のRDFデータからAを主語、degreeを述語とするトリプルを取り出す。ここでは(A、degree、4)が取り出される。4は10未満なので、縮約基準表から、その縮約値が「dL」であることがわかる。次にステップ410に進み、縮約値「dL」を主語Aの縮約値を表す空のリストvsに追加し、degreeをdone2に追加する。これにより、vs = cLdL、done2 = rank degreeとなる。
次にステップ407に進み、未処理の基準述語が存在しないため、ステップ411に進む。ステップ411では、縮約表にAの縮約値が「cLdL」であることを記録する。次に、ステップ412に進み、主語Aをdoneに追加した後、ステップ403に戻る。
以降、未処理のリソースB、C、D、Eについて同様にステップ403〜412の処理が行われ、結果として図10Aの縮約表が生成される。
次にステップ302の処理について、図5に示されているフローチャートに沿って説明する。
最初にステップ501で、処理済のトリプルを記録するリストを生成する(doneとする)。次にステップ502に進み、空の縮約RDFデータ(図10B)を生成する(CGとする)。
次にステップ503に進み、未処理のトリプルが残っているかを調べる。未処理のトリプルが残っているので、ステップ504に進み、ひとつ取り出す。ここでは、(A、rank、1)が取り出されるとする。
次にステップ505に進み、「A、rank、1」に対応する縮約値を求める。主語Aと述語rankはリソースであり、図10Aの縮約表から縮約値はそれぞれ「cLdL」および「rank」であることがわかる。1はリテラルであり、図9Bの縮約基準表から、縮約値が「cL」であることがわかる。次にステップ506に進み、求めた縮約値からなるトリプル(cLdL、rank、cL)を縮約RDFデータCGに追加する。次にステップ507に進み、主語Aと縮約値「cLdL」の対応を表すトリプル(A、abs、cLdL)を元のRDFデータに追加する。次にステップ508に進み、(A、rank、1)を処理済みリストdoneに追加し、ステップ503に戻る。
以降、未処理のトリプルについて同様にステップ503〜508の処理が行われ、結果として図10Bの縮約RDFデータが生成される。
次にステップ303の処理について、図6に示されているフローチャートに沿って説明する。
最初にステップ601で、入力クエリ(図9C)を変換し、クエリ内のリテラルを対応する縮約値に置き換えたクエリを生成する(図11A)。次にステップ602に進み、縮約クエリaqを用いて縮約RDFデータ(図10B)を検索し、クエリ内の各変数の縮約値(変数束縛)を求める(図11B)。
次にステップ603に進み、図11Bの結果を用いて入力クエリ(図9C)を展開し、検索範囲の限定された展開クエリを生成する(図11C)。次にステップ604に進み、図11Cの展開クエリを元のRDFデータ(図9A)に対して実行し、クエリ内の各変数の値を求める(図11D)。これはRDFストアが行っている通常のクエリ処理と同じである。
次にステップ605に進み、図11Dの内容を結果として出力して終了する。
ステップ601の処理について、図7に示されているフローチャートに沿って説明する。
最初にステップ701で、元のクエリ(図9C)の変数節を*、where節を空にした縮約クエリを生成する(aqとする)。次にステップ702に進み、処理済のパターンを記録する空のリストを生成する(doneとする)。
次にステップ703に進み、未処理のパターンが残っているかを調べる。未処理のパターンが残っているので、ステップ704に進み、ひとつ取り出す。ここでは、パターン「filter (?d1 < 6)」が取り出されたとする。
次にステップ705に進み、パターン「filter (?d1 < 6)」に含まれているリテラルを縮約基準表(図9B)を用いて縮約値に置き換えたパターンを生成する。含まれているリテラルは6のみであり、6の比較相手である変数「?d1」を目的語とするトリプルパターンの述語はdegreeのため、これを基準述語として縮約基準表から6の縮約値を求めると「dL」であることがわかる。そのため、置き換えたパターンは「filter (?d1 < dL)」となる。
次にステップ706に進み、パターン「filter (?d1 < dL)」を縮約クエリaqのwhere節に追加する。次にステップ707に進み、パターン「filter (?d1 < 6)」を処理済リストdoneに追加し、ステップ703に戻る。
以降、未処理のパターンについて同様にステップ703〜707の処理が行われ、結果として図11Aの縮約クエリが生成される。
ステップ603の処理について、図8に示されているフローチャートに沿って説明する。
最初にステップ801で、空の展開クエリ集合を生成する(qsとする)。次にステップ802に進み、処理済の変数束縛を記録する空のリストを生成する(doneとする)。
次にステップ803に進み、未処理の変数束縛が残っているかを調べる。変数束縛はひとつしかないため、ステップ804に進み、それを取り出す。次にステップ805に進み、元のクエリ(図9C)をコピーして新しいクエリを生成する(qeとする)。次にステップ806に進み、処理済の変数を記録する空のリストを生成する(done2とする)。
次にステップ807に進み、未処理の変数が残っているかを調べる。未処理の変数が残っているので、ステップ808に進み、ひとつ取り出す。ここでは変数「?s1」が取り出されたとする。次にステップ809に進み、変数束縛(図11B)から変数「?s1」の値を調べると、縮約値「cHdL」であることがわかる。そのためパターン「?s1 <abs> cHdL.」を新しいクエリqeのwhere節に追加する。
次にステップ810に進み、変数?s1を処理済リストdone2に追加し、ステップ807に戻る。
以降、未処理の変数について同様にステップ803〜810の処理が行われ、結果として図11Cの展開クエリが生成される。図11Cに示した展開クエリの中で(*)で示した部分は、図9Cに示した元のクエリに対して追加された変数範囲制限節である。
実施例によって生成された展開クエリ(図11D)と元のクエリ(図9C)を比較すると、元のクエリでは変数?s1、?s2、?s3の検索範囲がA、B、C、D、Eのすべての組み合わせである5×5×5=125個になる。
一方、本実施例により生成された展開クエリでは、変数?s1、?s2、?s3の範囲を制限する変数範囲制限節「?s1 <abs> cHdL」、「?s2 <abs> cHdL」、および「?s3 <abs> cLdL」が追加されているため、変数?s1および?s2の取りうる値はそれぞれ縮約値cHdLに対応するBおよびD、変数?s3の取りうる値は縮約値cLdLに対応するEに限定され、変数?s1、?s2、?s3の検索範囲は2×2×1=4個に絞り込まれる。そのため、展開クエリは、元のクエリに比べて実行効率が大幅に向上する。

Claims (4)

  1. 計算機を用いてSPARQLクエリを最適化する方法であって、
    RDFストアが保持するRDFデータにおける複数のリテラルを縮約値と呼ぶひとつの値に対応づける基準を定めた縮約基準表を入力装置から受け取るステップと、
    前記縮約基準表を用いて前記RDFデータに含まれる複数のリソースをひとつの縮約値に対応づける縮約表を生成するステップと、
    前記縮約基準表および前記縮約表を用いて、前記RDFデータの複数ノードをひとつのノードに集約した縮約RDFデータを生成し、前記RDFデータのノードと前記縮約RDFデータのノードの対応関係を表すトリプルを前記RDFデータに追加するステップと、
    前記SPARQLクエリを入力装置から受け取り、入力された前記SPARQLクエリ内のリテラルを前記縮約基準表を用いて対応する縮約値に置換した縮約クエリを生成するステップと、
    前記縮約クエリを用いて前記縮約RDFデータを検索して、前記SPARQLクエリ内の各変数の持つ縮約値を記録した変数束縛表を生成するステップと、
    生成した前記変数束縛表を用いて、前記SPARQLクエリに、前記各変数の持つ前記縮約値を指定した変数範囲制限節を追加した展開クエリを生成するステップと、
    生成した前記展開クエリを用いて前記RDFデータを検索して、検索結果を求めるステップと、
    を有することを特徴とするSPARQLクエリ最適化方法。
  2. 計算機で読み取り可能な記憶媒体であって、請求項1に記載の方法を実行するためのプログラムを格納したことを特徴とする記憶媒体。
  3. 計算機システムにおいて、
    RDFストアが保持するRDFデータにおける複数のリテラルを縮約値と呼ぶひとつの値に対応づける基準を定めた縮約基準表を受け取る入力装置と、
    前記縮約基準表を用いて前記RDFデータに含まれる複数のリソースをひとつの縮約値に対応づける縮約表を生成する手段と、
    前記縮約基準表および前記縮約表を用いて、前記RDFデータの複数ノードをひとつのノードに集約した縮約RDFデータを生成し、前記RDFデータのノードと縮約RDFデータのノードの対応関係を表すトリプルを前記RDFデータに追加する手段と、
    SPARQLクエリを前記入力装置から受け取り、入力された前記SPARQLクエリ内のリテラルを前記縮約基準表を用いて対応する縮約値に置換した縮約クエリを生成する手段と、
    前記縮約クエリを用いて前記縮約RDFデータを検索して、前記SPARQLクエリ内の各変数の持つ縮約値を記録した変数束縛表を生成する手段と、
    生成した前記変数束縛表を用いて、前記クエリに、前記各変数の持つ前記縮約値を指定した変数範囲制限節を追加した展開クエリを生成する手段と、
    生成した前記展開クエリを用いて前記RDFデータを検索して、検索結果を求める手段と、
    を有することを特徴とする計算機システム。
  4. 計算機を用いてSPARQLクエリを最適化する方法であって、
    RDFストアが保持するRDFデータにおける複数のリテラルを縮約値と呼ぶひとつの値に対応づける基準を定めた縮約基準表を用いて、前記RDFデータを縮約した前記縮約RDFデータを生成すると共に、前記RDFデータと前記縮約RDFデータとの対応関係を示す縮約表を生成し、
    前記縮約表と前記縮約基準表を用いて前記SPARQLクエリから生成した縮約クエリを用いて、前記縮約RDFデータを検索し、
    前記検索の結果得られる変数束縛表を用いて前記SPARQLクエリを変換した展開クエリを用いて前記RDFデータを検索する、
    ことを特徴とするSPARQLクエリ最適化方法。
JP2013555049A 2012-01-25 2012-01-25 Sparqlクエリ最適化方法 Active JP5844824B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2012/051552 WO2013111287A1 (ja) 2012-01-25 2012-01-25 Sparqlクエリ最適化方法

Publications (2)

Publication Number Publication Date
JPWO2013111287A1 JPWO2013111287A1 (ja) 2015-05-11
JP5844824B2 true JP5844824B2 (ja) 2016-01-20

Family

ID=48873058

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013555049A Active JP5844824B2 (ja) 2012-01-25 2012-01-25 Sparqlクエリ最適化方法

Country Status (3)

Country Link
US (1) US20140372408A1 (ja)
JP (1) JP5844824B2 (ja)
WO (1) WO2013111287A1 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9031933B2 (en) * 2013-04-03 2015-05-12 International Business Machines Corporation Method and apparatus for optimizing the evaluation of semantic web queries
JP6440542B2 (ja) * 2014-03-18 2018-12-19 株式会社Nttドコモ 大量の複雑な構造化データを管理するための知識エンジン
JP6463240B2 (ja) * 2015-09-10 2019-01-30 株式会社日立製作所 クエリ作成支援方法および情報処理装置
CN109992658B (zh) * 2019-04-09 2023-04-11 智言科技(深圳)有限公司 一种知识驱动的sparql查询构建方法
US11195046B2 (en) * 2019-06-14 2021-12-07 Huawei Technologies Co., Ltd. Method and system for image search and cropping
JP7360047B2 (ja) 2020-02-26 2023-10-12 富士通株式会社 検索処理プログラム、検索処理方法および検索処理装置

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03141471A (ja) * 1989-10-27 1991-06-17 Hitachi Ltd 関係データの記憶・検索方法
US7587394B2 (en) * 2003-09-23 2009-09-08 International Business Machines Corporation Methods and apparatus for query rewrite with auxiliary attributes in query processing operations
US7680862B2 (en) * 2005-04-18 2010-03-16 Oracle International Corporation Rewriting table functions as SQL strings
US8719250B2 (en) * 2005-04-18 2014-05-06 Oracle International Corporation Integrating RDF data into a relational database system
CN101436192B (zh) * 2007-11-16 2011-03-16 国际商业机器公司 用于优化针对垂直存储式数据库的查询的方法和设备
US8484243B2 (en) * 2010-05-05 2013-07-09 Cisco Technology, Inc. Order-independent stream query processing
WO2012054860A1 (en) * 2010-10-22 2012-04-26 Daniel Paul Miranker Accessing relational databases as resource description framework databases

Also Published As

Publication number Publication date
WO2013111287A1 (ja) 2013-08-01
US20140372408A1 (en) 2014-12-18
JPWO2013111287A1 (ja) 2015-05-11

Similar Documents

Publication Publication Date Title
JP4947245B2 (ja) 情報検索装置、情報検索方法、コンピュータ・プログラムおよびデータ構造
JP5392077B2 (ja) オントロジ処理装置、オントロジ処理方法、及びオントロジ処理プログラム
US9390176B2 (en) System and method for recursively traversing the internet and other sources to identify, gather, curate, adjudicate, and qualify business identity and related data
JP5844824B2 (ja) Sparqlクエリ最適化方法
Etcheverry et al. Enhancing OLAP analysis with web cubes
JP2005521954A (ja) リレーショナルデータベースをクエリーする方法および装置
Xirogiannopoulos et al. Extracting and analyzing hidden graphs from relational databases
CN105630881A (zh) 一种rdf的数据存储方法和查询方法
JP4207438B2 (ja) Xml文書格納/検索装置及びそれに用いるxml文書格納/検索方法並びにそのプログラム
JP2006185408A (ja) データベース構築装置及びデータベース検索装置及びデータベース装置
JP2004030221A (ja) 変更対象テーブル自動検出方法
Tseng Mining frequent itemsets in large databases: The hierarchical partitioning approach
CN110321446B (zh) 相关数据推荐方法、装置、计算机设备及存储介质
Alsarkhi et al. An analysis of the effect of stop words on the performance of the matrix comparator for entity resolution
CN110990423B (zh) Sql语句的执行方法、装置、设备和存储介质
Doerr et al. Integration of complementary archaeological sources
JP5210970B2 (ja) 共通クエリグラフパターン生成方法、共通クエリグラフパターン生成装置及び共通クエリグラフパターン生成プログラム
JP2010272006A (ja) 関係抽出装置、関係抽出方法、及びプログラム
JP5555238B2 (ja) ベイジアンネットワーク構造学習のための情報処理装置及びプログラム
Margitus et al. RDF versus attributed graphs: The war for the best graph representation
Ahmed et al. Computing source-to-target shortest paths for complex networks in RDBMS
CN114911826A (zh) 一种关联数据检索方法和系统
JP6666312B2 (ja) 多次元データ管理システム及び多次元データ管理方法
KR102062139B1 (ko) 지능형 자료구조 기반의 데이터 처리 방법 및 그를 위한 장치
JP2018060379A (ja) 検索手段選択プログラム、検索手段選択方法及び検索手段選択装置

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150908

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151016

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20151110

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151119

R150 Certificate of patent or registration of utility model

Ref document number: 5844824

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150