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

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

▶ ティブコ ソフトウェア インクの特許一覧

特許7153420データベース中にグラフ情報を記憶するためのB木使用
<>
  • 特許-データベース中にグラフ情報を記憶するためのB木使用 図1
  • 特許-データベース中にグラフ情報を記憶するためのB木使用 図2
  • 特許-データベース中にグラフ情報を記憶するためのB木使用 図3
  • 特許-データベース中にグラフ情報を記憶するためのB木使用 図4
  • 特許-データベース中にグラフ情報を記憶するためのB木使用 図5
  • 特許-データベース中にグラフ情報を記憶するためのB木使用 図6
  • 特許-データベース中にグラフ情報を記憶するためのB木使用 図7A
  • 特許-データベース中にグラフ情報を記憶するためのB木使用 図7B
  • 特許-データベース中にグラフ情報を記憶するためのB木使用 図8
  • 特許-データベース中にグラフ情報を記憶するためのB木使用 図9
  • 特許-データベース中にグラフ情報を記憶するためのB木使用 図10
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-10-05
(45)【発行日】2022-10-14
(54)【発明の名称】データベース中にグラフ情報を記憶するためのB木使用
(51)【国際特許分類】
   G06F 16/28 20190101AFI20221006BHJP
   G06F 16/13 20190101ALI20221006BHJP
