(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024086652
(43)【公開日】2024-06-27
(54)【発明の名称】グラフデータのテキストフィルタリングクエリの最適化
(51)【国際特許分類】
G06F 16/31 20190101AFI20240620BHJP
【FI】
G06F16/31
【審査請求】未請求
【請求項の数】15
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2023210145
(22)【出願日】2023-12-13
(31)【優先権主張番号】22306881
(32)【優先日】2022-12-15
(33)【優先権主張国・地域又は機関】EP
(71)【出願人】
【識別番号】500102435
【氏名又は名称】ダッソー システムズ
【氏名又は名称原語表記】DASSAULT SYSTEMES
(74)【代理人】
【識別番号】110000752
【氏名又は名称】弁理士法人朝日特許事務所
(72)【発明者】
【氏名】フランソワ ダヴィオー
【テーマコード(参考)】
5B175
【Fターム(参考)】
5B175DA01
5B175KA07
(57)【要約】 (修正有)
【課題】本発明は、特に、読み書きグラフデータベースの1つ以上の逆リストを更新するためのコンピュータ実装方法、コンピュータプログラム及び読み書きグラフデータベースを提供する。
【解決手段】方法は、リテラル値の組とIDの組とを含む辞書エンコーダを提供することを含み、それぞれのリテラル値はIDに関連付けられる。方法はまた、各リテラル値について、リテラル値を構成するトリグラムを識別することを含む。方法はさらに、識別した各トリグラムについて、第1のデータ構造において、識別されたトリグラムに関連する逆リストのヘッダを更新することと、トリグラムを含むリテラル値のIDの表現を含む指定ブロックを更新することとを含み、それによって、識別されたトリグラムに関連する逆リストを更新する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
読み書きグラフデータベースの1つ以上の逆リストを更新するためのコンピュータ実装方法であって、各々の逆リストは、リテラル値に含まれるトリグラムに関連付けられており、
リテラル値の組とIDの組とを備え、それぞれのリテラル値がIDに関連付けられている辞書エンコーダを提供するステップ(S10)と、
リテラル値毎に、
リテラル値を構成するトリグラムを識別するステップ(S20)と、
識別された各トリグラムについて、及び第1のデータ構造において
前記識別されたトリグラムに関連付けられた逆リストのヘッダを更新するステップ(S30)と、
前記トリグラムを含むリテラル値のIDの表現を含む指定されたブロックを更新し、それによって、識別されたトリグラムに関連付けられた逆リストを更新するステップ(S40)と
を有するコンピュータ実装方法。
【請求項2】
基準を満たすと、
第2のデータ構造における前記リテラル値のIDの表現を更新するステップであって、当該第2のデータ構造がヘッダに関連付けられる、更新するステップと、
前記指定されたブロックを初期化するステップと
を有する請求項1に記載のコンピュータ実装方法。
【請求項3】
前記指定されたブロックが満杯であるときに前記基準が満たされる
請求項2に記載のコンピュータ実装方法。
【請求項4】
前記第2のデータ構造が、ツリー構造であり、
前記第2のデータ構造内にある前記リテラル値の前記IDの前記表現を更新すると、前記ヘッダの前記ツリー構造のルートアドレスを更新するステップをさらに有する
請求項2~3のいずれか一項に記載のコンピュータ実装方法。
【請求項5】
前記第2のデータ構造がツリー構造であり、
前記第2のデータ構造内の更新された前記リテラル値の前記IDの表現が、
各ブロックは8つの32ビットワードの組である1つ以上のブロックを有する
請求項2~4のいずれか一項に記載のコンピュータ実装方法。
【請求項6】
前記第1のデータ構造が、任意の連想データ構造、好ましくはツリー構造である
請求項1~5のいずれか一項に記載のコンピュータ実装方法。
【請求項7】
前記第1のデータ構造がB+Treeであり、
前記リテラル値の前記IDの表現を更新するステップが、
B+Treeの内部ノードのIDのリファレンスを更新するステップと、
B+TreeのリーフのIDを更新するステップと
を有する請求項1~6のいずれか一項に記載のコンピュータ実装方法。
【請求項8】
前記第1のデータ構造の前記指定されたブロックが、8つの32ビットワードの組である
請求項1~7のいずれか一項に記載のコンピュータ実装方法。
【請求項9】
前記8つの32ビットワードの各々は、以下のパターンのうちの1つに従って構成される
16 x 2ビット整数、
8 x 3ビットの次に2 x 4ビット、
2 x 4ビットの次に8 x 3ビット、
8 x 4ビット、
4 x 5ビットの次に2 x 6ビット、
2 x 6ビットの次に4 x 5ビット、
3 x 6ビットの次に2 x 7ビット、
2 x 7ビットの次に3 x 6ビット、
4 x 8ビット、
1 x 10ビットの次に2 x 11ビット、
2 x 11ビットの次に1 x 10ビット、
1 x 8ビットの次に1 x 24ビット、
2 x 16ビット、
1 x 24ビットの次に1 x 8ビット、又は
1 x 32ビット。
請求項1~8のいずれか一項に記載のコンピュータ実装方法。
【請求項10】
前記組の最初の単語が、以下のうちの1つ以上のデータを備える
前記指定されたブロックが満杯であるかどうかを示すインジケータ、
次の埋められる単語のインジケータ、及び/又は
各単語のパターンのインジケータ
請求項9に記載のコンピュータ実装方法。
【請求項11】
前記リテラル値の前記IDの前記追加された表現は、以下の間の差異を示す
前記識別されたトリグラムを含む第1のリテラル値の第1のID、及び
前記識別されたトリグラムを含む第2のリテラル値の第2のID
請求項1~10のいずれか一項に記載のコンピュータ実装方法。
【請求項12】
請求項1~11のいずれか一項に記載の方法により、前記更新された逆リストを用いてクエリに応答する方法であって、
クエリエンジンによってクエリを取得するステップであって、前記クエリは、リテラル数値のための少なくとも1つのフィルタを含む、取得するステップと、
1つ又は複数の更新された逆リストを取得するステップであって、1つ又は複数の取得された逆リストが、前記フィルタのリテラル値を構成するそれぞれの1つ又は複数のトリグラムに関連付けられる、取得するステップと、
前記取得されたクエリに、1つ又は複数の取得された逆リストの部分集合を使用して応答するステップと
を有する、クエリに応答する方法。
【請求項13】
前記1つ又は複数の取得された逆リストの前記1つ又は複数の前記部分集合は、前記1つ又は複数の取得された逆リストの中の最小カーディナリティの部分集合である
請求項12に記載の方法。
【請求項14】
前記プログラムがコンピュータによって実行されるとき、前記コンピュータに、請求項1~11のいずれか一項に記載の方法及び/又は請求項12~13のいずれか一項に記載の方法を実行させる命令を含むコンピュータプログラム。
【請求項15】
逆リストを含む読み書きグラフデータベースであって、データベースの各逆リストが、リテラル値で構成されるトリグラムに関連付けられ、データベースの逆リストが、請求項1~11のいずれか一項に記載の方法を実行することによって更新される、読み書きグラフデータベース。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータプログラム及びシステムの分野に関し、より詳細には、読み書きグラフデータベースの辞書エンコーダのリテラル値を識別する1つ以上の逆リストを更新するための方法、システム及びプログラムに関する。
【背景技術】
【0002】
物体の設計、エンジニアリング及び製造のために、多数のシステム及びプログラムが市場に提供されている。CADはコンピュータ支援設計(Computer-Aided Design)の頭字語であり、たとえば、オブジェクトを設計するためのソフトウェアソリューションに関する。CAEはコンピュータ支援エンジニアリング(Computer-Aided Engineering)の頭字語であり、たとえば、将来の製品の物理的挙動をシミュレートするためのソフトウェアソリューションに関する。CAMはコンピュータ支援製造(Computer-Aided Manufacturing)の頭字語であり、たとえば、製造プロセスや動作を定義するためのソフトウェアソリューションに関する。このようなコンピュータ支援設計システムでは、技術の効率の点でグラフィカルユーザインターフェイスが重要な役割を果たす。これらの技術は、製品ライフサイクル管理(PLM)システム内に組み込まれてもよい。PLMとは、企業が製品データを共有し、共通の処理を適用し、企業知識 を活用して、長期的な企業のコンセプトを越えて、コンセプトから生涯にわたる製品の開発に役立てることを支援するビジネス戦略のことをいう。ダッソーシステムズが(CATIA、ENOVIA、DELMIAの商標のもと)提供するPLMソリューションでは、製品エンジニアリングの知識を編成するエンジニアリングハブと、製造エンジニアリングの知識を管理する製造ハブと、エンジニアリングハブ及び製造ハブへの企業の統合及び接続とを可能にする企業ハブが提供される。全体として、システムは最適化された製品定義、製造準備、生産、及びサービスを駆動する動的な知識ベースの製品作成及び意思決定サポートを可能にするために、製品、プロセス、リソースをリンクするオープンオブジェクトモデルを提供する。
【0003】
さらに、上記の設計システム及びプログラムインメモリデータベース、すなわち、ディスク又はSSD上にデータを記憶するデータベースとは対照的に、主にデータ記憶のためのメモリに依存する専用構築データベースの適用のために、データベース管理のためのいくつかのソリューションが提供される。そのようなデータベース管理ソリューションの中で、グラフデータベース、例えば、RDFグラフデータベースに関連するソリューションは、データモデリング及びデータ記憶におけるそれらの大きな柔軟性のために、特に興味深い。一般的な用途では、RDFグラフデータベースは、数百万から数十億のタプル及びテラバイトの大きさの大規模なデータセットを扱うことができる必要がある(例えば、Microsoft Academic Knowledge Graph. Retrieved May 10, 2022, from https://makg.org/rdf-dumpsから、標準的なTTLフォーマットで1.2 TBの記憶を必要とする80億以上のトリプルを有する)。これらの大きなデータセットは、特に、データベースの過去の状態に関連する履歴データ、例えば、CAD設計プロセスにおいて設計されているオブジェクトに適用された変形例の履歴を含むことができる。このような履歴データをデータベースに格納するには、データベース上で使用されるデータ格納方法による増分更新をサポートする必要がある。アプリケーションでは、そのようなデータベースは、例えばデータベースに格納されたリテラル値のためのフィルタリング及び表現マッチングの支持を提供しながら、効率的なインデックス戦略及びインバートリスト圧縮を備えるべきである。
【0004】
インデックス付きデータに対して正規表現マッチングを実行するための従来技術における既知のソリューションは、例えば、オンラインドキュメントRuss, “Regular Expression Matching with a Trigram Index or How Google Code Search Worked”, URL: https://swtch.com/~rsc/regexp/regexp4.html, January 2012又はhttps://www.postgresql.org/docs/current/pgtrgm.htmlに開示されている。そのような解決策は、データからのトリグラムの抽出と、トリグラムを含むデータの反転リストの各トリグラムについての記憶とを使用する。
【0005】
従来技術における既知のソリューションはまた、更新されると、反転リストのサイズが大きくなることを対象とする。
【0006】
文献Brown et al., “Fast Incremental Indexing for Full-Text Information Retrieval”, In Proceedings of the 20th VLDB Conference, 1994は、全文情報検索システムを開示している。このシステムは、コレクション全体を再インデックス化することなく、既存の文書コレクションに新しい文書を追加するための支持を提供する。情報検索システムは、永続オブジェクトストアの上に構築された従来の逆ファイルインデックスを使用する。
【0007】
文献Wang et al., “An Experimental Study of Bitmap Compression vs. Inverted List Compression”, SIGMOD, 2017は、一連の9ビットマップ圧縮法及び12の逆リスト圧縮法を比較するための包括的な実験的研究を提示している。これら21個のアルゴリズムを、空間オーバヘッド、解凍時間、交差時間、及び結合時間の観点から、異なる分布(一様、Zipf、及びMarkov)を持つ合成データセットと8個の実生活データセットについて実験した。
【0008】
これに関連して、読み書きグラフデータベースの辞書エンコーダのリテラル値を識別する1つ又は複数の逆リストを更新するための改善された手法が依然として必要とされている。
【発明の概要】
【0009】
したがって、読み書きグラフデータベースの1つ又は複数の逆リストを更新するためのコンピュータ実装方法が提供され、それぞれの逆リストは、リテラル値に含まれるトリグラムに関連付けられる。本方法は、リテラル値の組とIDの組とを含む辞書エンコーダを提供するステップを含み、それぞれのリテラル値はIDに関連付けられる。本方法は、各リテラル値について、リテラル値を構成するトリグラムを識別するステップをさらに含む。本方法は、識別された各トリグラムについて、第1のデータ構造において、識別されたトリグラムに関連する逆リストのヘッダを更新するステップと、トリグラムを含むリテラル値のIDの表現を含む指定ブロックを更新するステップとをさらに含み、それによって、識別されたトリグラムに関連する逆リストを更新する。
【0010】
本方法は、以下のうちの1つ又は複数を含むことができる:
・基準を満たすと、
第2のデータ構造における前記リテラル値のIDの表現を更新するステップであって、当該第2のデータ構造がヘッダに関連付けられる、更新するステップと、
前記指定されたブロックを初期化するステップと
を有する。
・前記指定されたブロックが満杯であるときに前記基準が満たされる。
・前記第2のデータ構造が、ツリー構造であり、前記第2のデータ構造内にある前記リテラル値の前記IDの前記表現を更新すると、前記ヘッダの前記ツリーのルートアドレスを更新するステップをさらに有する。
・前記第2のデータ構造がツリー構造であり、前記第2のデータ構造内の更新された前記リテラル値の前記IDの表現が、各ブロックは8つの32ビットワードの組である1つ以上のブロックを有する。
・前記第1のデータ構造が、任意の連想データ構造、好ましくはツリー構造である。
・前記第1のデータ構造がB+Treeであり、前記リテラル値の前記IDの表現を更新するステップが、B+Treeの内部ノードのIDのリファレンスを更新するステップと、B+TreeのリーフのIDを更新するステップとを有する。
・前記第1のデータ構造の前記指定されたブロックが、8つの32ビットワードの組である。
・前記8つの32ビットワードの各々は、以下のパターンのうちの1つに従って構成される:16 x 2ビット整数、8 x 3ビットの次に2 x 4ビット、2 x 4ビットの次に8 x 3ビット、8 x 4ビット、4 x 5ビットの次に2 x 6ビット、2 x 6ビットの次に4 x 5ビット、3 x 6ビットの次に2 x 7ビット、2 x 7ビットの次に3 x 6ビット、4 x 8ビット、1 x 10ビットの次に2 x 11ビット、2 x 11ビットの次に1 x 10ビット、1 x 8ビットの次に1 x 24ビット、2 x 16ビット、1 x 24ビットの次に1 x 8ビット、又は1 x 32ビット。
・前記組の最初の単語が、以下のうちの1つ以上のデータを備える:前記指定されたブロックが満杯であるかどうかを示すインジケータ、次の埋められる単語のインジケータ、及び/又は各単語のパターンのインジケータ。
・前記リテラル値の前記IDの前記追加された表現は、以下の間の差異を示す:前記識別されたトリグラムを含む第1のリテラル値の第1のID、及び前記識別されたトリグラムを含む第2のリテラル値の第2のID。
【0011】
上述の(逆リストを更新する)方法に従って、更新された逆リストを使用してクエリに応答する方法がさらに提供される。クエリに応答する方法は、クエリエンジンによってクエリを取得するステップを含み、このクエリは、リテラル数値に対する少なくとも1つのフィルタを含む。本方法は、1つ又は複数の更新された逆リストを取得するステップであって、該1つ又は複数の取得された逆リストは、該フィルタのリテラル値を構成するそれぞれの1つ又は複数のトリグラムに関連付けられている、取得するステップと、該1つ又は複数の取得された逆リストの部分集合を使用して、取得されたクエリに答えることとをさらに含む。
【0012】
クエリに応答する方法は、以下を含むことができる:
・前記1つ又は複数の取得された逆リストの前記1つ又は複数の前記部分集合は、前記1つ又は複数の取得された逆リストの中の最小カーディナリティの部分集合である。
【0013】
本方法を実行するための命令を含むコンピュータプログラムがさらに提供される。
【0014】
さらに、コンピュータプログラムが記録されたコンピュータ可読記憶媒体が提供される。
【0015】
メモリに結合されたプロセッサと、コンピュータプログラムが記録されたメモリとを備えるシステムがさらに提供される。
【図面の簡単な説明】
【0016】
【
図3A】本方法による逆数リストのヘッダの概略例を示す。
【
図3B】本方法による逆数リストのヘッダの概略例を示す。
【発明を実施するための形態】
【0017】
図1のフローチャートに関して、読み書きグラフデータベースの(1つ又は複数の、又はすべての)逆リストを更新するためのコンピュータ実装方法が提案される。逆リストは、読み書きグラフデータベースの辞書エンコーダのリテラル値を識別する。各逆リストは、リテラル値に含まれるトリグラムに関連付けられる。本方法は、リテラル値の組及びIDの組を含む辞書エンコーダを提供するステップを含み、ここで、(リテラル値の組の)それぞれのリテラル値は、(IDの組の)IDに関連付けられる。次いで、本方法は、各リテラル値について、リテラル値を構成するトリグラムを識別するステップを含む。識別された各トリグラムについて、第1のデータ構造において、本方法は、識別されたトリグラムに関連付けられた逆リストのヘッダを更新することと、指定されたブロックを更新することとを含む。指定されたブロックは、トリグラムを含むリテラル値のIDの表現を含む。これにより、本方法は、識別されたトリグラムに関連付けられた逆数リストを更新する。
【0018】
それ自体知られているように、グラフデータベースのための「辞書エンコーダ」は、データベースに記憶されたそれぞれのID(例えば、RDFトリプルとして記憶されたID)をそれぞれの内容にマッピングするマッピング、すなわち、符号化又はインデックス付けである。辞書は、RDFトリプル記憶にインデックスを提供するために使用され、非常に反復的であり得る情報の持続性を最適化するのに役立つ。具体的には、「データベースのリテラル値用辞書エンコーダ」とは、データベースに格納されているIDをリテラル値に関連付ける表を意味する。これにより、グラフデータベースへのリテラル値の記憶を最適化できる。
【0019】
それ自体さらに知られているように、「逆リスト」(又は等価的に反転リスト)は、各コンテンツ(例えば、リテラル値)からデータベース内の各記憶IDへのマッピングである。言い換えれば、逆リスト内の各エントリは、コンテンツに対応し、前記コンテンツを含むデータベースに記憶された複数のIDにそのエントリをマッピングする。
【0020】
「読み書きデータベースの辞書エンコーダのリテラル値を識別する逆リスト」とは、リテラル値ごとにマッピングを完全に定義し、それによってデータベース内の前記リテラル値のそれぞれのIDを識別する複数の逆リストを意味する。具体的には、複数の各逆リストは、リテラル値のトリグラムに関連付けられる(すなわち、そのリテラル値に含まれる)。リテラル値のトリグラムは、そのリテラル値の3バイト(例えば、結果)から構成される。「リテラル値を構成するトリグラムを識別する」ことによって、各リテラル値を複数のトリグラムに分割する。例では、前記複数は、1つのトリグラムのみを有してもよい(例えば、リテラル値が3文字/バイトのみを有する場合)。
【0021】
「トリグラムを含むリテラル値のIDの表現」とは、それによって、トリグラムに関連付けられた逆インデックスのエントリを意味する。言い換えれば、前記表現は、トリグラムを含むリテラル値のそれぞれの記憶されたIDの集合である。
【0022】
「逆リストを更新する」とは、コンテンツとデータベース内の記憶されたIDとの間のマッピングを作成すること、及び/又は既存の逆リストに新しい関連付けを追加することを意味する。そのような更新は、新しいデータがデータベースに挿入されるときに特に必要とされてもよい。
【0023】
本方法は、リテラル値をそれらの構成トリグラムによって処理するので、辞書エンコーダのリテラル値を識別する逆リストを更新するための改善されたソリューションを構成する。すなわち、リテラル値の構成トリグラムを識別し、識別したトリグラムに対応する逆リストを更新することにより、辞書エンコーダのリテラル値を識別する逆リストを更新する。これは、特に、更新されたデータベース上の読出しクエリに対するフィルタリングの適用を最適化し、トリグラムを構成することに関連する更新された逆リストを使用することによって、各々のフィルタは、大きな文字数に対する大きなパターンの代わりに、1つ以上のトリグラムパターンに適用され、それによってクエリのフィルタリング機能を改善する。
【0024】
「データベース」とは、検索及び検索のために編成されたデータ(すなわち、情報)の任意の集合(例えば、グラフ指向データベース)を意味する。当技術分野で知られているように、グラフ指向データベースは、グラフ理論を使用するオブジェクト指向データベースであり、したがって、ノード及び円弧を用いて、データを表現及び記憶することを可能にする。グラフは、ストア内のデータアイテムを、ノードとエッジの集合に関連付け、エッジは、ノード間のリレーションシップを表す。リレーションシップにより、ストア内のデータを直接リンクさせることができ、多くの場合、1回の操作で検索することができる。グラフデータベースは、データ間の関係を優先順位として保持する。これは、暗黙的な接続によってデータをリンクする他のデータベース・モデル(たとえば、リレーショナルデータベース)とは異なる。メモリ(例えば、永続メモリ)上に記憶されるとき、グラフデータベースは、コンピュータによる迅速な検索及び検索を可能にする。特に、グラフデータベースは、様々なデータ処理操作に関連する関係の迅速な検索、修正、及び削除のために構造化される。グラフ指向データベースはグラフデータベースとも呼ばれ、「グラフ指向データベース」及び「グラフデータベース」という表現は同義である。
【0025】
例では、グラフデータベースは、RDFグラフデータベースであってもよい。RDFグラフは、グラフの記憶及び検索に使用される従来のデータモデルである。RDFグラフは、有向のラベル付きグラフデータフォーマットである。このようなフォーマットは、ウェブにおける情報を表現するために広く使用されている。標準仕様は、情報のRDF表現をグラフとして指定するためにW3Cによって公開されており、例えば、”RDF 1.1 Concepts and Abstract Syntax”, W3C Recommendation 25 February 2014(又は、それに加えて、ドラフトバージョンRDF-star)を参照されたい。RDFグラフデータベースは、数十億のタプルを有することができ、例えば、Uniprotデータセットは、タンパク質配列及び機能情報のリソースである。
【0026】
使用される抽象構文のコア構造は、それぞれが述語を含むタプルの組である。そのようなRDFタプルの組は、RDFグラフと呼ばれる。ノードには、IRI、リテラル、空白ノードの3種類がある。
【0027】
例えば、RDFタプルは、ノード及び辺を含む3つ又は4つの要素を含むことができる。例では、各RDFタプル(又は各RDFタプルの要素)は、主語、述語、及び目的語を含むトリプルであってもよい。そのような実例では、RDFグラフは、それぞれのトリプルがノード―アーク―ノード結合として表される、ノード及び有向アーク図として視覚化されてもよい。代替的に、RDFトリプルは、主語及び目的語である2つのノードと、述語であるそれらを接続する円弧とによって視覚化されてもよい。
【0028】
例では、RDFタプルは、RDFクワッドであってもよい。RDFクワッドは、RDFトリプルにグラフラベルを追加することによって得ることができる。そのような例では、RDFタプルは、RDFグラフを含む。標準仕様は、RDFクワッド(Nクワッドとも呼ばれる)を指定するためにW3Cによって公開されており、例えば、“RDF 1.1 N-Quads, A line-based syntax for RDF datasets”, W3C Recommendation 25 February 2014を参照されたい。RDFクワッドは、RDFトリプルにグラフ名を追加することによって得ることができる。グラフ名は、空(すなわち、既定のグラフ又は無名のグラフ)又はIRI (すなわち、グラフIRI)のいずれかであってもよい。例えば、グラフの述語は、グラフIRIと同じIRIを有し得る。それぞれのクワッドのグラフ名は、クワッドがそれぞれのRDFデータ組の一部であるグラフである。RDFデータセットは、それ自体知られている(例えば、https://www.w3.org/TR/rdf-sparql-query/を参照)グラフの集合を表す。以下では、RDFタプル(又はタプル)という用語は、一方又は他方の使用が明示的に言及されない限り、RDFトリプル又はRDFクワッドを無差別に指す。
【0029】
グラフデータベースのクエリエンジンに考えられる最適化は、グラフデータベースがオープンワールド又はクローズドワールドと対話しているという仮定によって影響を受ける。それ自体知られているように、知識表現のために使用される論理の形式的システムにおいて、オープンワールド仮定(OWA)は、文の真理値が真であることが知られているかどうかにかかわらず真であり得るという仮定である。それは、クローズドワールドの仮定とは逆であり、真であると言う文は真であることが知られている。一方、クローズドワールドシステムは、すべて(例えば、フレーム上のスロット、OOクラス上の分野、又はDB内の列)を配置することを要求する。OWAはデフォルトで不完全な情報を想定しており、意図的に過小指定されており、他のユーザが再利用及び拡張できるようになっている。セマンティックウェブは、再利用可能な形態で知識及びデータが分散されたコンピュータ理解可能なウェブのビジョンであり、セマンティックウェブに対するW3C推奨であるRDFは、オープンワールド仮定に従う。これは、データモデリング及びデータ記憶におけるより大きな柔軟性を可能にする。ただし、SQL を使用したリレーショナルモデルと同様に、クローズドワールド仮定の制約は、データの格納方法に関する詳細を提供するため、クエリの最適化に役立つ。例えば、クエリはSPARQLクエリである。SPARQLは、RDF 組データをクエリするためのW3C推奨であり、RDF 組トリプルのトリプルパターンの上に構築されたグラフマッチング言語である。「RDFタプルのパターン」とは、RDFグラフによって形成されるパターン/テンプレートを意味する。言い換えれば、RDFタプルのパターンは、RDFグラフ(すなわち、RDFトリプルの集合)であり、グラフの主語、述語、目的語、又はラベルは、(クエリのための)変数によって置き換えることができる。SPARQL は、データがRDF としてネイティブに格納されているか、ミドルウェアを介してRDF として表示されているかにかかわらず、さまざまなデータソース間でクエリを表現できるRDF データ用のクエリである。SPARQLは主にグラフのホモモルフィズムに基づいている。グラフのホモモルフィズムは、2つのグラフ間のマッピングで、それらの構造を尊重する。より具体的には、隣接する頂点を隣接する頂点にマッピングする2つのグラフの頂点セット間の関数である。さらに、SPARQLには、サブグラフ抽出の一部としてリテラルをフィルタリングする組み込み関数が含まれている。最も一般的な関数述語は、正規表現一致チェックである。
【0030】
SPARQLには、必須及び任意選択のグラフパターンとその接続及び分離を照会する能力が含まれている。また、集約、サブクエリ、否定、表現による値の作成、拡張可能な値のテスト、抽出側RDFグラフによるクエリの制約もサポートしている。つまり、SPARQLクエリは、SPARQLで考えられる8つのトリプルパターンに応答する必要がある。このような8つのトリプルパターンには、(S, P, O)、(S, ?P, O)、(S, P, ?O)、(S, ?P, ?O)、(?S, P, O)、(?S, ?P, O)、(?S, P, ?O)、及び(?S, ?P, ?O)が含まれ、これらの変数の前に記号?が付されている。変数は、トリプルパターンの出力であり、SPARQLクエリの出力であってもよい。いくつかの実施形態では、変数は、選択クエリの出力であってもよい。SPARQLクエリの出力は、変数(例えば、総和のようなアグリゲータ)を使用して構築されてもよい。クエリ内の変数は、グラフ準同型(すなわち、クエリの結果を得るために必須の中間ノード)を構築するために使用されてもよい。いくつかの実施形態では、クエリ内の変数は、出力にも中間結果にも使用されないことがある。基本グラフパターン(BGP)は、上記で説明した8つのトリプルパターンのうちの1つであってもよい。また、BGPは、クエリ変数としてグラフのラベルを付加的に有するクワッドパターンであってもよい。本方法が、タプル、主語、及び目的語のグループの表現としてそれぞれ1つ又は複数の隣接行列を取得する特定の例では、1つの隣接行列上で照会されてもよい。言い換えれば、これらの特定の例では、BGPは、(S, O)、(S, ?O)、(?S, O)、及び(?S, ?O)のいずれかであってもよい。SPARQLは、いくつかのBGPと、場合によっては他の演算子とを結合することによって、より複雑なクエリを構築することができる。したがって、競合SPARQLエンジンは、少なくとも高速トリプルパターンソリューション及び効率的な結合方法を必要とする。さらに、クエリオプティマイザは、BGPに参加する中間結果の回数を最小限に抑える効率的な実行プランを構築する必要がある。
【0031】
例では、グラフデータベースは、既存のトリプルストアを有する。トリプルストア(RDFストアとも呼ばれる)は、当技術分野で知られているように、セマンティックエリを介してトリプルを記憶及び検索するための、専用に構築されたデータベースである。トリプルストアは、上述のSPARQLの8つの基本的なトリプルパターンに少なくとも答えることができる。それはまた、トリプルパターンと共にフィルタリング制約(例えば、「x>5」)に答えることができる。それ自体知られているように、フィルタリング制約は、グラフデータベース上のクエリに(例えば、SPARQLを介して)挿入されて、その条件節の満足度に基づいて前記クエリの成果をフィルタリングすることができる条件節である。このようなトリプルストアは、クエリエンジンによってSPARQLクエリが実行されるストレージエンジンであると考えられる。ストレージエンジン(「データベースエンジン」とも呼ばれる)は、当技術分野で知られているように、データベース管理システム(DBMS)がデータベースからデータを作成、読み取り、更新及び削除(CRUD)するために使用する基礎となるソフトウェアコンポーネントである。
【0032】
図1に戻って、ステップS10において、本方法は、1組のリテラル値及び1組のIDを含む辞書エンコーダを提供するステップを含む。「辞書エンコーダを提供する」とは、辞書エンコーダを方法に提供すること、又は同等に、辞書エンコーダを方法によって取得することを意味する。たとえば、そのような取得又は提供は、その辞書エンコーダを(たとえば、オンラインデータベース又はオンラインクラウドから)ダウンロードすること、又はメモリ(たとえば、永続メモリ)から辞書エンコーダを取り出すことのいずれかを意味するか、又は備えることができる。
【0033】
ステップS20において、本方法は、提供された辞書エンコーダの各々のリテラル値を構成する(例えば、1つ以上の)トリグラムを識別する。上述のように、リテラル値の各トリグラムは、そのリテラル値の3バイトで構成される。言い換えれば、トリグラムは3バイトのデータである。例では、UTF-8は、保存されるストリングを符号化するために使用されてもよい。規格によれば、そのような例では、コード点は、1~4バイト(含まれる)のストレージを使用する。したがって、トリグラムは、コード点の最後のバイトと、次のコード点の最初の2バイトとすることができる。ステップS20を実行すると、本方法は、その組のリテラル値のための複数のトリグラムを取得する。
【0034】
ステップS30において、本方法は、第1のデータ構造内の識別されたトリグラムに関連する逆リストのヘッダを更新する。「ヘッダ」とは、それぞれの逆リストのヘッダを意味する。情報技術及びコンピュータ科学においてそれ自体知られているように、それは、格納又は送信されるデータのブロックの先頭に配置される補足データ、ここでは逆リストを意味する。ヘッダは、主データの一部であり、ここでは、主データを処理するために必要なメタデータ又は他の情報を運ぶ逆リストである。一般に、ヘッダは、実際のデータの前に配置され、実際のデータの開始をマークする。ヘッダのメタデータは、サイズ、関連するトリグラムへの参照、次の情報が格納されるアドレス、最後に格納された要素の複製、及び/又は逆リストの最新の変形のタイムスタンプを含むことができる。ヘッダのメタデータに格納されるサイズは、割り当てられたサイズと使用されたサイズの2つのサイズを含むことができる。「逆リストのヘッダを更新する」とは、トリグラムのヘッダが存在しない場合、第1のデータ構造内に逆リストのヘッダを作成すること、又は代わりに、トリグラムの既存のヘッダのメタデータを更新することを意味する。
【0035】
ステップS40において、本方法は、第1のデータ構造内のトリグラムを含むリテラル値のIDの表現を含む指定されたブロックを更新する。指定されたブロックを更新し、それによって、識別されたトリグラムに関連付けられた逆リストを更新することによって、本方法は、識別されたトリグラムに関連付けられた逆リストを更新する。本方法は、各リテラル値を構成する各トリグラムに対してこれを実行する。「リテラル値のIDの表現を含む指定されたブロックを更新する」とは、指定されたブロックが存在しない場合に、指定されたブロックについて第1のデータ構造を作成すること、又は代替的に既存の表現を更新することを意味する。指定されたブロックは、識別されたトリグラム、したがってヘッダと関連付けられる。
【0036】
例えば、本方法は、ステップS20、S30、及びS40を順次実行し、それによって、本方法は、辞書エンコーダのための逆リストを段階的に更新する。文字通り、本方法は、リテラル値のバッチに対してステップS20、S30、及びS40を実行することができる。言い換えれば、本方法は、リテラル値の第1のバッチについて辞書を提供し、次いで、第1のバッチ(すなわち、ステップS20)内のすべてのリテラル値について複数のトリグラムを識別し、次いで、複数のトリグラムごとにステップS30及びS40において更新を実行することができる。
【0037】
これにより、第1のデータ構造内の各トリグラムのそれぞれのヘッダ及び指定されたブロックを更新することによって、辞書エンコーダの文字列を識別するリストを更新する。第1のデータ構造は、永続メモリ上の記憶のデータ構造を定義し、それによって、「第1のデータ構造内のヘッダ/ブロックを更新する」ことによって、第1のデータ構造に従って構成される前記永続メモリ内のそれぞれのメモリブロックを更新することを意味する。
【0038】
例では、第1のデータ構造は、任意の連想データ構造、好ましくはツリー構造である。コンピュータサイエンスの分野でそれ自体知られているように、連想データ構造、例えば連想配列、マップ、シンボルテーブル、又は辞書は、可能性のある各キー/IDが集合内に最大で一度現れるように、(キー、値)又は(ID、値)一組の集合を記憶する抽象データ型である。汎用辞書エンコーダでは、カップルの連想マップ(ID、「リテラル値」)を形成し、本方法は、カップルを含む逆リスト(「トリグラム」、IDの逆リスト)の別の連想マップを更新する。ここで、IDの逆リストは、各トリグラムに関連付けられた複数のIDを収集する。
【0039】
例では、第1のデータ構造はB+Treeであってもよい。例えば、リテラル値のIDの表現を更新することは、B+Treeの内部ノード内のIDのリファレンス(すなわち、ポインタ)を更新することと、B+Treeのリーフ内のIDを更新することとを含む。本質的に知られているように、B+Treeは、ツリーの中間ノードが値を含まず、鍵とポインタのみを含む、ツリー状の典型的な連想マップである。一方、値はB+Treeのリーフに保持されている。例えば、本方法は、第1のデータ構造のB+Treeの内部のための鍵として各々のトリグラムを使用し、その内部ノード内の基準を更新することができる。内部ノード内の更新された基準は、B+Treeのリーフを指し示してもよく、このリーフは、そのトリグラムについての数値、すなわち、逆の一覧を記憶するように構成される。内部ノード内の更新された基準は、さらに、そのノードの子ノードを指し示すことができる。本方法は、B+Treeのリーフ内のIDを更新することによって値を更新する。参照/IDを更新することは、その参照/IDが存在しない場合、その参照/IDを追加することを意味する。
【0040】
例では、ヘッダ及び指定されたブロックは、固定サイズであってもよい。「固定サイズのヘッダ/指定ブロック」とは、ヘッダ及び/又は実際のデータの更新時に、ヘッダのサイズ(すなわち、メタデータのサイズ)又は指定ブロックのサイズが変更されないことを意味する。このような例は、第1のデータ構造がB+Treeであり、B+Treeが固定サイズ値で特に効率的である場合に特に効率的である。これにより、B+Treeのリーフにおいて、固定サイズのヘッダと指定ブロックを固定サイズ値として使用することができる。
【0041】
例では、第1のデータ構造の指定されたブロックは、8つの32ビットワードの組であってもよい。それによって、そのような例によれば、指定されたブロックのサイズは32バイト(すなわち、256ビット)である。代替として、第1のデータ構造の指定されたブロックは、9つの28ビットワードの組を備え得、指定されたブローは、32バイトサイズである。さらに代替的に、第1のデータ構造の指定されたブロックは、8つの64ビットワードの組を備えることができ、指定されたブローは64バイトサイズである。しかしながら、本方法の好ましい例では、28ビットインデックスは、リテラルインデックスとして32ビット整数を使用するインメモリグラフデータベースと互換性がないので、第1のデータ構造は、論じたように8つの32ビットワードの組であってもよい。さらに、64ビットのインデックスを使用すると、メモリグラフデータベースとして32ビット整数に適用すると、ストレージスペースが無駄になる。そのような選択肢、すなわち、8つの32ビットワード又は32バイトブロックの組は、ブロックが完全にキャッシュライン(現行の最新のプロセッサでは64バイトである)内にあるほど十分に小さく、それによって、逆リストを更新し、前記逆リストを使用して受信クエリに応答するためのキャッシュフレンドリな方法を提供するので、改善された解決策をさらに構成する。このような好ましい例では、本方法は、最初の単語から8つの単語の組を更新することによって、指定されたブロックを更新することができる。
【0042】
例では、上記で説明した8つの32ビットワードの各々は、以下の(16)パターンのうち1つに従って構成されてもよい:16 x 2ビット整数、8 x 3ビットの次に2 x 4ビット、2 x 4ビットの次に8x3ビット、8 x 4ビット、4 x 5ビットの次に2 x 6ビット、2 x 6ビットの次に4 x 5ビット、3 x 6ビットの次に2 x 7ビット、2 x 7ビットの次に3 x 6ビット、4 x 8ビット、1 x 10ビットの次に2 x 11ビット、2 x 11ビットの次に1 x 10ビット、1 x 8ビットの次に1 x 24ビット、2 x 16ビット、1 x 24ビットの次に1 x 8ビット、又は1 x 32ビット。これらのパターンの各々は、指定されたブロック内の32ビットワードが1つ又は複数の整数によってどのように埋められ得るかを定義する。本方法は、代替的に、32ビットワードを満たす任意の他のパターンを使用してもよい。パターンの各々は、等価的に圧縮パターンと呼ばれ得る。
【0043】
例では、本方法は、組の各32ビットワードについて異なるパターンを決定することができる。本方法は、そのパターンを自動的に、及び/又は1つもしくは複数の事前に定義された規則に従って、及び/又は記憶されるデータ(例えば、ID)のサイズに関して決定することができる。例えば、本方法は、パターンに関連して各パターンの値を属性付けする表内のパターンを順序付けることができる。帰属された値は、等価的にセレクタと呼ばれ得る。次いで、本方法は、各単語について、記憶されるデータのサイズに一致する表内の第1のセレクタを選択することができる。
【0044】
例では、(8つのワードの)組の第1のワードは、以下のうちの1つ又は複数の(メタ)データを含む:指定されたブロックが満杯であるかどうかのインジケータ、満杯である次のワードのインジケータ、及び/又は各ワードのパターンのインジケータ。そのような例では、第1の単語の充填パターンは、表に列挙されたパターンとは異なり得、残りの7つの単語は、表に列挙されたパターンに従って充填される。指定されたブロックが満杯であるかどうかのインジケータは、ブロックが満杯でないときの第1の値(たとえば、0)と、ブロックが満杯であるときの第2の値(たとえば、1)とを有する第1のワードの情報の最初の1ビットであってもよい。これは、新しいデータが指定されたブロックに記憶され得るかどうかを迅速に(すなわち、組の最初のビットを読み取ることによってのみ)決定する方法を改善する。充填される次のワードのインジケータは、指定されたブロックの次の空きワードを参照する整数であってもよい。各ワードのパターンのインジケータは、上述したようなセレクタであってもよい。これは、第1のワードのメタデータがセレクタテーブルを使用して他の7つのワードの圧縮パターンを定義し、指定されたブロックを更新する方法をさらに導くので、ブロックに記憶されたデータ(例えば、ID)の圧縮を改善する。
【0045】
例では、リテラル値のIDの追加された表現は、提供された辞書内のリテラル値のそれぞれのIDを含む。代替的に、リテラル値のIDの追加された表現は、識別されたトリグラムを含む第1のリテラル値の第1のIDと、識別されたトリグラムを含む第2のリテラル値の第2のIDとの間の差を示す。そのような例では、本方法は、任意の2つの連続するID間の差分(すなわち、デルタ)を記憶する。方法は、リテラル値のIDを、第1の単語のための提供された辞書に記憶することができる。これは、差を記憶するために使用されるビットがより少なくてすむため、改善された解決策を構成する。
【0046】
例では、本方法は、基準を満たすと、第2のデータ構造内のリテラル値のIDの表現を更新するステップと、指定されたブロックを初期化するステップとをさらに備えてもよい。第2のデータ構造は、ヘッダ(又は同等にフルヘッダ)に関連付けられ得る。代替的に又は追加的に、例えば、ここで更新された第1のデータ構造は、関連する第2のデータ構造へのポインタを有することができる。これにより、各トリグラムについて、それぞれの第1のデータ構造とそれぞれの第2のデータ構造とが相互に関連付けられる。例では、そのような相互関連付けは、第2のデータ構造のオフセット(すなわち、メモリアドレス)への参照を含むことによって(最初のデータ構造の)ヘッダとして取得され得、一方、本方法は、第2のデータ構造内の同じ場所を参照する2つのヘッダがないことを保証する。
「第2のデータ構造におけるリテラル値のIDの表現を更新する」とは、リテラル値のIDの表現を含む第2のデータ構造を作成すること、又は代替的に既存の表現を更新することを意味する。例では、本方法は、基準が満たされたときに、第1のデータ構造の更新された指定ブロックをプッシュする(すなわち、複製する)ことによって、第2のデータ構造におけるIDの表現を更新することができる。例では、本方法は、指定されたブロックをデフォルト値(たとえば、0)に設定することによって、又は代わりに、指定されたブロックに帰属するそれぞれのメモリを解放することによって、指定されたブロックを初期化することができる。
【0047】
例では、この基準は、ヘッダの指定されたブロックが満杯であるときに満たされる。言い換えれば、本方法は、第1のデータ構造内の指定されたブロックをフルになるまで更新し、次いで、指定されたブロックのコンテンツを関連する第2のデータ構造にプッシュし、指定されたブロックを初期化する。本方法は、第2のデータ構造をメモリ、いわゆる「二次領域」に記憶することができる。この用語では、第1のデータ構造の指定されたブロックは、方法が最初に、より小さい(固定サイズの)作業領域上のIDの表現を更新するので、「作業領域」と呼ばれることがある。そのような例は、第1のデータ構造が、リーフ(ヘッダ及び指定されたブロックが固定サイズのものである)又はリンクされたリストに固定サイズ値を記憶するB+Treeであるときに特に効率的である。概して、逆リストは、新しいリテラル値がデータベースに追加され、それによって、提供された辞書エンコーダが追加され得る、(例えば、書き込みデータベース内の)変種サイズの値を有する。本方法は、可変サイズの逆リストを、固定サイズのそれぞれの第1のデータ構造(すなわち、固定サイズのヘッダ及び指定されたブロック)と、ヘッダを参照する二次領域内の可変サイズの第2のデータ構造とに分離することによって、B+Treesを使用することを可能にすることによって、改善された解決策を構成する。
【0048】
例では、第2のデータ構造はツリー構造であってもよい。そのような例では、本方法は、第2のデータ構造内のリテラル値のIDの表現を更新すると、ヘッダ内のツリー構造のルートアドレスを更新することをさらに含む。ルートアドレスは、第2のデータ構造のメモリアドレスを参照するように構成される。
【0049】
さらに、第2のデータ構造がツリー構造である例では、第2のデータ構造におけるリテラル値のIDの追加された表現は、1つ又は複数のブロックを備え得、各ブロックは、8つの32ビットワードの組である。そのような実例では、それぞれのブロックは、第2のデータ構造のツリーのノードのためのメモリブロックであってもよい。あるいは、第2のデータ構造は、値(すなわち、ブロック)がツリーのリーフにのみ保存されるB+Treeであってもよい。各ブロックが8つの32ビットワードの組であり得る(それによって、各ブロックが32バイトブロックである)という事実は、前記指定されたブロックとして8つの32ビットワードの組を備える指定されたブロックが、プッシュされると、第2のデータ構造のブロックに完全に適合することができるとき、例の組み合わせにおいて特に効率的な解決策を構成する。それによって、第2のデータ構造は、ブロックごとに、及び各ページが1つ又は複数のブロックを備えるページ内に書き込まれ得る。ツリーノード内のブロックの個数は、作成時に固定されてもよく、2のべき乗、1とブロックサイズによるページサイズの比率であると想定されてもよい。したがって、ページは、固定個数のノードを含むことができ、それぞれのノードは、単一のページ上に記憶することができる。
【0050】
本発明はまた、上述の方法に従って更新された逆リストを使用してクエリに応答する方法に関する。クエリに応答する方法は、クエリエンジンによってクエリを取得することを含む。クエリには、リテラル値のフィルタが少なくとも1つ含まれている。次いで、本方法は、1つ又は複数の更新された逆リストを取得する。本方法は、オンラインクラウドを介して、又はローカルメモリにアクセスすることによって、1つ又は複数の更新された逆変換されたデータを取得(すなわち、提供)することができる。1つ又は複数の得られた逆リストは、フィルタのリテラル値を構成するそれぞれの1つ又は複数のトリグラムに関連付けられる。次いで、本方法は、1つ以上の得られた逆リストの部分集合を用いて、得られたクエリに答える。これは、クエリに答えるためのアルゴリズムの複雑さが(辞書エンコーダが提供される)データ組の大きさに対して線形であるので、改善された解決策を構成する。さらに、逆数トリグラムリストを使用すると、ストリングフィルタリングアスペクトを使用してSPARQL クエリを実行するときのCPUリソース消費量を減らすことができる(最大1000x の因子)。
【0051】
例では、1つ又は複数の取得された逆リストのうちの1つ又は複数の部分集合は、1つ又は複数の取得された逆リストの中の最小カーディナリティの部分集合である。これは、最小部分集合上のクエリに回答する方法として、クエリ回答方法の有効性を向上させる。
【0052】
本方法は、コンピュータに実装される。これは、本方法のステップ(又は実質的に全てのステップ)が少なくとも1つのコンピュータ又は任意のシステムによって実行されることを意味する。したがって、本方法のステップはコンピュータによって、場合によっては完全に自動的に、又は半自動的に実行される。例では、方法のステップのうちの少なくともいくつかのトリガがユーザ/コンピュータ対話を介して実行されてもよい。必要とされるユーザ/コンピュータ対話のレベルは予測される自動化のレベルに依存し、ユーザの希望を実施する必要性とバランスをとることができる。例では、このレベルがユーザ定義及び/又は事前定義されてもよい。
【0053】
本方法のコンピュータ実装の典型的な例は、この目的のために適合されたシステムを用いて方法を実行することである。システムはメモリに結合されたプロセッサと、グラフィカルユーザインタフェース(GUI)とを備えることができ、メモリには、本方法を実行するための命令を含むコンピュータプログラムが記録されている。メモリはまた、データベースを記憶してもよい。メモリはそのような記憶装置に適合された任意のハードウェアであり、場合によっては、いくつかの物理的に別個の部分(例えば、プログラムのための部分、及び場合によってはデータベースのための部分)を備える。
【0054】
図2は、システムがクライアントコンピュータシステム、例えばユーザのワークステーションであるシステムの一例を示す。
【0055】
この例のクライアントコンピュータは、内部通信バス1000に接続された中央処理装置(CPU)1010と、やはりバスに接続されたランダムアクセスメモリ(RAM)1070とを備える。クライアントコンピュータには、さらに、BUSに接続されたビデオRAM1100に関連するグラフィカルプロセッシングユニット(GPU)1110が設けられている。ビデオRAM 1100は、当技術分野ではフレームバッファとしても知られている。大容量記憶装置コントローラ1020は、ハードドライブ1030などの大容量記憶装置へのアクセスを管理する。コンピュータプログラム命令及びデータを有形に具現化するのに適した大容量メモリデバイスは、例として、EPROM、EEPROM、及びフラッシュメモリデバイスなどの半導体メモリデバイス、内部ハードディスク及びリムーバブルディスクなどの磁気ディスク、光磁気ディスクを含む、すべての形態の不揮発性メモリを含む。前述のいずれも、特別に設計されたASIC(特定用途向け集積回路)によって補足されるか、又はその中に組み込まれてもよい。ネットワークアダプタ1050は、ネットワーク1060へのアクセスを管理する。クライアントコンピュータは、カーソル制御デバイス、キーボードなどの触覚デバイス1090も含むことができる。ユーザがディスプレイ1080上の任意の所望の位置にカーソルを選択的に位置決めすることを可能にするために、カーソル制御装置がクライアントコンピュータ内で使用される。さらに、カーソル制御装置はユーザが様々なコマンドを選択し、制御信号を入力することを可能にする。カーソル制御装置は、システムに制御信号を入力するための多数の信号発生装置を含む。典型的にはカーソル制御装置がマウスであってもよく、マウスのボタンは信号を生成するために使用される。代替的に又は追加的に、クライアントコンピュータシステムは、センシティブパッド及び/又はセンシティブスクリーンを含むことができる。
【0056】
コンピュータプログラムはコンピュータによって実行可能な命令を含むことができ、命令は、上記装置に本方法を実行させるための手段を含む。プログラムは、システムのメモリを含む任意のデータ記憶媒体に記録可能であってもよい。プログラムは例えば、デジタル電子回路において、又はコンピュータハードウェア、ファームウェア、ソフトウェアにおいて、又はそれらの組み合わせにおいて実装されてもよい。プログラムは装置、例えば、プログラマブルプロセッサによる実行のための機械可読記憶デバイスに有形に具現化された製品として実装されてもよい。方法のステップは入力データに対して動作し、出力を生成することによって、方法の機能を実行するための命令のプログラムを実行するプログラマブルプロセッサによって実行されてもよい。したがって、プロセッサはプログラム可能であり、データ記憶システム、少なくとも1つの入力デバイス、及び少なくとも1つの出力デバイスからデータ及び命令を受信し、それらにデータ及び命令を送信するように結合されてもよい。アプリケーションプログラムは、高レベルの手続き型又はオブジェクト指向プログラミング言語で、あるいは必要に応じてアセンブリ言語又は機械語で実装することができる。いずれの場合も、言語は、コンパイル言語又はインタープリタ言語であってもよい。プログラムはフルインストールプログラムであってもよいし、更新プログラムであってもよい。システム上にプログラムを適用すると、いずれにしても、本方法を実行するための命令が得られる。コンピュータプログラムは、代替的に、クラウドコンピューティング環境のサーバ上に記憶され、実行されてもよく、サーバは、1つ以上のクライアントとネットワークを介して通信している。そのような場合、処理装置は、プログラムに含まれる命令を実行し、それによって、方法をクラウドコンピューティング環境上で実行させる。
【0057】
ここで、上述した本発明の実施例の実装の例を説明する。
【0058】
実装はグラフデータベースに関連している。特に、実装が実現する技術分野は、グラフデータベースが、そのような組み込みフィルタを使用してSPARQLクエリの実行を最適化するために、グラフデータの文字ノードをどのように索引付けするかである。より具体的には、本実装は、整数系列圧縮技術の全般的分野の索引付け技術(例えば、Wang et al., “An Experimental Study of Bitmap Compression vs. Inverted List Compression”, SIGMOD 2017, and Anh and Moffat, “Inverted index compression using word-aligned binary codes”, Information Retrieval, 8(1):151-166, 2005.で議論される)及びグラフデータベース及びRDFデータに対するそのアプリケーションに関連する。
【0059】
本実装は、さらに、インメモリグラフデータベース、すなわち、クエリ及び読み取りクエリを変更することを可能にし、データベースの過去の状態に対して読み取りクエリを実行する能力を有するRDFデータベースに関連する。これにより、実装のインデキシング構造は、増分更新をサポートし、データベース状態の更新の大きさを最小化する。特に、この実装は、エントリーが除去されない追加専用データベース上のリテラル値クエリを最適化することに関連し得、それによって、データベースの大きさは、経時的に厳密に増加している。
【0060】
インデックス付きデータに対して正規表現マッチングを実行できるようにするために、最新技術は、データからのトリグラムの抽出と、トリグラムを含むデータの反転リストの各トリグラムについての記憶とを使用している。インデックスを更新する必要がある場合に直面する問題は、インデックスを増加させる場合にはさらなる発展を制限し、抑制することは、逆リストを増加させる能力を必要としない。データベース内に格納された反転リストの場合、基礎となるファイル構造は、特に履歴グラフデータベースに対して、リンクされたリストの更新及び割り当ての複雑さによる書き込み増幅を生じさせることなく、良好な性能を有するこの拡張能力を提供する必要がある。
【0061】
それによって、実装は、RDFリテラルの空間効率の良いインデックス付けに向けられ、正規表現(例えば、含む)を用いた最適化されたフィルタリングを可能にし、アペンド専用データベースにおけるリテラル識別子としての32ビット整数の使用と互換性がある。そのようなインデックス化は、書き込み増幅を低減することによって、ディスクスペースに関して、高速な検索、及び効率的な増分更新を可能にする。
【0062】
実装は、SimpleBlock16と呼ばれるインデックス方法を導入し、整数シーケンスコンプレッションの全般的な分野で行われる。以下に詳述するように、本実装は、8つの32ビットワードのブロックを使用する圧縮スキーマを導入する。実装は、第1のワードを使用して、以下でセレクタと呼ばれる7つの4ビット値を記憶し、それぞれ対応するセレクタに応じて、次の7つのワードにできるだけ多くの小整数を記憶する。セレクタに応じて、ワードは、1つの32ビット整数、又は2つの16ビット整数、又は4つの8ビット整数などを記憶し得る。各セレクタは4ビットを取るので、16の可能性がある。セレクタの詳細については後述する。
【0063】
グラフデータベースは、各トリグラムを含むすべてのリテラルのインデックスを保持する。一次データ構造は、トリグラムを鍵とし、値として反転リストを含む古典的なB+Treeであり、ヘッダと、作業領域と呼ばれるブロックとを含む。この作業領域は、実際には、逆リストの最後の整数を含む。作業領域が拡大反転リストで満杯になると、実装はセカンダリエリアと呼ばれるファイルにブロックをプッシュし、ヘッダに格納されているファイルのオフセットを参照する。
【0064】
実装で使用される32バイトブロックは、キャッシュライン(64バイト)に完全に適合するのに十分に小さく、したがって、圧縮及び解凍はキャッシュフレンドリである。中程度のサイズ(1MBから10MBのタートルファイル)の更新では、多くのトリグラムが反転リストを更新する必要があるので、B+Treeがほとんど完全に書き直されることを実験は示しているが、作業領域は、ページ単位でブロック単位で書き込まれる二次ファイル領域上の書き込みを増幅することを回避する。書き込み増幅を回避することにおけるそのような改善は、作業領域の存在が、二次ファイルを書き込む(すなわち、更新する)必要性を低減するのに役立つという事実にも基づく。これは、逆数リストの変化が小さいサイズであり、したがって、完全なヘッダのみが修正される、稀なトリグラムの場合である。逆数リストの変化のサイズが大きい、より頻繁なトリグラムの場合、ページ内のセカンダリファイルにブロック単位で新しい変化が書き込まれるため、ページが書き込まれたブロックで満杯になると、変化されることはない。これにより、ページの書き換えが頻繁に行われないようにすることができる。
【0065】
この実装は、ストリングフィルタリング機能を持つSPARQLクエリを実行するときに、最大1000xの因子までCPUリソース消費を低下させるのに役立つ逆数トリグラムリストを使用することによって、改善されたソリューションを提供する。さらに、実装の具体的な圧縮方式は、グラフデータベース内のデータ構造が、書き込み増幅問題を引き起こさないことを保証する。
【0066】
SimpleBlock16圧縮方法の実装は、できるだけ多くの整数を8個の32ビット整数のブロックにまとめる。ブロックの最初の要素はセレクタテーブルと呼ばれ、次の7つの整数には圧縮データが含まれる。
【0067】
ゼロメモリの取得は、ほとんどのオペレーティングシステム(OS)で最も単純な割り当て方法であるため、実装は、初期化中に空の整数リストが80のブロックで表されるようにする。
【0068】
実装は、ブロックが満杯であるかどうかを試験するための方法、ブロック内にそのための余地がある場合にデータ(例えば、整数)を追加するための方法を提供する。実装は、さらに、ブロック内に追加されたデータ(例えば、整数)、それらの計数及びそれらの数値を検索するためのメソッドを提供することができる
【0069】
実装は、辞書エンコーディング(リテラルのストリング値をインデックスと呼ばれる32ビット整数に変換するhttps://en.wikipedia.org/wiki/Dictionary_coder))に基づいて、インメモリグラフデータベースコンプレッションスキームで実装する。辞書自体は、当技術分野の任意の方法、例えばB+Treesを用いて得ることができる。
【0070】
さらに、辞書レベルでは、実装は、指定されたトリグラムを含むすべてのリテラルインデックスを取得するメソッドと、トリグラム上の組式に対して、セット式('abc' AND 'bcd') OR('ABD')などの式に一致するすべてのリテラルインデックスを取得するメソッドを提供する。後者の方法は、前者の方法に基づくことができる。
【0071】
圧縮方式
実装は、それぞれのセレクタがどのように解凍を駆動するかを記述する表を使用することができる。そのような表の例は、以下の表1である。
【表1】
【0072】
圧縮及び解凍の実装は、Simple9法と同じアルゴリズムに従うが(文献Anh and Moffat, “Inverted index compression using word-aligned binary codes”, Information Retrieval, 8(1):151-166, 2005に従い、参照により本明細書に組み込まれる)、しかし、別のセレクタテーブルを有する。実装は、整数の内部ではなく最初の整数にセレクタを格納する。これは、ブロックが、どの整数が書き込み可能であるかを追跡しなければならず、その情報は、セレクタの最後の利用可能な4ビットに記憶されることを意味する。
【0073】
実装用の辞書は、厳密に増大する様式でインデックスを予約し、そのため、トリグラムを含むリテラルのインデックス間のデルタをトリグラムの逆数リストに実装記憶する。極めて稀なトリグラムでは、実装は、28ビット以上を必要とする数値を記憶することがある。テーブル2は、実装が32ビットの記憶を保証する方法の実例を示す。
【表2】
【0074】
たとえば、実装がインデックス10、12、15、440、449、及び1550 を格納する必要があるとする。したがって、デルタは、10、2、3、425、9、及び1101である。第1の整数投入(10)は4ビットを必要とし、4ビット数を受け入れる第1のセレクタは3であるので、セレクタ3(表1による)が使用される。そして、2及び3は、同じ整数で、セレクタ3によって受け付けられる。425の場合、投入は10ビットを必要とし、セレクタテーブル(表1)に従って4個の整数を単一の整数に記憶する解決策はないので、実装は、10ビット整数を可能にする第1の整数であるセレクタ10を用いて、第1の3を有するブロックの第1の整数を可能にし、第2の整数に425を入れる。次いで、デルタ9及び1101について、両方が11ビットに適合する場合、実装は、第2の整数を終了するセレクタ10を選択する。次の整数は、第3の整数を必要とし、セレクタの新しい選択を伴う。
【0075】
実装がブロックの7つの整数すべてを満たす場合、ブロックは満杯であり、ブロックを二次領域にプッシュする必要がある。プッシュ後、作業領域のブロックは初期値にリセットされてから、次の整数が挿入される。
【0076】
逆数リストは、概念的には、最後のブロックを除く全てのブロックのリストである。逆数リストのブロックの正確な記憶スキームを以下に詳述する。
【0077】
データ構造
所与のトリグラムのすべてのインデックスをリストすることができるようにするために、実装は、逆数リストを表すデータ構造にトリグラムを関連付けるデータ構造を使用する。そのようなデータ構造は、B+Treeであり得るが、メモリ使用量対CPUコストの通常のトレードオフと共に、任意の連想データ構造が、本明細書で使用されてもよい。B+Treeは、'ab.' (ドットは任意の文字を意味する)のような正規表現のコストを評価するために、ある範囲のトリグラム上の統計にアクセスする能力を提供することができる。他の連想データ構造は、その能力なしに、より速いアクセス又は更新を提供することができる。
【0078】
逆数リストの場合、実装は、B+TREEノードに、整数カウント及びブロックカウントの両方に関して、リストサイズを有するヘッダを入れる。実装はさらに、B+Treeに入れられ、ヘッダに関連して、作業領域と呼ばれるブロック、実際には逆数リストストレージの最後のブロックを入れる。ヘッダと(関連する)作業領域の結合は、フルヘッダと呼ばれる。
【0079】
実装は、逆数リストのヘッダに格納されたルートアドレス(すなわち、二次領域における相殺)を用いて、二次領域をツリーに編成する。ツリーノード内のブロックの個数は、データベース作成時に固定され、ブロックサイズによるページサイズの比率を1とすると、2のべき乗であると仮定される。したがって、ページは、固定された個数のノードを含むことができ、それぞれのノードは、単一のページに記憶される。
【0080】
ツリーの分岐係数は、ノードの大きさに依存する。内部ノードは、リーフと同じ固定長であるが、ブロックではなく、アドレス(オフセット)を格納する。ツリーの深さは、ブロックカウント(及びノードサイズ)の関数である。すべてのリーフは、根から同じ距離にあり、それによって、ツリーは、B+Treeのように、平衡を保ち、根から成長する。
【0081】
本実装によれば、第2のデータ構造はツリー構造である。そのような場合、
図3Aは、7つのブロックを有する二次領域内のリーフ3020を指すヘッダ3010を提示する。
図3Bは、リーフ3050及び3060への2つのポインタを有する中間ノード3040を指し示すヘッダ3030を示す。リーフ3050は既に満杯であり、リーフ3060は他の不完全である。ツリーの深さは、中間ノード3060が完了すると増大し、32個のポインタがリーフを完了する。
【0082】
書き込み増幅制御
逆数リストツリーのリーフのみを含むセカンダリファイルページは、すべてのリーフが満杯になると、変更されずに保持される。リーフの中のブロックの数が少ないほど、データベースの最も可能性の高い修正は、少数の非完全なリーフに触れる。しかしながら、より大きなリーフのサイズは、完全な逆数リストにアクセスすることが、より少ないページを読み出すことを必要とすることを意味する。実装は、ツリーのリーフにおけるブロック数を、いくつかの実験の後に、より多数の非フルリーフにアクセスすることと、より多くの頁を読み取ることとの間のトレードオフのために、8ブロック/リーフに設定した。
【0083】
クエリ実施概況
以下の実験は、RDFリテラル上のトリグラムの逆数リストの使用を実証する。CHEMBL データセットをインポートし、SPARQLクエリを実行した:
【数1】
クエリ結果は、以下の表3のとおりである。
【表3】
【0084】
逆の一覧がない場合、クエリは、rdfs:label述語(述語の大きさが線形である)を用いてすべてのトリプルの抽出を実行し、フィルタに一致するリテラルオブジェクトを用いてそれらをフィルタリングすることができる。あるいは、逆リストなしで、クエリは、フィルタに一致するすべてのリテラルをフィルタリングし(辞書の大きさが線形である)、rdfs:label述部及び正確な主語を用いてトリプルを取り出すことができる。いずれの場合も、複雑さは、データ組の大部分のサイズに対して線形である。
【0085】
逆数リストを用いて、いくつのリテラルが所望のトリグラムの各々を含むかについての情報を抽出し(例では、’Asp’、 ’spi’、 ’pir’、 ’iri’、 ’rin’)、最小リストを取得し、最小トリグラムリストのサイズに対して線形のアルゴリズム複雑さを容易に取得する。
【手続補正書】
【提出日】2024-01-17
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
読み書きグラフデータベースの1つ以上の逆リストを更新するためのコンピュータ実装方法であって、各々の逆リストは、リテラル値に含まれるトリグラムに関連付けられており、
リテラル値の組とIDの組とを備え、それぞれのリテラル値がIDに関連付けられている辞書エンコーダを提供するステップ(S10)と、
リテラル値毎に、
リテラル値を構成するトリグラムを識別するステップ(S20)と、
識別された各トリグラムについて、及び第1のデータ構造において
前記識別されたトリグラムに関連付けられた逆リストのヘッダを更新するステップ(S30)と、
前記トリグラムを含むリテラル値のIDの表現を含む指定されたブロックを更新し、それによって、識別されたトリグラムに関連付けられた逆リストを更新するステップ(S40)と
を有するコンピュータ実装方法。
【請求項2】
基準を満たすと、
第2のデータ構造における前記リテラル値のIDの表現を更新するステップであって、当該第2のデータ構造がヘッダに関連付けられる、更新するステップと、
前記指定されたブロックを初期化するステップと
を有する請求項1に記載のコンピュータ実装方法。
【請求項3】
前記指定されたブロックが満杯であるときに前記基準が満たされる
請求項2に記載のコンピュータ実装方法。
【請求項4】
前記第2のデータ構造が、ツリー構造であり、
前記第2のデータ構造内にある前記リテラル値の前記IDの前記表現を更新すると、前記ヘッダの前記ツリー構造のルートアドレスを更新するステップをさらに有する
請求項2に記載のコンピュータ実装方法。
【請求項5】
前記第2のデータ構造がツリー構造であり、
前記第2のデータ構造内の更新された前記リテラル値の前記IDの表現が、
各ブロックは8つの32ビットワードの組である1つ以上のブロックを有する
請求項2に記載のコンピュータ実装方法。
【請求項6】
前記第1のデータ構造が、任意の連想データ構造、好ましくはツリー構造である
請求項1に記載のコンピュータ実装方法。
【請求項7】
前記第1のデータ構造がB+Treeであり、
前記リテラル値の前記IDの表現を更新するステップが、
B+Treeの内部ノードのIDのリファレンスを更新するステップと、
B+TreeのリーフのIDを更新するステップと
を有する請求項1に記載のコンピュータ実装方法。
【請求項8】
前記第1のデータ構造の前記指定されたブロックが、8つの32ビットワードの組である
請求項1に記載のコンピュータ実装方法。
【請求項9】
前記8つの32ビットワードの各々は、以下のパターンのうちの1つに従って構成される
16 x 2ビット整数、
8 x 3ビットの次に2 x 4ビット、
2 x 4ビットの次に8 x 3ビット、
8 x 4ビット、
4 x 5ビットの次に2 x 6ビット、
2 x 6ビットの次に4 x 5ビット、
3 x 6ビットの次に2 x 7ビット、
2 x 7ビットの次に3 x 6ビット、
4 x 8ビット、
1 x 10ビットの次に2 x 11ビット、
2 x 11ビットの次に1 x 10ビット、
1 x 8ビットの次に1 x 24ビット、
2 x 16ビット、
1 x 24ビットの次に1 x 8ビット、又は
1 x 32ビット。
請求項1に記載のコンピュータ実装方法。
【請求項10】
前記組の最初の単語が、以下のうちの1つ以上のデータを備える
前記指定されたブロックが満杯であるかどうかを示すインジケータ、
次の埋められる単語のインジケータ、及び/又は
各単語のパターンのインジケータ
請求項9に記載のコンピュータ実装方法。
【請求項11】
前記リテラル値の前記IDの前記追加された表現は、以下の間の差異を示す
前記識別されたトリグラムを含む第1のリテラル値の第1のID、及び
前記識別されたトリグラムを含む第2のリテラル値の第2のID
請求項1に記載のコンピュータ実装方法。
【請求項12】
請求項1に記載の方法により、前記更新された逆リストを用いてクエリに応答する方法であって、
クエリエンジンによってクエリを取得するステップであって、前記クエリは、リテラル数値のための少なくとも1つのフィルタを含む、取得するステップと、
1つ又は複数の更新された逆リストを取得するステップであって、1つ又は複数の取得された逆リストが、前記フィルタのリテラル値を構成するそれぞれの1つ又は複数のトリグラムに関連付けられる、取得するステップと、
前記取得されたクエリに、1つ又は複数の取得された逆リストの部分集合を使用して応答するステップと
を有する、クエリに応答する方法。
【請求項13】
前記1つ又は複数の取得された逆リストの前記1つ又は複数の前記部分集合は、前記1つ又は複数の取得された逆リストの中の最小カーディナリティの部分集合である
請求項12に記載の方法。
【請求項14】
前記プログラムがコンピュータによって実行されるとき、前記コンピュータに、請求項1~11のいずれか一項に記載の方法及び/又は請求項12~13のいずれか一項に記載の方法を実行させる命令を含むコンピュータプログラム。
【請求項15】
逆リストを含む読み書きグラフデータベースであって、データベースの各逆リストが、リテラル値で構成されるトリグラムに関連付けられ、データベースの逆リストが、請求項1~11のいずれか一項に記載の方法を実行することによって更新される、読み書きグラフデータベース。
【外国語明細書】