(57)【要約】  グラフ情報をデータベースに格納する技術が開示される。様々な実施形態では、グラフの各ノードは、マイクロＢ木としてモデル化することができる。ノード識別、属性、エッジ、およびエッジ属性データは、関係データベース索引の索引データを格納するために通常使用されるページフォーマットでモデル化された１つまたは複数のページに格納される。複数のノードおよびエッジに関連するデータであって、前記エッジの各々が前記ノードの２つ以上の間の関係を表すデータが受信可能である。各ノードについて、１以上のページのデータが生成可能であり、各ページは前記１以上のページが格納される記憶装置に関連付けられた所定のページサイズに対応し、各ページは固定長データスロットの可変サイズのセットと可変サイズの可変長データ領域を含むデータ構造を有するものである。  【選択図】      図４
2019520627.tif 000002
【特許請求の範囲】
【請求項１】
システムであって、  
所定のページサイズの複数のページとして構成された記憶装置と、
前記記憶装置に結合されたプロセッサであって、
複数のノードおよびエッジに関連付けられたデータを受信する工程であって、前記エッジの各々は前記ノードの２つ以上の間の関係を表す、受信する工程と、
各ノードに対して１以上のページのデータを生成する工程であって、各ページは前記所定のページサイズに対応するものであり、各ページは固定長データスロットの可変サイズのセットと、可変サイズの可変長データ領域とを含むデータ構造を有する、生成する工程と、
を行う、プロセッサと、
を有するものである、システム。
【請求項２】
請求項１記載のシステムにおいて、前記固定長データスロットは、前記ノードに関連付けられたノード属性データ、エッジデータ、およびエッジ属性データのうちの１つまたは複数を格納するために使用されるように構成された、システム。
【請求項３】
請求項１記載のシステムにおいて、前記固定長データスロットに格納するには大きすぎるデータ値が格納される、システム。
【請求項４】
請求項１記載のシステムにおいて、前記固定長データスロットの各々は、スロットヘッダ及びスロットデータ値セクションを含むものである、システム。
【請求項５】
請求項４記載のシステムにおいて、前記スロットヘッダは、データにスロットタイプを格納するための１つ以上のフィールドを含むものである、システム。
【請求項６】
請求項５記載のシステムにおいて、前記スロットタイプは、格納されたデータのタイプ、またはそのスロットの対応するスロットデータ値セクションに格納されたデータによって識別される位置に格納されたデータのタイプを示すものである、システム。
【請求項７】
請求項６記載のシステムにおいて、前記スロットデータ値セクションは、前記スロットデータ値セクションの固定幅以下のサイズのプリミティブ値を格納するように構成されているものである、システム。
【請求項８】
請求項４記載のシステムにおいて、前記スロットヘッダは、対応する値が前記可変長データ領域内に位置する位置を示すオフセットを格納するフィールドを含むものである、システム。
【請求項９】
請求項１記載のシステムにおいて、前記プロセッサは、前記所定ページサイズの前記ページにさらなる空きスペースがなくなるまで、前記ページにスロットを追加及び前記可変長データ領域のサイズを必要に応じ増加して、特定のノードに関連する追加データを格納するように構成されたものである、システム。
【請求項１０】
請求項９記載のシステムにおいて、前記プロセッサは、追加のデータをノード用に格納すると前記所定のページサイズを超えるページが生成される場合は、そのページを分割するように構成されるものである、システム。
【請求項１１】
請求項１記載のシステムにおいて、前記プロセッサは、前記ページを前記記憶装置に書き込む前に前記データスロットをソートするようにさらに構成されるものである、システム。
【請求項１２】
請求項１１記載のシステムにおいて、前記プロセッサは、各スロットのそれぞれのスロットタイプに少なくとも部分的に基づいて前記スロットをソートするように構成されるものである、システム。
【請求項１３】
請求項１１記載のシステムにおいて、前記プロセッサは、ソートされる順でノード属性が最初で、次に前記ノードによって所有されるエッジ、続いてエッジ属性が含まれるように、前記スロットをソートするように構成されるものである、システム。
【請求項１４】
方法であって、
複数のノードおよびエッジに関連付けられたデータを受信する工程であって、前記エッジの各々は、前記ノードの２つ以上の間の関係を表す、受信する工程と、
各ノードに対して１以上のページのデータを生成する工程であって、各ページは前記１以上のページが格納される記憶装置と関連付けられた所定のページサイズに対応するものであり、各ページは固定長データスロットの可変サイズのセットと、可変サイズの可変長データ領域とを含むデータ構造を有する、生成する工程と、を有する方法。
【請求項１５】
請求項１４記載の方法において、前記固定長データスロットは、前記ノードに関連付けられたノード属性データ、エッジデータ、およびエッジ属性データの１つまたは複数を格納するために使用されるように構成されるものである、方法。
【請求項１６】
請求項１４記載の方法において、前記固定長データスロットに格納するには大きすぎるデータ値が格納されるものである、方法。
【請求項１７】
請求項１４記載の方法において、前記固定長データスロットの各々は、スロットヘッダとスロットデータ値セクションとを含むものである、方法。
【請求項１８】
請求項１７記載の方法において、前記スロットヘッダは、データにスロットタイプを格納するための１つ以上のフィールドを含む、方法。
【請求項１９】
請求項１８記載の方法において、前記スロットタイプは、格納されたデータのタイプ、またはそのスロットの対応するスロットデータ値セクションに格納されたデータによって識別される位置に格納されたデータのタイプを示すものである、方法。
【請求項２０】
非一時的なコンピュータ可読媒体に組み込まれたコンピュータプログラム製品であって、
複数のノードおよびエッジに関連するデータを受信する工程であって、前記エッジの各々は、前記ノードの２つ以上の間の関係を表す、受信する工程と、
各ノードに対して、１以上のページのデータを生成する工程であって、前記１以上のページが格納される記憶装置に関連付けられた所定のページサイズにそれぞれ対応し、各ページは、固定長データスロットの可変サイズのセットと可変サイズの可変長データ領域を含むものである、生成する工程と
を行うための指令を有する、コンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連特許出願）
本出願は、２０１６年５月１３日付で出願された米国仮特許出願第６２／３３６，４７３号、発明の名称「データベースにグラフ情報を記憶するためのＢ木の使用」に対する優先権を主張するもので、ここに参照することによりすべての目的のために本明細書に組み込まれるものである。
【背景技術】
【０００２】
グラフは、頂点（「ノード」と呼ばれることもある）およびエッジの集合である。グラフのノードは、任意のエンティティを表すことができ、エッジは、エッジによって接続されたノード間の関係を表すことができる。
【０００３】
グラフデータベースは、例えば、ランダムアクセス能力を有するブロック記憶媒体（磁気または固体状態）上に永続的にグラフを格納するために使用することが可能である。各ノードは、それに関連する多くのエッジを有することができる。各エッジは、１つまたは複数の属性を有することができる。
【０００４】
グラフのノードによって表されるエンティティ間の関係が変化するときに、エッジは追加、削除、または変更されてもよい（新しいエッジ属性または更新されたエッジ属性等）。エッジは一方向（１つのノードから別のノードへ）または双方向（各ノードから別のノードへ）であってもよい。
【０００５】
マトリックスの要素は、グラフ内で頂点の組が隣接しているかどうか、すなわち、それらの間にエッジまたは他の関係があるかどうかを示す。
【０００６】
関係データベースは、それぞれがデータの行および列を含む１つまたは複数のテーブルとしてデータを格納する。各行はエンティティに関連付けられてもよく、その行の列はそのエンティティの属性のデータ値を格納してもよい。行はしばしば「レコード」または「タプル」と呼ばれる。一般に、各テーブル／リレーションは、１つの「エンティティタイプ」（顧客または製品など）を表します。行は、そのタイプのエンティティ（「Ｌｅｅ」または「ｉＰｈｏｎｅ（登録商標）６」など）の事例と、その事例に起因する値（住所や価格など）を表す列を表します。
【０００７】
関係データベースは、データセットＪｏｉｎ（Ｉｎｔｅｒｓｅｃｔｉｏｎ及びＵｎｉｏｎ）理論を使用して、エンティティ間の関係を推定する。関係は、異なるテーブル間の論理的な接続である。関係は、これらのテーブル間の相互作用に基づいて確立される。任意の複雑性の関係は、単純な集合原理を使用して「推定」され、標準のクエリ言語を使用して検索される。
【図面の簡単な説明】
【０００８】
本発明の様々な実施形態が下記の詳細な説明と添付の図面によって開示される。
【図１】図１は、グラフデータベースを格納及びアクセスするためのシステム及び環境の実施形態を示すブロック図である。
【図２】図２は、グラフデータベースシステムの一実施形態を示すブロック図である。
【図３】図３は、グラフデータベースシステムの一実施形態に格納されるような、データの単純化されたセットのグラフ表現の例を示す図である。
【図４】図４は、グラフデータベースにデータを表し格納するプロセスの実施形態を示すフローチャートである。
【図５】図５は、グラフデータベースシステムの一実施形態で使用されるノードデータページ構造の一例を示す図である。
【図６】図６は、グラフデータベースシステムの一実施形態で使用されるスロットデータ構造の一例を示す図である。
【図７Ａ】図７Ａは、グラフデータベースシステムの実施形態におけるノードまたはエッジ属性データを格納するために使用されるスロットデータ構造の非ヘッダ部分のフォーマットおよび構造の例を示す図である。
【図７Ｂ】図７Ｂは、グラフデータベースシステムの一実施形態におけるスロットデータ構造エッジデータの非ヘッダ部分のフォーマット及び構造の一例を示す図である。
【図８】図８は、グラフデータベースにデータを格納するプロセスの一実施形態を示すフローチャートである。
【図９】図９は、グラフデータベースにデータを格納するプロセスの一実施形態を示すフローチャートである。
【図１０】図１０は、グラフデータベースに格納されたデータをソートするプロセスの実施形態を示すフローチャートである。
【発明を実施するための形態】
【０００９】
本発明は、さまざまな形式で実施可能であるが、プロセス、装置、システム、組成物、コンピュータ可読記憶媒体上に具現化されたコンピュータプログラム製品、および／またはプロセッサ（プロセッサに結合されたメモリに記憶された指令を実行するように構成されたプロセッサ等）が含まれる。本明細書では、これらの実装形態、または本発明がとり得る他の形態は、技術と呼ぶことができる。
【００１０】
一般に、開示されたプロセスのステップの順序は、本発明の範囲内で変更されてもよい。別段の記載がない限り、プロセッサまたはメモリなどのタスクを実行するように構成されたものとして記載されているコンポーネントは、所与の時間にタスクを実行するように一時的に構成された一般的なコンポーネント、またはそのタスクを行うために製造された特定のコンポーネントによって実行される。本明細書で使用する「プロセッサ」という用語は、コンピュータプログラム指令などのデータを処理するように構成された１つ以上のデバイス、回路、および／または処理コアを指す。
【００１１】
本発明の１つ以上の実施形態の詳細を、以下に本発明の原理を説明する添付の図面と共に説明する。本発明はそのような実施形態に関連して説明されるが、本発明はいずれの実施形態にも限定されるものではない。本発明の範囲は、特許請求の範囲によってのみ限定され、本発明は、多数の代替、変形および等価物を含むものである。本発明の完全な理解を提供するために、多くの具体的な詳細が以下の説明に記載されている。これらの詳細は、例示のために提供されており、本発明は、これらの特定の詳細の一部または全部を伴わずに、請求項に従って実施することができる。明瞭化のために、本発明に関連する技術分野において周知の技術内容は、本発明が不必要に不明瞭にならないように詳細には記載していない。
【００１２】
グラフデータベースを効率的に格納する技術が開示される。様々な実施形態において、グラフの各ノードは、マイクロＢ木としてモデル化される。ノードデータは、関係データベースの索引データを格納するために使用されるページフォーマットでモデル化された１つ以上のページに格納され、通常はＢ木として編成される。各ノードに関連付けられたデータ、これにはそのノード識別子および他のノード属性、そのノードによって「所有されている」エッジおよび関連するエッジ属性が含まれるが、これらのデータが関連するページに格納される。
【００１３】
いくつかの実施形態では、各ノードデータページは、関係データベースの索引の「ｉｎｄｅｘ  ｐａｇｅ」と同様に構成することができる。様々な実施形態では、本明細書に開示されているノードまたはルートページでは、所定のサイズを超えない固定長データ値は、関連付けられたページの「スロット」に格納され、可変長値および／または所定のサイズより大きい可変長値は、前記ページのデータ値領域に格納される。
【００１４】
図１は、グラフデータベースを格納しアクセスするシステムおよび環境の実施形態を示すブロック図である。図示の例では、コンピューティング環境１００は、図１においてデータソース１０２および１０４によって表される複数のデータソース１〜ｎ、および図１においてデータユーザ１０６及び１０８によって表される複数のデータユーザ（コンシューマ）１〜ｍを含む。
【００１５】
データソースおよびデータユーザの例には、これらに限定するものではないが、デスクトップコンピュータ、ラップトップコンピュータおよび他のモバイルコンピュータなどのクライアントコンピュータシステム；携帯電話、タブレット、スマートウォッチ、インターネットデバイス、およびデータを生成または消費する他のデバイス等のモバイルデバイス；携帯アップ及び関連サービス、オンラインショッピングサービス、会社、銀行、学校、その他の企業やオンラインサービスなどのサーバーやクラウドベースのサービス等を含む。別のデータソース（１０２，１０４）およびデータユーザ（１０６，１０８）が図１に示されているが、様々な実施形態において、単一のノード／デバイスは、データソースおよびデータユーザの両方であってもよい。
【００１６】
図示の例では、データソース（１０２，１０４）からのデータは、インターネット１１０を介してグラフデータベースシステム１１２に伝達される。データエンティティ（ノード）、関連する属性、および関係（エッジ）は、キャプチャーされ、グラフデータベース１１４に格納されるデータで表される。図１では、グラフデータベース１１４は、グラフデータベースシステム１１２の外部に示されているが、様々な実施形態において、グラフデータベースシステム１１２は、グラフデータベース１１４を含むことができる。様々な実施形態において、グラフデータベースシステム１１２およびグラフデータベース１１４は、同じサーバまたは他のコンピュータのような同じ物理的および／または論理的コンピュータシステム上に存在することができる。
【００１７】
様々な実施形態において、データソース（１０２，１０４）によって生成されたデータはグラフデータベース１１２によって総計及び処理される。例えば、データソース（１０２、１０４）に関連付けられたユーザは、データソース（１０２，１０４）を使って、取引、ソーシャルネットワークインタラクション、ブラウジング、検索、ウエブページダウンロード、電子メールおよび他のメッセージの送受信などに参加することができる。グラフデータベース１１２において、そのような使用を反映するデータを受信及び照合し、グラフデータベース１１４に格納することができる。例えば、ユーザー及び他のエンティティ（取引、イベント、会社、会員ベースのグループ、製品、トピック、メールメッセージ、ソーシャルネットワークポストなど）は、グラフデータベース１１４内の「ノード」として表されてもよく、そのようなノード間の関係は、関連する「ノード」間の「エッジ」として表されて決定されてもよい。
【００１８】
様々な実施形態では、本明細書で開示された技術を使用して、そのようなノードおよびエッジデータ、および／またはそれぞれの属性を効率的な方法で表すことができる。特に、様々な実施形態では、グラフ・データベース１１４は、ページ・フォーマットおよび本明細書に開示されているようなコンテンツを使用して格納され、データのページを記憶媒体から効率的に読み書きできるようにする。
【００１９】
様々な実施形態において、データユーザ（１０６、１０８）は、例えば、インターネット１１０を介してデータベースシステム１１２に送信される要求を介して、グラフデータベース１１４にアクセスしてもよい。そのような要求は、記憶媒体（例えば、フラッシュ記憶装置、ハードディスクドライブ、および／または他の媒体）からのデータの１以上のページを読み込んで、少なくとも部分的に対応し、その要求に応じたデータをロケート及び取り出すことができる。例えば、ソーシャルメディア上のページまたは他のエンティティに（好き）を表示、または親和性を示したユーザに関するデータを検索する要求は、前記のソーシャルメディアページに対応するグラフデータベースノードに関連付けられた格納済みのページ（すなわち、ウェブページまたはソーシャルネットワークページとは対照的である、基礎となる物理的格納媒体等のページベースの組織という意味での「ページ」）をアクセスすることにより情報を提供することが可能であり、前記ページを有するまたは前記ページへリンクされたエッジ（関係）データは、前記ソーシャルメディアページに対して「ｌｉｋｅｄ＿ｂｙ」の関係を持つユーザー（ノード）に関連付けられたレコードを識別及び検索するために使用される。例えば、そのようなユーザの属性は、集約され、および／または他の方法で処理されて、要求に応答される。
【００２０】
図２は、グラフデータベースシステムの一実施形態を示すブロック図である。図示の例では、図１のグラフデータベースシステム１１２は、プロセッサ２０４に結合された通信インタフェース２０２（例えば、ネットワークインタフェースカードまたは他のネットワーク通信インタフェース）を含む。プロセッサ２０４は、プロセッサ２０４で実行されるプロセスが動作するデータ値と共に、プロセッサ２０４によって実行されるコンピュータ指令が格納される、メモリ２０６に結合される。プロセッサ２０４は、データベースストレージシステムインターフェース２０８に結合されており、様々な実施形態において、グラフデータベース（例えば、グラフデータベース１１４）がその上に格納される、ローカルまたは外部物理記憶媒体（例えば、ディスクドライブ、フラッシュドライブなど）にアクセスできるように構成される。そのような媒体から、一度に１つまたは複数のデータ記憶ページのデータが読み取り可能である。
【００２１】
物理的または論理的データ記憶装置は、記憶装置および／または記憶装置が構成されるかに依存して、典型的には５１２バイトまたは４キロバイトのサイズのような、「ページ」に対応する単位で読み書きされるように編成されてもよい。ページは、データベース記憶システムインターフェース２０８を使用してプロセッサ２０４によって読み取られ、操作されるメモリ２０６に格納されてもよい。いくつかの実施形態では、索引（図示せず）を使用して、どのデータを取り出すべきかを最初に決定し、グラフデータベースから読み取ったデータ（例えば、エッジデータとして格納された関係）を使用して、検索する更なるグラフデータベースレコード（例えば、前記グラフデータベースによって表されるグラフの対応するノードに関連付けられた格納ページ）が識別される。
【００２２】
図３は、グラフデータベースシステムの実施形態に格納されるようなデータの単純化されたセットのグラフ表現の例を示す図である。様々な実施形態では、図３に示すグラフ３００などのグラフを、本明細書で開示するように、例えば図１のグラフデータベース１１４などのグラフデータベースなどのように表現して格納することができる。例示したものでは、グラフ３００は、三つのノード（３０２、３０４、３０６）を含み、最初の二つのノード（３０２、３０４）は、それぞれ関連した人を表し、第３のノード（３０６）は会社を表す。エッジ３０８は、ノード３０４によって表される人がノード３０２によって表される人を管理する関係を表し、エッジ３１０は、前記ノード３０２によって表される人がノード３０４によって表される人によって管理される対応関係を表す。
【００２３】
エッジ３１２は、ノード３０２によって表される人がノード３０６によって表される会社によって雇用される関係、およびエッジ３１４は、ノード３０６がノード３０２によって表される人の雇用者として識別される対応関係を表している。同様に、エッジ３１６は、ノード３０４によって表される人はノード３０６によって表される会社によって雇用され、エッジ３１８は、ノード３０６がノード３０４によって表される人の雇用者として識別される対応関係を表している。
【００２４】
図３に示す例は、非常に単純化された例であり、単一の会社の２人の従業員とそれらの間の単一の関係を含むものである。ソーシャルネットワークグラフや単一の企業やその従業員などの典型的な使用ケースでは、グラフには何千ものノードと数千の関係を含むことができる。
【００２５】
図３に示された例では、各関係／エッジは、逆方向の対応する関係を有するが、一部のグラフでは、一方のノードから他方のノードへ戻ることはできないといった、一方向のエッジであってもよい。
【００２６】
複雑なデータセットのグラフ表現の潜在的なパワーは、図３に示される非常に単純化された例から明らかである。例えば、図示の例では、「Ａｃｍｅ」会社の従業員の平均年齢を決定するクエリは、その会社に対応するノードを検索し、「従業員」関係（エッジ）データを使用してすべての従業員を迅速に検索し、前記グラフ中の各従業員のノードから従業員の各年齢属性をを取り出し、前記取り出された年齢データを使用して、中央値を計算することにより、比較的迅速に処理される。それとは対照して、関係データベースを使用して同じクエリに応答する場合、中央値を計算する年齢データの全セットを取り出すだけで、実行時に１つ以上の「ｊｏｉｎ」操作を使用して、雇用者と従業員の関係を判断する必要がある。
【００２７】
様々な実施形態では、本明細書に開示された技術は、図３のグラフ３００のようなグラフを有する物理的記憶媒体上に表現および格納するために使用されるが、その際、エッジおよび関連する属性、またそのようなエッジ宛先ノードが判定され、関連するデータが効率的にアクセス（例、作成、読み込み、更新及びまたは削除）できるような方法で行われる。
【００２８】
図４は、グラフデータベース内にデータを表現し格納するプロセスの実施形態を示すフローチャートである。様々な実施形態では、図４のプロセスは、図１のグラフデータベース１１４などのグラフデータベースを提供するために、図１のグラフデータベースシステム１１２などのグラフデータベースシステムによって実行されてもよい。例では、ノード、エッジ、関連した属性データ（すなわち、ノード属性および／またはエッジ属性）が受信される（４０２）。例えば、新しく作成されたノードおよび／またはエッジに関連するデータ、および／またはそのようなノードおよび／またはエッジの属性への更新を受信することができる。各ノードは、マイクロＢ木（４０４）としてモデル化される。
【００２９】
様々な実施形態では、各ノードをマイクロＢ木としてモデル化することは、ノードデータ（例えば、ノード識別子、ノード属性、ノードが所有するエッジ、およびそのようなエッジの属性の１つまたは複数）を表現し格納することを含むが、前記ノードデータは、関係データベース索引の索引データを格納するために通常使用される索引ページと同じ方法でフォーマットおよび／またはモデル化されるページに表現及び格納される。いくつかの実施形態で使用されるこのようなページの例が、以下に説明される図５に示される。
さらに図４を参照すると、受信されたノードデータ（例えば、ノード識別子、ノード属性、ノードが所有するエッジ、およびそのようなエッジの属性の１つまたは複数）は、Ｂ木索引タイプページ（４０６）を使って格納される。例えば、メモリ内に構築されたページは、単一のページ書き込み操作で物理記憶装置および／または論理記憶装置に書き込まれてもよい。
【００３０】
図５は、グラフデータベースシステムの一実施形態で使用されるノードデータページ構造の一例を示す図である。様々な実施形態では、図５に示すページ５００を使用して、例えば図４のステップ４０６のように、ノードデータを表現し記憶することができる。図示の例では、ページ５００はノード識別子領域５０２を含み、そのページが関連付けられているノードを一意的に識別するノード識別子が格納される。示されている例では、ノード識別子は、ページ５００の８バイト（または他の）ページ識別子と同じである。ページ５００はさらに、可変数の固定幅「スロット」５０４を含む。スロットは図６、図７Ａ、および図７Ｂに示されるようにフォーマットされ、ノードデータ、エッジデータ、および／または関連する属性を格納するために使用される。例えば、単一のスロットに収まるサイズの値をスロット５０４に格納することができる。様々な実施形態では、図６、７Ａ、および７Ｂに示すデータ構造をスロット５０４に格納することができる。ページ５００はまた、可変長データ領域５０６を含み、スロット５０４のうちの単一のスロットに収まらないデータが格納されてもよい。例えば、任意の長さの属性データを可変長データ領域５０６に格納することができる。そのようなデータの識別および／またはそのポインタ（例えば、可変長データ領域５０６内のオフセット）は、スロット５０４の対応する１つに書き込むことができる。様々な実施形態では、フォーマットされたおよび／または固定された（または比較的短い）長さのデータがスロット５０４に書き込まれ、必要に応じてスロットが追加され、ページ５００に未使用のスペース５０８が残っている限り可変長データが可変長データ領域５０６に追加可能である。ページ５００が満杯になる（又は所定の閾値に近づく）と、ページ５００は、以下により詳細に説明するように、分割されてもよい。
【００３１】
図６は、グラフデータベースシステムの一実施形態で使用されるスロットデータ構造の一例を示す図である。様々な実施形態において、図６のデータ構造６００は、図５のスロット５０４などの固定幅スロットにグラフデータ（ノード、エッジ、属性）を格納するために使用される。図示の例では、スロットデータ構造６００は、各１６バイト幅のスロットに、１バイト幅のスロットヘッダ６０２、および１５バイト幅のスロットデータ値セクション６０４を含む。図示の例では、スロットヘッダは、キー６０６によって示されるようにデータを格納する。他の実施形態では、特定のフォーマット及びスロットヘッダ６０２中のコンテンツは図６に示されるものと詳細が異なる可能性がある。図示された例では、各スロットヘッダー６０２は、スロットタイプを示す２ビット値、すなわち、スロット内にまたはスロットによってノード属性が格納されていることを示す００、スロット内にまたはスロットによってエッジが格納されていることを示す０１、エッジ属性が格納されていることを示す０２が含まれる。この例の次の２ビットは、スロットステータス（００−アクティブ、０１−削除済み、０２−フェンス：そのページの最後のスロット値を示す）、続いてエッジ方向を示す２ビット（スロットがエッジを可能する場合、００−外方向、０１−内方向）、続いてエッジ（エッジスロットの場合）が属性を有するかを示す１ビットがあり、最終ビットはエッジがノードが所有するものであることを示す。１５バイト幅のスロットデータ値セクション６０４は、図７Ａ（属性）および７Ｂ（エッジ）に示されるようにいくつかの実施形態でフォーマットされたエッジスロットデータ値または（エッジ／ノード）属性スロットデータ値のいずれかを、スロットヘッダ６０２の最初の２ビットで示されたスロットタイプに応じて格納する。
【００３２】
図７Ａは、グラフデータベースシステムの実施形態におけるノードまたはエッジ属性データを格納するために使用されるスロットデータ構造の非ヘッダ部分のフォーマットおよび構造の例を示す図である。いくつかの実施形態では、図７Ａのデータ構造７００は、ノード属性またはエッジ属性タイプのスロットの場合（（図６に示す例のスロットタイプ００または０２））には、図６に示されるように、スロットの非ヘッダ（すなわち、スロットデータ値）セクション６０４を埋めるために使用される。図７Ａに示す例では、データ構造７００は、図７Ａに示されたスキームに従ってデータを格納するように構成された１バイト幅属性ヘッダセクション７０２を含む。例えば、最初のビットは、属性のヌル値を示すために使用され、第２のビットは、属性が配列値であることを示すために使用され。次の２ビットは、属性値がどこに格納されているかを示すために使用されてもよい（００−スロット自体に、例えばプリミティブ値として、０１−ページの可変長領域において、その場合、オフセットがスロットに格納される。または０２−拡張ページを示す。その場合、対応するデータが存在するページの対応するページ識別子がプリミティブ値としてスロットに格納される）。スロットデータ値セクションデータ構造７００の次の２バイトは、該当する属性値のページ内にオフセットを格納するための使用に適用されるとして（例えば、その値がスロット自体に格納されていない場合に）指定される。４バイト幅の属性識別子セクション７０６は、３２ビットの属性ＩＤを格納する。最後に、８バイト幅のペイロード部分７０８は、ノードではなくエッジ属性の場合には属性が関連付けられたエッジを示すエッジＩＤを格納するか、またはノード属性の場合には８バイト幅のペイロードセクション７０８に収まる値のプリミティブ値を格納する。
【００３３】
特定のデータ構造、スキームおよびキーが図７Ａに示されているが、他の実施形態では、ノード属性および／またはエッジ属性タイプスロットにおいて属性データを表すために他のフォーマットを使用してもよい。
【００３４】
図７Ｂは、グラフデータベースシステムの一実施形態におけるスロットデータ構造エッジデータの非ヘッダ部分のフォーマット及び構造の一例を示す図である。いくつかの実施形態では、図７Ｂのデータ構造７２０は、エッジタイプのスロットの場合（すなわち、図６の例ではスロットタイプ０１）には、図６に示すように、スロットの非ヘッダ（すなわち、スロットデータ値）セクション６０４にデータを入れるために使用される。図７Ｂに示す例では、データ構造７２０は、エッジ識別子値が格納される７バイト幅のエッジ識別子セクション７２２と、エッジに関連する宛先ノードのノード識別子が格納される８バイト幅の宛先ノード識別子セクション７２４とを含む。様々な実施形態では、エッジの起点／所有者を格納する必要はないのは、その関係が、エッジスロットが原点であるノードに関連付けられたページに含まれ、したがって（様々な実施形態において）ノードを所有すると考えられという事実によって暗示されるからである。
【００３５】
図８は、グラフデータベースにデータを格納するプロセスの一実施形態を示すフローチャートである。様々な実施形態では、図８のプロセスは、図１のグラフデータベースシステム１１２などのグラフデータベースシステムによって実行される。図示の例では、データを格納するための指示が受け取られる（８０２）。データが関連するグラフ（８０４）の新しいノード、例えば関連付けられたグラフデータベースで以前には見られないか、または表されていないエンティティに関連付けられている場合、前記新しいノードは、本明細書に開示されるようなマイクロＢ木としてモデル化され、さらに、グラフデータベース内でノードを表すルートページが初期化され（８０６）、受信されたデータを格納するために使用される。受信したデータが既存のノードに関連付けられ（８０４）、既存のノードによって所有されているエッジに関連付けられている場合（例えば、エッジを追加、変更、または削除する場合）、前記エッジを所有する既存のノードと関連付けられたページで対応するエッジスロットデータが追加または修正される（８１０）。
【００３６】
データが新しいノードに関連しておらず（８０４）、新規または変更されたエッジでない場合（８０８）、新しいデータは、既存ノードのノードまたはエッジ属性データ（８１２）のいずれかに対する更新として処理されるが、ノード属性スロット内および／またはそのようなスロットによって示されるデータ領域および／またはページ内のノード属性データを追加または変更することによって（８１４）、またはエッジ属性スロット内および／またはそのようなスロットによって示されるデータ領域及び／またはページ内にエッジ属性データを追加または修正することによって（８１６）適宜処理される。
【００３７】
図９は、グラフデータベースにデータを格納するプロセスの一実施形態を示すフローチャートである。様々な実施形態では、図９のプロセスは、図１のグラフデータベースシステム１１２などのグラフデータベースシステムによって実行可能である。図示の例では、ノードに関連する追加データを格納するための指示が受信される（９０２）。例えば、追加属性、属性の付加的または異なる値、追加のエッジおよび／またはエッジ属性などを受け取ることができる。ノードに関連する既存のページに空きがある場合（９０４）、データは既存のページに書き込まれる（９０６）。例えば、図５の利用可能なスペース５０８に対応する、ルートページまたはノードに関連付けられた追加のページなど、ノードに関連付けられたページの利用可能な部分が、新しいデータを格納するのに十分なサイズであるかどうかの判定をしてもよい。前記ノードに関連付けられた既存のページ上で利用可能なスペースが十分でない場合（９０４）、ページ分割操作が実行され、前記ノードに関連するデータを２つ（またはそれ以上）のページにわたって分割し（９０８）、それにより生成されたページの１つの空き領域に新しいデータが書き込まれる。
【００３８】
様々な実施形態では、Ｂ木および／または関連技術を使用して、所与のノードのマイクロＢ木モデル内のバランスを維持する方法でページを分割することができる。例えば、ページは、ページが分割されるそれぞれのページに格納されるデータ量をバランスさせるように分割されてもよい。
【００３９】
図１０は、グラフデータベースに格納されたデータをソートするプロセスの実施形態を示すフローチャートである。種々の実施形態において、図１０のプロセスは、図１のグラフデータベースシステム１１２のようなグラフデータベースシステムによって実行されてもよい。様々な実施形態において、図１０のプロセスは、関心のあるデータを見つけるためにグラフをすばやくトラバースするなど、データの検索を促進させるソートされた順序でグラフデータを格納するように実装可能である。図示された例では、ノード（ページ）スロットデータが更新されると（１００２）、記憶装置にページを書き込む前に、スロットはスロットタイプ（例えば、ノード属性スロットを最初に、次にエッジスロット、最後にエッジ属性スロット）によってソートされる（１００４）。ノード属性スロット内では、スロットは属性記述子識別子（１００６）によってソートされる。エッジはエッジＩＤでソートされ（１００８）、エッジ属性はエッジＩＤ、次に属性記述子ＩＤでソートされます（１０１０）。
【００４０】
様々な実施形態においてグラフデータを表現し格納する本明細書に開示された技法は、グラフとして少なくともある特定のデータセットを表現し、関連するデータをグラフデータベースにソートする利点を可能にし、最小限の入出力操作及び効率内で実現する。様々な実施形態では、ソーシャルネットワークおよび類似のデータセットの特徴であるような多数のエッジ（例えば、関係）を含むグラフデータベースは、本明細書で開示される技術を使用して効率的に格納およびアクセスされる。
【００４１】
前述の実施形態は、理解を明確にするために詳細に記載されているが、本発明は、提供される詳細に限定されない。本発明を実施する多くの代替方法がある。開示された実施形態は例示であり、限定的ではない。
【図１】
2019520627.tif 000003
【図２】
2019520627.tif 000004
【図３】
2019520627.tif 000005
【図４】
2019520627.tif 000006
【図５】
2019520627.tif 000007
【図６】
2019520627.tif 000008
【図７Ａ】
2019520627.tif 000009
【図７Ｂ】
2019520627.tif 000010
【図８】
2019520627.tif 000011
【図９】
2019520627.tif 000012
【図１０】
2019520627.tif 000013
【国際調査報告】
2019520627.tif 000014