【FI】
G06F16/28
G06F16/13
【請求項の数】 18
(21)【出願番号】P 2018556975
(86)(22)【出願日】2017-03-08
(65)【公表番号】
(43)【公表日】2019-07-18
(86)【国際出願番号】 US2017021451
(87)【国際公開番号】W WO2017196444
(87)【国際公開日】2017-11-16
【審査請求日】2020-03-02
(31)【優先権主張番号】62/336,473
(32)【優先日】2016-05-13
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】15/357,924
(32)【優先日】2016-11-21
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】508011614
【氏名又は名称】ティブコ ソフトウェア インク
(74)【代理人】
【識別番号】100104411
【弁理士】
【氏名又は名称】矢口 太郎
(72)【発明者】
【氏名】スレッシュ、サブラマニ
(72)【発明者】
【氏名】ヴィンセント、チャン
【審査官】鹿野 博嗣
(56)【参考文献】
【文献】特開2014-010812(JP,A)
【文献】特開2004-145766(JP,A)
【文献】特開平05-081101(JP,A)
【文献】特開2002-014776(JP,A)
【文献】米国特許出願公開第2012/0317339(US,A1)
【文献】特開平06-314171(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/28
G06F 16/13
(57)【特許請求の範囲】
【請求項1】
システムであって、
所定のページサイズの複数のページとして構成された記憶装置と、
前記記憶装置に結合されたプロセッサであって、
複数のノードおよびエッジに関連付けられたデータを受信する工程であって、前記エッジの各々は前記ノードの2つ以上の間の関係を表す、受信する工程と、
各ノードに対して前記データを格納する1以上のページを生成する工程であって、各ページは前記所定のページサイズに対応するものであり、各ページは固定データスロットの可変サイズのセットと、可変サイズの可変長データ領域とを含むB木索引データ構造を有する、生成する工程と、
前記複数のノードおよびエッジに関する前記データの読み込み、更新、および削除の内の少なくとも1つの操作を行う工程と、
前記複数のノードとエッジの関連付けを行う工程と、
を実行し、
前記固定幅データスロットの各々は、スロットヘッダ及びスロットデータ値セクションを含むものであり、
前記スロットヘッダは、スロットタイプ、スロットステータス、およびエッジ方向を示す値を格納するものであり、
前記スロットデータ値セクションは、エッジスロットデータ値または属性スロットデータ値のいずれかを格納するものである、
プロセッサと、
を有するものである、システム。
【請求項2】
請求項1記載のシステムにおいて、前記固定データスロットは、前記ノードに関連付けられたノード属性データ、エッジデータ、およびエッジ属性データのうちの1つまたは複数を格納するために使用されるように構成された、システム。
【請求項3】
請求項1記載のシステムにおいて、単一の前記固定データスロットに収まらないデータは前記可変サイズの可変長データ領域に格納される、システム。
【請求項4】
請求項記載のシステムにおいて、前記スロットヘッダは、データにスロットタイプを格納するための1つ以上のフィールドを含むものである、システム。
【請求項5】
請求項記載のシステムにおいて、前記スロットタイプは、格納されたデータのタイプ、またはそのスロットの対応するスロットデータ値セクションに格納されたデータによって識別される位置に格納されたデータのタイプを示すものである、システム。
【請求項6】
請求項記載のシステムにおいて、前記スロットデータ値セクションは、前記スロットデータ値セクションの固定幅以下のサイズのプリミティブ値を格納するように構成されているものである、システム。
【請求項7】
請求項記載のシステムにおいて、前記スロットヘッダは、対応する値が前記可変長データ領域内に位置する位置を示すオフセットを格納するフィールドを含むものである、システム。
【請求項8】
請求項1記載のシステムにおいて、前記プロセッサは、前記所定ページサイズの前記ページにさらなる空きスペースがなくなるまで、前記ページにスロットを追加及び前記可変長データ領域のサイズを必要に応じ増加して、特定のノードに関連する追加データを格納するように構成されたものである、システム。
【請求項9】
請求項記載のシステムにおいて、前記プロセッサは、追加のデータをノード用に格納すると前記所定のページサイズを超えるページが生成される場合は、そのページを分割するように構成されるものである、システム。
【請求項10】
請求項1記載のシステムにおいて、前記プロセッサは、前記ページを前記記憶装置に書き込む前に前記データスロットをソートするようにさらに構成されるものである、システム。
【請求項11】
請求項10記載のシステムにおいて、前記プロセッサは、各スロットのそれぞれのスロットタイプに少なくとも部分的に基づいて前記スロットをソートするように構成されるものである、システム。
【請求項12】
請求項10記載のシステムにおいて、前記プロセッサは、ソートされる順でノード属性が最初で、次に前記ノードによって所有されるエッジ、続いてエッジ属性が含まれるように、前記スロットをソートするように構成されるものである、システム。
【請求項13】
所定のページサイズの複数のページとして構成された記憶装置と、当該記憶装置に結合されたプロセッサと、を有するシステムにより実行される方法であって、
複数のノードおよびエッジに関連付けられたデータを前記プロセッサにより受信する工程であって、前記エッジの各々は、前記ノードの2つ以上の間の関係を表す、受信する工程と、
各ノードに対して前記データを格納する1以上のページを前記プロセッサにより生成する工程であって、各ページは当該1以上のページが格納される前記記憶装置と関連付けられた前記所定のページサイズに対応するものであり、各ページは固定データスロットの可変サイズのセットと、可変サイズの可変長データ領域とを含むB木索引データ構造を有する、生成する工程と、
前記複数のノードおよびエッジに関する前記データの読み込み、更新、および削除の内の少なくとも1つの操作を行う工程と、
前記複数のノードとエッジの関連付けを行う工程と、
を有し、
前記固定幅データスロットの各々は、スロットヘッダ及びスロットデータ値セクションを含むものであり、
前記スロットヘッダは、スロットタイプ、スロットステータス、およびエッジ方向を示す値を格納するものであり、
前記スロットデータ値セクションは、エッジスロットデータ値または属性スロットデータ値のいずれかを格納するものである、
方法。
【請求項14】
請求項13記載の方法において、前記固定データスロットは、前記ノードに関連付けられたノード属性データ、エッジデータ、およびエッジ属性データの1つまたは複数を格納するために使用されるように構成されるものである、方法。
【請求項15】
請求項13記載の方法において、単一の前記固定データスロットに収まらないデータは前記可変サイズの可変長データ領域に格納されるものである、方法。
【請求項16】
請求項13記載の方法において、前記スロットヘッダは、データにスロットタイプを格納するための1つ以上のフィールドを含む、方法。
【請求項17】
請求項16記載の方法において、前記スロットタイプは、格納されたデータのタイプ、またはそのスロットの対応するスロットデータ値セクションに格納されたデータによって識別される位置に格納されたデータのタイプを示すものである、方法。
【請求項18】
非一時的なコンピュータ可読媒体に格納されたコンピュータソフトウエアプログラムであって、当該コンピュータソフトウエアプログラムは、
コンピュータに、複数のノードおよびエッジに関連するデータを受信する手順であって、前記エッジの各々は、前記ノードの2つ以上の間の関係を表す、受信する手順と、
コンピュータに、各ノードに対して前記データを格納する1以上のページを生成する手順であって、各ページは当該1以上のページが格納される記憶装置と関連付けられた所定のページサイズに対応し、各ページは、固定データスロットの可変サイズのセットと可変サイズの可変長データ領域を含むB木索引データ構造を有するものである、生成する手順
コンピュータに、前記複数のノードおよびエッジに関する前記データの読み込み、更新、および削除の内の少なくとも1つの操作を行う手順と、
コンピュータに、前記複数のノードとエッジの関連付けを行う手順と、
を実行させるための、コンピュータソフトウエアプログラムであって、
前記固定幅データスロットの各々は、スロットヘッダ及びスロットデータ値セクションを含むものであり、
前記スロットヘッダは、スロットタイプ、スロットステータス、およびエッジ方向を示す値を格納するものであり、
前記スロットデータ値セクションは、エッジスロットデータ値または属性スロットデータ値のいずれかを格納するものである、
コンピュータソフトウエアプログラム
【発明の詳細な説明】
【技術分野】
【0001】
(関連特許出願)
本出願は、2016年5月13日付で出願された米国仮特許出願第62/336,473号、発明の名称「データベースにグラフ情報を記憶するためのB木の使用」に対する優先権を主張するもので、ここに参照することによりすべての目的のために本明細書に組み込まれるものである。
【背景技術】
【0002】
グラフは、頂点(「ノード」と呼ばれることもある)およびエッジの集合である。グラフのノードは、任意のエンティティを表すことができ、エッジは、エッジによって接続されたノード間の関係を表すことができる。
【0003】
グラフデータベースは、例えば、ランダムアクセス能力を有するブロック記憶媒体(磁気または固体状態)上に永続的にグラフを格納するために使用することが可能である。各ノードは、それに関連する多くのエッジを有することができる。各エッジは、1つまたは複数の属性を有することができる。
【0004】
グラフのノードによって表されるエンティティ間の関係が変化するときに、エッジは追加、削除、または変更されてもよい(新しいエッジ属性または更新されたエッジ属性等)。エッジは一方向(1つのノードから別のノードへ)または双方向(各ノードから別のノードへ)であってもよい。
【0005】
マトリックスの要素は、グラフ内で頂点の組が隣接しているかどうか、すなわち、それらの間にエッジまたは他の関係があるかどうかを示す。
【0006】
関係データベースは、それぞれがデータの行および列を含む1つまたは複数のテーブルとしてデータを格納する。各行はエンティティに関連付けられてもよく、その行の列はそのエンティティの属性のデータ値を格納してもよい。行はしばしば「レコード」または「タプル」と呼ばれる。一般に、各テーブル/リレーションは、1つの「エンティティタイプ」(顧客または製品など)を表します。行は、そのタイプのエンティティ(「Lee」または「iPhone(登録商標)6」など)の事例と、その事例に起因する値(住所や価格など)を表す列を表します。
【0007】
関係データベースは、データセットJoin(Intersection及びUnion)理論を使用して、エンティティ間の関係を推定する。関係は、異なるテーブル間の論理的な接続である。関係は、これらのテーブル間の相互作用に基づいて確立される。任意の複雑性の関係は、単純な集合原理を使用して「推定」され、標準のクエリ言語を使用して検索される。
この出願の発明に関連する先行技術文献情報としては、以下のものがある(国際出願日以降国際段階で引用された文献及び他国に国内移行した際に引用された文献を含む)。
(先行技術文献)
(特許文献)
(特許文献1) 米国特許出願公開第2013/0191416号明細書
(特許文献2) 米国特許出願公開第2006/0282455号明細書
(特許文献3) 米国特許出願公開第2012/0089791号明細書
【図面の簡単な説明】
【0008】
本発明の様々な実施形態が下記の詳細な説明と添付の図面によって開示される。
図1図1は、グラフデータベースを格納及びアクセスするためのシステム及び環境の実施形態を示すブロック図である。
図2図2は、グラフデータベースシステムの一実施形態を示すブロック図である。
図3図3は、グラフデータベースシステムの一実施形態に格納されるような、データの単純化されたセットのグラフ表現の例を示す図である。
図4図4は、グラフデータベースにデータを表し格納するプロセスの実施形態を示すフローチャートである。
図5図5は、グラフデータベースシステムの一実施形態で使用されるノードデータページ構造の一例を示す図である。
図6図6は、グラフデータベースシステムの一実施形態で使用されるスロットデータ構造の一例を示す図である。
図7A図7Aは、グラフデータベースシステムの実施形態におけるノードまたはエッジ属性データを格納するために使用されるスロットデータ構造の非ヘッダ部分のフォーマットおよび構造の例を示す図である。
図7B図7Bは、グラフデータベースシステムの一実施形態におけるスロットデータ構造エッジデータの非ヘッダ部分のフォーマット及び構造の一例を示す図である。
図8図8は、グラフデータベースにデータを格納するプロセスの一実施形態を示すフローチャートである。
図9図9は、グラフデータベースにデータを格納するプロセスの一実施形態を示すフローチャートである。
図10図10は、グラフデータベースに格納されたデータをソートするプロセスの実施形態を示すフローチャートである。
【発明を実施するための形態】
【0009】
本発明は、さまざまな形式で実施可能であるが、プロセス、装置、システム、組成物、コンピュータ可読記憶媒体上に具現化されたコンピュータプログラム製品、および/またはプロセッサ(プロセッサに結合されたメモリに記憶された指令を実行するように構成されたプロセッサ等)が含まれる。本明細書では、これらの実装形態、または本発明がとり得る他の形態は、技術と呼ぶことができる。
【0010】
一般に、開示されたプロセスのステップの順序は、本発明の範囲内で変更されてもよい。別段の記載がない限り、プロセッサまたはメモリなどのタスクを実行するように構成されたものとして記載されているコンポーネントは、所与の時間にタスクを実行するように一時的に構成された一般的なコンポーネント、またはそのタスクを行うために製造された特定のコンポーネントによって実行される。本明細書で使用する「プロセッサ」という用語は、コンピュータプログラム指令などのデータを処理するように構成された1つ以上のデバイス、回路、および/または処理コアを指す。
【0011】
本発明の1つ以上の実施形態の詳細を、以下に本発明の原理を説明する添付の図面と共に説明する。本発明はそのような実施形態に関連して説明されるが、本発明はいずれの実施形態にも限定されるものではない。本発明の範囲は、特許請求の範囲によってのみ限定され、本発明は、多数の代替、変形および等価物を含むものである。本発明の完全な理解を提供するために、多くの具体的な詳細が以下の説明に記載されている。これらの詳細は、例示のために提供されており、本発明は、これらの特定の詳細の一部または全部を伴わずに、請求項に従って実施することができる。明瞭化のために、本発明に関連する技術分野において周知の技術内容は、本発明が不必要に不明瞭にならないように詳細には記載していない。
【0012】
グラフデータベースを効率的に格納する技術が開示される。様々な実施形態において、グラフの各ノードは、マイクロB木としてモデル化される。ノードデータは、関係データベースの索引データを格納するために使用されるページフォーマットでモデル化された1つ以上のページに格納され、通常はB木として編成される。各ノードに関連付けられたデータ、これにはそのノード識別子および他のノード属性、そのノードによって「所有されている」エッジおよび関連するエッジ属性が含まれるが、これらのデータが関連するページに格納される。
【0013】
いくつかの実施形態では、各ノードデータページは、関係データベースの索引の「index page」と同様に構成することができる。様々な実施形態では、本明細書に開示されているノードまたはルートページでは、所定のサイズを超えない固定長データ値は、関連付けられたページの「スロット」に格納され、可変長値および/または所定のサイズより大きい可変長値は、前記ページのデータ値領域に格納される。
【0014】
図1は、グラフデータベースを格納しアクセスするシステムおよび環境の実施形態を示すブロック図である。図示の例では、コンピューティング環境100は、図1においてデータソース102および104によって表される複数のデータソース1~n、および図1においてデータユーザ106及び108によって表される複数のデータユーザ(コンシューマ)1~mを含む。
【0015】
データソースおよびデータユーザの例には、これらに限定するものではないが、デスクトップコンピュータ、ラップトップコンピュータおよび他のモバイルコンピュータなどのクライアントコンピュータシステム;携帯電話、タブレット、スマートウォッチ、インターネットデバイス、およびデータを生成または消費する他のデバイス等のモバイルデバイス;携帯アップ及び関連サービス、オンラインショッピングサービス、会社、銀行、学校、その他の企業やオンラインサービスなどのサーバーやクラウドベースのサービス等を含む。別のデータソース(102,104)およびデータユーザ(106,108)が図1に示されているが、様々な実施形態において、単一のノード/デバイスは、データソースおよびデータユーザの両方であってもよい。
【0016】
図示の例では、データソース(102,104)からのデータは、インターネット110を介してグラフデータベースシステム112に伝達される。データエンティティ(ノード)、関連する属性、および関係(エッジ)は、キャプチャーされ、グラフデータベース114に格納されるデータで表される。図1では、グラフデータベース114は、グラフデータベースシステム112の外部に示されているが、様々な実施形態において、グラフデータベースシステム112は、グラフデータベース114を含むことができる。様々な実施形態において、グラフデータベースシステム112およびグラフデータベース114は、同じサーバまたは他のコンピュータのような同じ物理的および/または論理的コンピュータシステム上に存在することができる。
【0017】
様々な実施形態において、データソース(102,104)によって生成されたデータはグラフデータベース112によって総計及び処理される。例えば、データソース(102、104)に関連付けられたユーザは、データソース(102,104)を使って、取引、ソーシャルネットワークインタラクション、ブラウジング、検索、ウエブページダウンロード、電子メールおよび他のメッセージの送受信などに参加することができる。グラフデータベース112において、そのような使用を反映するデータを受信及び照合し、グラフデータベース114に格納することができる。例えば、ユーザー及び他のエンティティ(取引、イベント、会社、会員ベースのグループ、製品、トピック、メールメッセージ、ソーシャルネットワークポストなど)は、グラフデータベース114内の「ノード」として表されてもよく、そのようなノード間の関係は、関連する「ノード」間の「エッジ」として表されて決定されてもよい。
【0018】
様々な実施形態では、本明細書で開示された技術を使用して、そのようなノードおよびエッジデータ、および/またはそれぞれの属性を効率的な方法で表すことができる。特に、様々な実施形態では、グラフ・データベース114は、ページ・フォーマットおよび本明細書に開示されているようなコンテンツを使用して格納され、データのページを記憶媒体から効率的に読み書きできるようにする。
【0019】
様々な実施形態において、データユーザ(106、108)は、例えば、インターネット110を介してデータベースシステム112に送信される要求を介して、グラフデータベース114にアクセスしてもよい。そのような要求は、記憶媒体(例えば、フラッシュ記憶装置、ハードディスクドライブ、および/または他の媒体)からのデータの1以上のページを読み込んで、少なくとも部分的に対応し、その要求に応じたデータをロケート及び取り出すことができる。例えば、ソーシャルメディア上のページまたは他のエンティティに(好き)を表示、または親和性を示したユーザに関するデータを検索する要求は、前記のソーシャルメディアページに対応するグラフデータベースノードに関連付けられた格納済みのページ(すなわち、ウェブページまたはソーシャルネットワークページとは対照的である、基礎となる物理的格納媒体等のページベースの組織という意味での「ページ」)をアクセスすることにより情報を提供することが可能であり、前記ページを有するまたは前記ページへリンクされたエッジ(関係)データは、前記ソーシャルメディアページに対して「liked_by」の関係を持つユーザー(ノード)に関連付けられたレコードを識別及び検索するために使用される。例えば、そのようなユーザの属性は、集約され、および/または他の方法で処理されて、要求に応答される。
【0020】
図2は、グラフデータベースシステムの一実施形態を示すブロック図である。図示の例では、図1のグラフデータベースシステム112は、プロセッサ204に結合された通信インタフェース202(例えば、ネットワークインタフェースカードまたは他のネットワーク通信インタフェース)を含む。プロセッサ204は、プロセッサ204で実行されるプロセスが動作するデータ値と共に、プロセッサ204によって実行されるコンピュータ指令が格納される、メモリ206に結合される。プロセッサ204は、データベースストレージシステムインターフェース208に結合されており、様々な実施形態において、グラフデータベース(例えば、グラフデータベース114)がその上に格納される、ローカルまたは外部物理記憶媒体(例えば、ディスクドライブ、フラッシュドライブなど)にアクセスできるように構成される。そのような媒体から、一度に1つまたは複数のデータ記憶ページのデータが読み取り可能である。
【0021】
物理的または論理的データ記憶装置は、記憶装置および/または記憶装置が構成されるかに依存して、典型的には512バイトまたは4キロバイトのサイズのような、「ページ」に対応する単位で読み書きされるように編成されてもよい。ページは、データベース記憶システムインターフェース208を使用してプロセッサ204によって読み取られ、操作されるメモリ206に格納されてもよい。いくつかの実施形態では、索引(図示せず)を使用して、どのデータを取り出すべきかを最初に決定し、グラフデータベースから読み取ったデータ(例えば、エッジデータとして格納された関係)を使用して、検索する更なるグラフデータベースレコード(例えば、前記グラフデータベースによって表されるグラフの対応するノードに関連付けられた格納ページ)が識別される。
【0022】
図3は、グラフデータベースシステムの実施形態に格納されるようなデータの単純化されたセットのグラフ表現の例を示す図である。様々な実施形態では、図3に示すグラフ300などのグラフを、本明細書で開示するように、例えば図1のグラフデータベース114などのグラフデータベースなどのように表現して格納することができる。例示したものでは、グラフ300は、三つのノード(302、304、306)を含み、最初の二つのノード(302、304)は、それぞれ関連した人を表し、第3のノード(306)は会社を表す。エッジ308は、ノード304によって表される人がノード302によって表される人を管理する関係を表し、エッジ310は、前記ノード302によって表される人がノード304によって表される人によって管理される対応関係を表す。
【0023】
エッジ312は、ノード302によって表される人がノード306によって表される会社によって雇用される関係、およびエッジ314は、ノード306がノード302によって表される人の雇用者として識別される対応関係を表している。同様に、エッジ316は、ノード304によって表される人はノード306によって表される会社によって雇用され、エッジ318は、ノード306がノード304によって表される人の雇用者として識別される対応関係を表している。
【0024】
図3に示す例は、非常に単純化された例であり、単一の会社の2人の従業員とそれらの間の単一の関係を含むものである。ソーシャルネットワークグラフや単一の企業やその従業員などの典型的な使用ケースでは、グラフには何千ものノードと数千の関係を含むことができる。
【0025】
図3に示された例では、各関係/エッジは、逆方向の対応する関係を有するが、一部のグラフでは、一方のノードから他方のノードへ戻ることはできないといった、一方向のエッジであってもよい。
【0026】
複雑なデータセットのグラフ表現の潜在的なパワーは、図3に示される非常に単純化された例から明らかである。例えば、図示の例では、「Acme」会社の従業員の平均年齢を決定するクエリは、その会社に対応するノードを検索し、「従業員」関係(エッジ)データを使用してすべての従業員を迅速に検索し、前記グラフ中の各従業員のノードから従業員の各年齢属性をを取り出し、前記取り出された年齢データを使用して、中央値を計算することにより、比較的迅速に処理される。それとは対照して、関係データベースを使用して同じクエリに応答する場合、中央値を計算する年齢データの全セットを取り出すだけで、実行時に1つ以上の「join」操作を使用して、雇用者と従業員の関係を判断する必要がある。
【0027】
様々な実施形態では、本明細書に開示された技術は、図3のグラフ300のようなグラフを有する物理的記憶媒体上に表現および格納するために使用されるが、その際、エッジおよび関連する属性、またそのようなエッジ宛先ノードが判定され、関連するデータが効率的にアクセス(例、作成、読み込み、更新及びまたは削除)できるような方法で行われる。
【0028】
図4は、グラフデータベース内にデータを表現し格納するプロセスの実施形態を示すフローチャートである。様々な実施形態では、図4のプロセスは、図1のグラフデータベース114などのグラフデータベースを提供するために、図1のグラフデータベースシステム112などのグラフデータベースシステムによって実行されてもよい。例では、ノード、エッジ、関連した属性データ(すなわち、ノード属性および/またはエッジ属性)が受信される(402)。例えば、新しく作成されたノードおよび/またはエッジに関連するデータ、および/またはそのようなノードおよび/またはエッジの属性への更新を受信することができる。各ノードは、マイクロB木(404)としてモデル化される。
【0029】
様々な実施形態では、各ノードをマイクロB木としてモデル化することは、ノードデータ(例えば、ノード識別子、ノード属性、ノードが所有するエッジ、およびそのようなエッジの属性の1つまたは複数)を表現し格納することを含むが、前記ノードデータは、関係データベース索引の索引データを格納するために通常使用される索引ページと同じ方法でフォーマットおよび/またはモデル化されるページに表現及び格納される。いくつかの実施形態で使用されるこのようなページの例が、以下に説明される図5に示される。
さらに図4を参照すると、受信されたノードデータ(例えば、ノード識別子、ノード属性、ノードが所有するエッジ、およびそのようなエッジの属性の1つまたは複数)は、B木索引タイプページ(406)を使って格納される。例えば、メモリ内に構築されたページは、単一のページ書き込み操作で物理記憶装置および/または論理記憶装置に書き込まれてもよい。
【0030】
図5は、グラフデータベースシステムの一実施形態で使用されるノードデータページ構造の一例を示す図である。様々な実施形態では、図5に示すページ500を使用して、例えば図4のステップ406のように、ノードデータを表現し記憶することができる。図示の例では、ページ500はノード識別子領域502を含み、そのページが関連付けられているノードを一意的に識別するノード識別子が格納される。示されている例では、ノード識別子は、ページ500の8バイト(または他の)ページ識別子と同じである。ページ500はさらに、可変数の固定幅「スロット」504を含む。スロットは図6図7A、および図7Bに示されるようにフォーマットされ、ノードデータ、エッジデータ、および/または関連する属性を格納するために使用される。例えば、単一のスロットに収まるサイズの値をスロット504に格納することができる。様々な実施形態では、図6、7A、および7Bに示すデータ構造をスロット504に格納することができる。ページ500はまた、可変長データ領域506を含み、スロット504のうちの単一のスロットに収まらないデータが格納されてもよい。例えば、任意の長さの属性データを可変長データ領域506に格納することができる。そのようなデータの識別および/またはそのポインタ(例えば、可変長データ領域506内のオフセット)は、スロット504の対応する1つに書き込むことができる。様々な実施形態では、フォーマットされたおよび/または固定された(または比較的短い)長さのデータがスロット504に書き込まれ、必要に応じてスロットが追加され、ページ500に未使用のスペース508が残っている限り可変長データが可変長データ領域506に追加可能である。ページ500が満杯になる(又は所定の閾値に近づく)と、ページ500は、以下により詳細に説明するように、分割されてもよい。
【0031】
図6は、グラフデータベースシステムの一実施形態で使用されるスロットデータ構造の一例を示す図である。様々な実施形態において、図6のデータ構造600は、図5のスロット504などの固定幅スロットにグラフデータ(ノード、エッジ、属性)を格納するために使用される。図示の例では、スロットデータ構造600は、各16バイト幅のスロットに、1バイト幅のスロットヘッダ602、および15バイト幅のスロットデータ値セクション604を含む。図示の例では、スロットヘッダは、キー606によって示されるようにデータを格納する。他の実施形態では、特定のフォーマット及びスロットヘッダ602中のコンテンツは図6に示されるものと詳細が異なる可能性がある。図示された例では、各スロットヘッダー602は、スロットタイプを示す2ビット値、すなわち、スロット内にまたはスロットによってノード属性が格納されていることを示す00、スロット内にまたはスロットによってエッジが格納されていることを示す01、エッジ属性が格納されていることを示す02が含まれる。この例の次の2ビットは、スロットステータス(00-アクティブ、01-削除済み、02-フェンス:そのページの最後のスロット値を示す)、続いてエッジ方向を示す2ビット(スロットがエッジを可能する場合、00-外方向、01-内方向)、続いてエッジ(エッジスロットの場合)が属性を有するかを示す1ビットがあり、最終ビットはエッジがノードが所有するものであることを示す。15バイト幅のスロットデータ値セクション604は、図7A(属性)および7B(エッジ)に示されるようにいくつかの実施形態でフォーマットされたエッジスロットデータ値または(エッジ/ノード)属性スロットデータ値のいずれかを、スロットヘッダ602の最初の2ビットで示されたスロットタイプに応じて格納する。
【0032】
図7Aは、グラフデータベースシステムの実施形態におけるノードまたはエッジ属性データを格納するために使用されるスロットデータ構造の非ヘッダ部分のフォーマットおよび構造の例を示す図である。いくつかの実施形態では、図7Aのデータ構造700は、ノード属性またはエッジ属性タイプのスロットの場合((図6に示す例のスロットタイプ00または02))には、図6に示されるように、スロットの非ヘッダ(すなわち、スロットデータ値)セクション604を埋めるために使用される。図7Aに示す例では、データ構造700は、図7Aに示されたスキームに従ってデータを格納するように構成された1バイト幅属性ヘッダセクション702を含む。例えば、最初のビットは、属性のヌル値を示すために使用され、第2のビットは、属性が配列値であることを示すために使用され。次の2ビットは、属性値がどこに格納されているかを示すために使用されてもよい(00-スロット自体に、例えばプリミティブ値として、01-ページの可変長領域において、その場合、オフセットがスロットに格納される。または02-拡張ページを示す。その場合、対応するデータが存在するページの対応するページ識別子がプリミティブ値としてスロットに格納される)。スロットデータ値セクションデータ構造700の次の2バイトは、該当する属性値のページ内にオフセットを格納するための使用に適用されるとして(例えば、その値がスロット自体に格納されていない場合に)指定される。4バイト幅の属性識別子セクション706は、32ビットの属性IDを格納する。最後に、8バイト幅のペイロード部分708は、ノードではなくエッジ属性の場合には属性が関連付けられたエッジを示すエッジIDを格納するか、またはノード属性の場合には8バイト幅のペイロードセクション708に収まる値のプリミティブ値を格納する。
【0033】
特定のデータ構造、スキームおよびキーが図7Aに示されているが、他の実施形態では、ノード属性および/またはエッジ属性タイプスロットにおいて属性データを表すために他のフォーマットを使用してもよい。
【0034】
図7Bは、グラフデータベースシステムの一実施形態におけるスロットデータ構造エッジデータの非ヘッダ部分のフォーマット及び構造の一例を示す図である。いくつかの実施形態では、図7Bのデータ構造720は、エッジタイプのスロットの場合(すなわち、図6の例ではスロットタイプ01)には、図6に示すように、スロットの非ヘッダ(すなわち、スロットデータ値)セクション604にデータを入れるために使用される。図7Bに示す例では、データ構造720は、エッジ識別子値が格納される7バイト幅のエッジ識別子セクション722と、エッジに関連する宛先ノードのノード識別子が格納される8バイト幅の宛先ノード識別子セクション724とを含む。様々な実施形態では、エッジの起点/所有者を格納する必要はないのは、その関係が、エッジスロットが原点であるノードに関連付けられたページに含まれ、したがって(様々な実施形態において)ノードを所有すると考えられという事実によって暗示されるからである。
【0035】
図8は、グラフデータベースにデータを格納するプロセスの一実施形態を示すフローチャートである。様々な実施形態では、図8のプロセスは、図1のグラフデータベースシステム112などのグラフデータベースシステムによって実行される。図示の例では、データを格納するための指示が受け取られる(802)。データが関連するグラフ(804)の新しいノード、例えば関連付けられたグラフデータベースで以前には見られないか、または表されていないエンティティに関連付けられている場合、前記新しいノードは、本明細書に開示されるようなマイクロB木としてモデル化され、さらに、グラフデータベース内でノードを表すルートページが初期化され(806)、受信されたデータを格納するために使用される。受信したデータが既存のノードに関連付けられ(804)、既存のノードによって所有されているエッジに関連付けられている場合(例えば、エッジを追加、変更、または削除する場合)、前記エッジを所有する既存のノードと関連付けられたページで対応するエッジスロットデータが追加または修正される(810)。
【0036】
データが新しいノードに関連しておらず(804)、新規または変更されたエッジでない場合(808)、新しいデータは、既存ノードのノードまたはエッジ属性データ(812)のいずれかに対する更新として処理されるが、ノード属性スロット内および/またはそのようなスロットによって示されるデータ領域および/またはページ内のノード属性データを追加または変更することによって(814)、またはエッジ属性スロット内および/またはそのようなスロットによって示されるデータ領域及び/またはページ内にエッジ属性データを追加または修正することによって(816)適宜処理される。
【0037】
図9は、グラフデータベースにデータを格納するプロセスの一実施形態を示すフローチャートである。様々な実施形態では、図9のプロセスは、図1のグラフデータベースシステム112などのグラフデータベースシステムによって実行可能である。図示の例では、ノードに関連する追加データを格納するための指示が受信される(902)。例えば、追加属性、属性の付加的または異なる値、追加のエッジおよび/またはエッジ属性などを受け取ることができる。ノードに関連する既存のページに空きがある場合(904)、データは既存のページに書き込まれる(906)。例えば、図5の利用可能なスペース508に対応する、ルートページまたはノードに関連付けられた追加のページなど、ノードに関連付けられたページの利用可能な部分が、新しいデータを格納するのに十分なサイズであるかどうかの判定をしてもよい。前記ノードに関連付けられた既存のページ上で利用可能なスペースが十分でない場合(904)、ページ分割操作が実行され、前記ノードに関連するデータを2つ(またはそれ以上)のページにわたって分割し(908)、それにより生成されたページの1つの空き領域に新しいデータが書き込まれる。
【0038】
様々な実施形態では、B木および/または関連技術を使用して、所与のノードのマイクロB木モデル内のバランスを維持する方法でページを分割することができる。例えば、ページは、ページが分割されるそれぞれのページに格納されるデータ量をバランスさせるように分割されてもよい。
【0039】
図10は、グラフデータベースに格納されたデータをソートするプロセスの実施形態を示すフローチャートである。種々の実施形態において、図10のプロセスは、図1のグラフデータベースシステム112のようなグラフデータベースシステムによって実行されてもよい。様々な実施形態において、図10のプロセスは、関心のあるデータを見つけるためにグラフをすばやくトラバースするなど、データの検索を促進させるソートされた順序でグラフデータを格納するように実装可能である。図示された例では、ノード(ページ)スロットデータが更新されると(1002)、記憶装置にページを書き込む前に、スロットはスロットタイプ(例えば、ノード属性スロットを最初に、次にエッジスロット、最後にエッジ属性スロット)によってソートされる(1004)。ノード属性スロット内では、スロットは属性記述子識別子(1006)によってソートされる。エッジはエッジIDでソートされ(1008)、エッジ属性はエッジID、次に属性記述子IDでソートされます(1010)。
【0040】
様々な実施形態においてグラフデータを表現し格納する本明細書に開示された技法は、グラフとして少なくともある特定のデータセットを表現し、関連するデータをグラフデータベースにソートする利点を可能にし、最小限の入出力操作及び効率内で実現する。様々な実施形態では、ソーシャルネットワークおよび類似のデータセットの特徴であるような多数のエッジ(例えば、関係)を含むグラフデータベースは、本明細書で開示される技術を使用して効率的に格納およびアクセスされる。
【0041】
前述の実施形態は、理解を明確にするために詳細に記載されているが、本発明は、提供される詳細に限定されない。本発明を実施する多くの代替方法がある。開示された実施形態は例示であり、限定的ではない。
図1
図2
図3
図4
図5
図6
図7A
図7B
図8
図9
図10