(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-09-30
(45)【発行日】2022-10-11
(54)【発明の名称】グラフデータベースのトラバース方法、装置、機器及び記憶媒体
(51)【国際特許分類】
G06F 9/48 20060101AFI20221003BHJP
G06F 9/54 20060101ALI20221003BHJP
【FI】
G06F9/48 370
G06F9/54 A
(21)【出願番号】P 2021005299
(22)【出願日】2021-01-15
【審査請求日】2021-01-15
(31)【優先権主張番号】202010043990.2
(32)【優先日】2020-01-15
(33)【優先権主張国・地域又は機関】CN
(73)【特許権者】
【識別番号】514322098
【氏名又は名称】ベイジン バイドゥ ネットコム サイエンス テクノロジー カンパニー リミテッド
【氏名又は名称原語表記】Beijing Baidu Netcom Science Technology Co., Ltd.
【住所又は居所原語表記】2/F Baidu Campus, No.10, Shangdi 10th Street, Haidian District, Beijing 100085, China
(74)【代理人】
【識別番号】110000578
【氏名又は名称】名古屋国際弁理士法人
(72)【発明者】
【氏名】ザン ハイピン
(72)【発明者】
【氏名】ワン ヤン
(72)【発明者】
【氏名】チェン シ
(72)【発明者】
【氏名】ワン イーフェイ
【審査官】金田 孝之
(56)【参考文献】
【文献】米国特許出願公開第2014/0172914(US,A1)
【文献】特表2008-500627(JP,A)
【文献】特開2014-194772(JP,A)
【文献】Goetz GRAEFE,"Encapsulation of Parallelism in the Volcano Query Processing System",ACM SIGMOD Record ,Volume 19, Issue 2,1990年05月01日,pp.102-111,https://doi.org/10.1145/93605.98720
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/455- 9/54
(57)【特許請求の範囲】
【請求項1】
グラフデータベースのトラバース方法であって、
入力されたグラフトラバース語句を取得し、前記グラフトラバース語句に含まれる少なくとも2つの演算子及び各演算子の実行順序を決定し、各演算子にスレッドをそれぞれ割り当て、隣接する2つの演算子ごとにバッファキューをそれぞれ作成するステップと、
隣接する2つの演算子ごとに対して、前記隣接する2つの演算子のうちの前の演算子に対応するスレッドによって前の演算子の操作を実行し、前の演算子の実行結果データを前記隣接する2つの演算子に対応するバッファキューに書き込み、前記隣接する2つの演算子のうちの後の演算子に対応するスレッドによって、前記隣接する2つの演算子の前の演算子の実行結果データを前記バッファキューから後の演算子の操作の実行用に並列に読み取るステップと、を含
み、
各スレッドに対応するアドレス情報を設定することにより、各スレッドは、演算子操作を実行する時に、バッファキューの正確な位置決めを実現する、
ことを特徴とするグラフデータベースのトラバース方法。
【請求項2】
各演算子の実行順序に従って、トークンデータを各演算子に対応するスレッド間で伝送することによって、トークンデータを受信したスレッドに、このスレッドに対応する演算子の操作の実行を開始させ、前記トークンデータを次の演算子に対応するスレッドに伝送するステップをさらに含む、
ことを特徴とする請求項1に記載の方法。
【請求項3】
各演算子にスレッドをそれぞれ割り当てるステップは、
利用可能なスレッドの数に基づいて、各演算子の実行順序に従って各演算子にスレッドをそれぞれ割り当てるステップを含む、
ことを特徴とする請求項2に記載の方法。
【請求項4】
利用可能なスレッドの数が演算子の数よりも少ない場合、各演算子の実行順序に従ってトークンデータを各演算子に対応するスレッド間で伝送する時に、前記方法は、
前記トークンデータを受信したスレッドが、次の演算子が対応するスレッドを持っているか否かを判断するステップと、
前記トークンデータを受信したスレッドが、次の演算子が対応するスレッドを持っていないと判断した場合、予め設定された条件を満たしている割り当て済みスレッドが現れる時に、前記割り当て済みスレッドを前記次の演算子に再割り当て、前記トークンデータを前記割り当て済みスレッドに伝送して、前記割り当て済みスレッドに前記次の演算子の操作を実行させるステップと、をさらに含み、
前記予め設定された条件は、前記割り当て済みスレッドがこのスレッドに対応する演算子の操作を実行し終わったことである、
ことを特徴とする請求項3に記載の方法。
【請求項5】
各演算子にスレッドをそれぞれ割り当て、隣接する2つの演算子ごとにバッファキューをそれぞれ作成するステップは、
各演算子にローカルコンピュータ機器のスレッドをそれぞれ割り当て、隣接する2つの演算子ごとにバッファキューを前記ローカルコンピュータ機器にそれぞれ作成するステップ、又は、
各演算子について、前記演算子を実行するためのコンピュータ機器を少なくとも2つのコンピュータ機器から決定し、決定されたコンピュータ機器のスレッドを前記演算子に割り当てるステップと、
隣接する2つの演算子ごとについて、バッファキューを作成するためのコンピュータ機器を少なくとも2つのコンピュータ機器から決定し、決定されたコンピュータ機器において前記隣接する2つの演算子に対応するバッファキューを作成するステップと、を含む、
ことを特徴とする請求項1に記載の方法。
【請求項6】
1番目の演算子について、前記1番目の演算子の実行結果データを保存するためのバッファキューのアドレス情報を、前記1番目の演算子を実行するためのコンピュータ機器に送信して、前記1番目の演算子を実行するためのコンピュータ機器が受信された前記アドレス情報に基づいて対応するバッファキューを位置決めするステップと、
前記1番目の演算子以外のいずれかのターゲット演算子について、前記いずれかのターゲット演算子の前の演算子の実行結果データを保存するための第1のバッファキューのアドレス情報と、前記いずれかのターゲット演算子の実行結果データを保存するための第2のバッファキューのアドレス情報とを、前記いずれかのターゲット演算子を実行するためのコンピュータ機器に送信して、前記いずれかのターゲット演算子を実行するためのコンピュータ機器が受信されたアドレス情報に基づいて対応する前記第1のバッファキュー及び前記第2のバッファキューを位置決めするステップと、をさらに含む、
ことを特徴とする請求項5に記載の方法。
【請求項7】
前記バッファキューがキュークラスターに作成されている場合、前記バッファキューのアドレス情報にはキュー識別子が含まれ、
前記バッファキューがコンピュータ機器に作成されている場合、前記バッファキューのアドレス情報には、キューが位置するコンピュータ機器の機器識別子、ポート情報及びキュー識別子のうちの少なくとも1つが含まれる、
ことを特徴とする請求項6に記載の方法。
【請求項8】
1番目の演算子以外のいずれかのターゲット演算子に対応するスレッドが演算子実行終了条件を満たしていると判断した場合、予め設定された操作を実行して、対応する演算子の操作を終了するように前記いずれかのターゲット演算子の前の各演算子に対応するスレッドに通知するステップをさらに含む、
ことを特徴とする請求項1~7のいずれかに記載の方法。
【請求項9】
予め設定された操作を実行して、対応する演算子の操作を終了するように前記いずれかのターゲット演算子の前の各演算子に対応するスレッドに通知するステップは、
前記いずれかのターゲット演算子を現在の演算子とし、現在の演算子の前の演算子の実行結果データを保存するためのバッファキューの読み取り側状態を閉じて、前の演算子に対応するスレッドが、当該バッファキューの読み取り側状態が閉じられていることを検出する時に、当該バッファキューへのデータの書き込みを停止し、当該バッファキューの書き込み側状態を閉じて前の演算子の実行を終了するようにし、前の演算子を新しい現在の演算子とし、前記1番目の演算子の実行が終了されるまで、現在の演算子の前の演算子の実行結果データを保存するためのバッファキューの読み取り側状態を閉じる操作を実行するために戻るステップ、又は、
終了情報を予め設定されたグローバル情報テーブルに登録して、前記いずれかのターゲット演算子の前の各演算子に対応するスレッドが前記終了情報を読み取ると、対応する演算子の操作の実行を終了するステップを含む、
ことを特徴とする請求項8に記載の方法。
【請求項10】
グラフデータベースのトラバース装置であって、
入力されたグラフトラバース語句を取得し、グラフトラバース語句に含まれる少なくとも2つの演算子及び各演算子の実行順序を決定し、各演算子にスレッドをそれぞれ割り当て、隣接する2つの演算子ごとにバッファキューをそれぞれ作成するように構成されるグラフトラバース語句取得モジュールと、
隣接する2つの演算子ごとに対して、前記隣接する2つの演算子のうちの前の演算子に対応するスレッドによって前の演算子の操作を実行し、前の演算子の実行結果データを前記隣接する2つの演算子に対応するバッファキューに書き込み、前記隣接する2つの演算子のうちの後の演算子に対応するスレッドによって、前記隣接する2つの演算子の前の演算子の実行結果データを前記バッファキューから後の演算子の操作の実行用に並列に読み取るように構成される演算子並列実行モジュールと、を含
み、
各スレッドに対応するアドレス情報を設定することにより、各スレッドは、演算子操作を実行する時に、バッファキューの正確な位置決めを実現する、
ことを特徴とするグラフデータベースのトラバース装置。
【請求項11】
電子機器であって、
少なくとも1つのプロセッサと、
前記少なくとも1つのプロセッサに通信可能に接続されたメモリと、を含み、
前記メモリには前記少なくとも1つのプロセッサで実行可能な命令が記憶され、前記命令が前記少なくとも1つのプロセッサによって実行される場合、前記少なくとも1つのプロセッサが請求項1~9のいずれかに記載のグラフデータベースのトラバース方法を実行する、
ことを特徴とする電子機器。
【請求項12】
コンピュータ命令を記憶している非一時的コンピュータ読み取り可能な記憶媒体であって、
前記コンピュータ命令が実行される場合、請求項1~9のいずれかに記載のグラフデータベースのトラバース方法が実行される、
ことを特徴とする非一時的コンピュータ読み取り可能な記憶媒体。
【請求項13】
コンピュータプログラムであって、
前記コンピュータプログラムにおける命令が実行された場合、請求項1~9のいずれかに記載のグラフデータベースのトラバース方法が実行される、
ことを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、コンピュータ技術に関し、特にインテリジェント検索技術分野に関する。
【背景技術】
【0002】
グラフデータベースでは、グラフトラバース操作が最も基本的な操作である。従来技術では、ユーザによって入力されたグラフトラバース語句を取得した後、グラフトラバース語句に含まれる複数の演算子間のネストされた呼び出しにより、又は各演算子の実行順序に従って前の演算子の実行結果を順次スクリーニングし、最終的にターゲット要素を取得する。
【0003】
しかしながら、上記2つの方式では、大規模なデータが同時に送信される場合、ターゲット要素のクエリ効率が低く、システムリソースの利用率が低下する。
【発明の概要】
【発明が解決しようとする課題】
【0004】
本出願の実施例は、グラフデータベース内のターゲット要素のクエリ効率及びシステムリソースの利用率を向上させるために、グラフデータベースのトラバース方法、装置、機器及び記憶媒体を提供する。
【課題を解決するための手段】
【0005】
第1の態様では、本出願の実施例は、
入力されたグラフトラバース語句を取得し、前記グラフトラバース語句に含まれる少なくとも2つの演算子及び各演算子の実行順序を決定し、各演算子にスレッドをそれぞれ割り当て、隣接する2つの演算子ごとにバッファキューをそれぞれ作成するステップと、
隣接する2つの演算子ごとに対して、前記隣接する2つ演算子のうちの前の演算子に対応するスレッドによって前の演算子の操作を実行し、前の演算子の実行結果データを前記隣接する2つの演算子に対応するバッファキューに書き込み、前記隣接する2つの演算子のうちの後の演算子に対応するスレッドによって、前記隣接する2つの演算子の前の演算子の実行結果データを前記バッファキューから後の演算子の操作の実行用に並列に読み取るステップと、を含むグラフデータベースのトラバース方法を提供する。
【0006】
本出願の実施例は、入力されたグラフトラバース語句を取得し、グラフトラバース語句に含まれる少なくとも2つの演算子及び各演算子の実行順序を決定し、各演算子にスレッドをそれぞれ割り当て、隣接する2つの演算子ごとにバッファキューをそれぞれ作成し、隣接する2つの演算子ごとに対して、隣接する2つの演算子のうちの前の演算子に対応するスレッドによって前の演算子の操作を実行し、前の演算子の実行結果データを隣接する2つの演算子に対応するバッファキューに書き込み、隣接する2つの演算子のうちの後の演算子に対応するスレッドによって、隣接する2つの演算子の前の演算子の実行結果データをバッファキューから後の演算子への操作の実行用に並列に読み取る。上記技術案では、隣接する2つの演算子ごとにバッファキューを作成することにより、隣接する2つの演算子の前の演算子が実行結果データを生成し、前記実行結果データがバッファキューに書き込まれた後、バッファキュー内のデータを読み取って後の演算子を実行することができ、それによって演算子の並列実行が実現され、トラバース操作の実行効率とシステムリソースの利用率が向上する。
【0007】
選択可能に、前記方法は、
各演算子の実行順序に従って、トークンデータを各演算子に対応するスレッド間で伝送することによって、トークンデータを受信したスレッドに、このスレッドに対応する演算子の操作の実行を開始させ、前記トークンデータを次の演算子に対応するスレッドに伝送するステップをさらに含む。
【0008】
上記出願の1つの選択可能な実施形態では、各演算子に対応するスレッド間のトークンデータの伝送により、次の演算子に対応するスレッドの起動を関連付けてトリガーすることにより、隣接する演算子に対応するスレッド間の待ち時間を短縮させ、さらに実行効率を向上させる。
【0009】
選択可能には、各演算子にスレッドをそれぞれ割り当てるステップは、
利用可能なスレッドの数に基づいて、各演算子の実行順序に従って各演算子にスレッドをそれぞれ割り当てるステップを含む。
【0010】
上記出願の1つの選択可能な実施形態では、利用可能なスレッドのデータ及び各演算子の実行順序に基づいて各演算子にスレッドをそれぞれ割り当てることにより、スレッド割り当てメカニズムが改善され、演算子の並列実行が保証される。
【0011】
選択可能には、前記利用可能なスレッドの数が演算子の数よりも少ない場合、各演算子の実行順序に従ってトークンデータを各演算子に対応するスレッド間で伝送する時に、前記方法は、
前記トークンデータを受信したスレッドが、次の演算子が対応するスレッドを持っているか否かを判断するステップと、
前記トークンデータを受信したスレッドが、次の演算子が対応するスレッドを持っていないと判断した場合、予め設定された条件を満たしている割り当て済みスレッドが現れる時に、前記割り当て済みスレッドを前記次の演算子に再割り当て、前記トークンデータを前記割り当て済みスレッドに伝送して、前記割り当て済みスレッドに前記次の演算子の操作を実行させるステップと、をさらに含み、
ここで、前記予め設定された条件は、前記割り当て済みスレッドがこのスレッドに対応する演算子の操作を実行し終わったことである。
【0012】
上記出願の1つの選択可能な実施形態では、利用可能なスレッドの数が演算子の数よりも少ない場合、このスレッドに対応する演算子操作を実行した割り当て済みスレッドに次の演算子を再割り当てることにより、利用可能なスレッドが全ての演算子を一回カバーできない場合のスレッド割り当てメカニズムが改善され、演算子の並列実行が保証される。
【0013】
選択可能には、各演算子にスレッドをそれぞれ割り当て、隣接する2つの演算子ごとにバッファキューをそれぞれ作成するステップは、
各演算子にローカルコンピュータ機器のスレッドをそれぞれ割り当て、隣接する2つの演算子ごとにバッファキューを前記ローカルコンピュータ機器にそれぞれ作成するステップ、又は、
各演算子について、前記演算子を実行するためのコンピュータ機器を少なくとも2つのコンピュータ機器から決定し、決定されたコンピュータ機器のスレッドを前記演算子に割り当てるステップと、
バッファキューを作成するためのコンピュータを少なくとも2つのコンピュータ機器から隣接する2つの演算子ごとに決定し、決定されたコンピュータ機器において前記隣接する2つの演算子に対応するバッファキューを作成するステップと、を含む。
【0014】
上記出願の各選択可能な実施形態では、ローカルコンピュータ機器内でスレッドを各演算子に割り当て、隣接する2つの演算子ごとにバッファキューを作成すること、又は、少なくとも2つのコンピュータ機器内でスレッドを各演算子に割り当て、隣接する2つの演算子ごとにバッファキューを作成することにより、グラフデータベースへのトラバース操作は、単一のコンピュータ機器で実現され、又は複数のコンピュータ機器の組み合わせで実現される。
【0015】
選択可能には、前記方法は、
1番目の演算子について、前記1番目の演算子の実行結果データを保存するためのバッファキューのアドレス情報を、前記1番目の演算子を実行するためのコンピュータ機器に送信して、前記1番目の演算子を実行するためのコンピュータ機器が受信された前記アドレス情報に基づいて対応するバッファキューを位置決めするステップと、
前記1番目の演算子以外のいずれかのターゲット演算子について、前記いずれかのターゲット演算子の前の演算子の実行結果データを保存するための第1のバッファキューのアドレス情報と、前記いずれかのターゲット演算子の実行結果データを保存するための第2のバッファキューのアドレス情報とを、前記いずれかのターゲット演算子を実行するためのコンピュータ機器に送信して、前記いずれかのターゲット演算子を実行するためのコンピュータ機器が受信されたアドレス情報に基づいて対応する前記第1のバッファキュー及び前記第2のバッファキューを位置決めするステップと、をさらに含む。
【0016】
上記出願の1つの選択可能な実施形態では、前の演算子の実行結果データを必要とする第1のバッファキューのアドレス情報と、この演算子の実行結果データを記憶するための第2のバッファキューのアドレス情報とを、演算子の操作を実行するためのコンピュータ機器に保存することにより、演算子の操作を実行するためのスレッドは、キューの正確な位置決めを実現し、グラフデータベースへのトラバース操作を保証することができる。
【0017】
選択可能には、前記バッファキューがキュークラスターに作成されている場合、前記バッファキューのアドレス情報にはキュー識別子が含まれ、
前記バッファキューがコンピュータ機器に作成されている場合、前記バッファキューのアドレス情報には、キューが位置するコンピュータ機器の機器識別子、ポート情報及びキュー識別子のうちの少なくとも1つが含まれる。
【0018】
上記出願の1つの選択可能な実施形態では、異なる位置に作成されたバッファキューに対応するアドレス情報を細分化することにより、バッファキュー作成位置の多様性が体現され、同時にグラフデータベースへのトラバース操作がサポートされる。
【0019】
選択可能には、前記方法は、
1番目の演算子以外のいずれかのターゲット演算子に対応するスレッドが演算子実行終了条件を満たしていると判断した場合、予め設定された操作を実行して、対応する演算子の操作を終了するように前記いずれかのターゲット演算子の前の各演算子に対応するスレッドに通知するステップをさらに含む。
【0020】
上記出願の1つの選択可能な実施形態では、後の演算子が終了条件を満たしていると決定する時に、予め設定された操作を実行して、実行を終了するように前の全ての演算子に通知することにより、フィードバックメカニズムを通じて潜在的な多数の無効な計算が削除される。
【0021】
選択可能には、予め設定された操作を実行して、対応する演算子の操作を終了するように前記いずれかのターゲット演算子の前の各演算子に対応するスレッドに通知するステップは、
前記いずれかのターゲット演算子を現在の演算子とし、現在の演算子の前の演算子の実行結果データを保存するためのバッファキューの読み取り側状態を閉じて、前の演算子に対応するスレッドが、当該バッファキューの読み取り側状態が閉じられていることを検出する時に、当該バッファキューへのデータの書き込みを停止し、当該バッファキューの書き込み側状態を閉じて前の演算子の実行を終了するようにし、前の演算子を新しい現在の演算子とし、前記1番目の演算子の実行が終了されるまで、現在の演算子の前の演算子の実行結果データを保存するためのバッファキューの読み取り側状態を閉じる操作を実行するために戻るステップ、又は、
終了情報を予め設定されたグローバル情報テーブルに登録して、前記いずれかのターゲット演算子の前の各演算子に対応するスレッドが前記終了情報を読み取ると、対応する演算子の操作を終了するステップを含む。
【0022】
上記出願の1つの選択可能な実施形態では、バッファキューの読み取り及び書き込み側状態の制御により、バッファキューに関連付けられた演算子に対応するスレッドへの関連制御が実現され、それによってバッファキューの関連トリガーが達成され、演算子の実行順序の逆の順序に従って、各演算子に対応するスレッドを順次終了し、それによって無効な計算を回避するという効果を達成する。
【0023】
上記出願の別の選択可能な実施形態では、終了情報を登録するためのグローバル情報テーブルを予め設定することにより、いずれかのターゲット演算子の前の各演算子に対応するスレッドは、終了情報を読み取ると、対応する演算子の操作を終了し、それによって無効な計算を回避するという効果を達成する。
【0024】
第2の態様では、本出願の実施例は、
入力されたグラフトラバース語句を取得し、前記グラフトラバース語句に含まれる少なくとも2つの演算子及び各演算子の実行順序を決定し、各演算子にスレッドをそれぞれ割り当て、隣接する2つの演算子ごとにバッファキューをそれぞれ作成するように構成されるトラバース語句取得モジュールと、
隣接する2つの演算子ごとに対して、前記隣接する2つ演算子のうちの前の演算子に対応するスレッドによって前の演算子の操作を実行し、前の演算子の実行結果データを前記隣接する2つの演算子に対応するバッファキューに書き込み、前記隣接する2つの演算子のうちの後の演算子に対応するスレッドによって、前記隣接する2つの演算子の前の演算子の実行結果データを前記バッファキューから後の演算子の操作の実行用に並列に読み取るように構成される演算子並列実行モジュールと、を含むグラフデータベースのトラバース装置をさらに提供する。
【0025】
第3の態様では、本出願の実施例は、
少なくとも1つのプロセッサと、
前記少なくとも1つのプロセッサに通信可能に接続されたメモリとを備える電子機器をさらに提供し、ここで、
前記メモリには前記少なくとも1つのプロセッサで実行可能な命令が記憶され、前記命令は、前記少なくとも1つのプロセッサが第1の態様によるグラフデータベースのトラバース方法を実行できるように、前記少なくとも1つのプロセッサに実行される。
【0026】
第4の態様では、本出願の実施例は、コンピュータ命令を記憶している非一時的コンピュータ読み取り可能な記憶媒体をさらに提供し、前記命令が前記少なくとも1つのプロセッサによって実行される場合、第1の態様の実施例によって提供されるグラフデータベースのトラバース方法が実行される。
第5の態様では、本出願の実施例は、コンピュータプログラムをさらに提供し、前記コンピュータプログラムにおける命令が実行された場合、第1の態様の実施例によって提供されるグラフデータベースのトラバース方法が実行される。
【0027】
上記選択可能な方式が有している他の効果は、以下に具体的な実施例と併せて説明される。
【図面の簡単な説明】
【0028】
図面は、本解決策をよりよく理解するために使用され、本出願を限定するものではない。
【
図1A】本出願の実施例1におけるグラフデータベースのトラバース方法のフローチャートである。
【
図1B】本出願の実施例1における隣接する2つの演算子の実行プロセスの概略図である。
【
図2】本出願の実施例2におけるグラフデータベースのトラバース方法のフローチャートである。
【
図3A】本出願の実施例3におけるグラフデータベースのトラバース方法のフローチャートである。
【
図3B】本出願の実施例3における隣接する2つの演算子が終了情報を伝送する概略図である。
【
図4】本出願の実施例4におけるグラフデータベースのトラバース装置の構成図である。
【
図5】本出願の実施例によるグラフデータベースのトラバース方法を実現するための電子機器のブロック図である。
【発明を実施するための形態】
【0029】
以下に、図面を参照して本出願の例示的な実施例を説明し、理解を容易にするために、その中には本出願の実施例の様々な詳細を含んでおり、それらは単なる例示するものと見なされるべきである。したがって、当業者は、本出願の範囲及び趣旨から逸脱することなく、ここで説明される実施例に対して様々な変更と修正を行うことができることを理解すべきである。同様に、明確及び簡潔にするために、以下の説明では、周知の機能及び構成の説明を省略する。
【0030】
実施例1
図1Aは本出願の実施例1におけるグラフデータベースのトラバース方法のフローチャートである。本出願の実施例は、グラフデータベースでデータトラバースを行うことに適用する。この方法は、ソフトウェア及び/又はハードウェアで実現され且つ一定のデータコンピューティング機能を備えた電子機器に具体的に配置されるグラフデータベースのトラバース装置によって実行される。
【0031】
図1Aに示すグラフデータベースのトラバース方法は、次のステップを含む。
【0032】
S101、入力されたグラフトラバース語句を取得し、前記グラフトラバース語句に含まれる少なくとも2つの演算子及び各演算子の実行順序を決定し、各演算子にスレッドをそれぞれ割り当て、隣接する2つの演算子ごとにバッファキューをそれぞれ作成する。
【0033】
ここでは、グラフトラバース語句の取得は、ユーザが編集されたグラフトラバース語句を実行することで実現されもよい。ここで、グラフトラバース語句には少なくとも2つの演算子が含まれ、各演算子は、グラフデータベースでウォーク、フィルタリング、変換、検索のうちの少なくとも1つの操作を実行し、さらに対応する機能を実現するために使用される。
【0034】
ここで、バッファキューは、隣接する2つの演算子の後の演算子が前の演算子の実行結果データに基づいて本演算子に対応する操作を実行するために、隣接する2つの演算子の前の演算子の実行結果データを記憶するために使用される。
【0035】
本出願の実施例の1つの選択可能な実施形態では、単一のコンピュータ機器によりスレッド割り当て及びバッファキュー作成操作を実現することができる。例示的には、各演算子にローカルコンピュータ機器のスレッドをそれぞれ割り当て、隣接する2つの演算子ごとにバッファキューを前記ローカルコンピュータ機器にそれぞれ作成する。
【0036】
本出願の実施例の別の選択可能な実施形態では、グラフデータベースのトラバース方法を分散環境に拡張するように、複数のコンピュータ機器によりスレッド割り当て及びバッファキュー作成操作を共同で実現してもよい。
【0037】
例示的には、各演算子について、前記演算子を実行するためのコンピュータ機器を少なくとも2つのコンピュータ機器から決定し、決定されたコンピュータ機器のスレッドを前記演算子に割り当て、バッファキューを作成するためのコンピュータ機器を少なくとも2つのコンピュータ機器から隣接する2つの演算子ごとに決定し、決定されたコンピュータ機器に前記隣接する2つの演算子に対応するバッファキューを作成する。
【0038】
なお、演算子の実行結果データを記憶するためのバッファキューと対応する演算子を実行するためのスレッドとは、同じ又は異なるコンピュータ機器に位置してもよい。当然、データ伝送にかかる時間を短縮させ、さらにグラフデータベースのトラバース効率を向上させるために、好ましくは演算子の実行結果データを記憶するためのバッファキュー及び対応する演算子を実行するためのスレッドが同じコンピュータ機器に設けられる。
【0039】
グラフデータベースへのトラバース操作を実行する過程で、各演算子の実行結果データが多くてコンピュータ機器の記憶容量が大きくなり、コンピュータ機器の動作性能に影響を与えることを回避するために、隣接する2つの演算子ごとにバッファキューをキュークラスター内に作成することもできることは理解するであろう。例示的には、キュークラスターについては、オープンソース分散型メッセージサブスクリプションシステムカフカ(kafka)を使用することができる。
【0040】
選択可能には、各演算子にスレッドをそれぞれ割り当てることは、利用可能なスレッドの数に基づいて、各演算子の実行順序に従って各演算子にスレッドをそれぞれ割り当てることであってもよい。又は、選択可能には、各演算子にスレッドを割り当てることは、予め設定されたスレッドと演算子との間の対照関係に応じて、各演算子に対応するスレッドを割り当てることであってもよい。
【0041】
例示的には、スレッドと演算子との間の対照関係は、スレッドの機能に応じて区分されてもよく、例えば、クエリスレッドは、クエリ操作に対応する演算子を実行するために使用され、変換スレッドは、変換操作に対応する演算子を実行するために使用され、フィルタリングスレッドは、フィルタリング操作に対応する演算子を実行するために使用されることなどがある。例示的には、スレッドと演算子との間の対照関係は、利用可能なスレッドの総数及び演算子の総数に基づいてグループに区分されてもよく、例えば利用可能なスレッドが5つ(番号が1~3に対応する)であり、演算子の総数が3つ(番号が1~3に対応する)である場合、演算子番号を利用可能なスレッドの総数で割って余数を求め、且つ余数の値に基づいてグループ化して実現することができる。例えば、演算子番号が1である場合、3の余数が1であり、それに応じてスレッド1を割り当て、演算子が2である場合、3の余数が2であり、それに応じてスレッド2を割り当て、演算子番号が3である場合、3の余数が3であり、それに応じてスレッド3を割り当てる。
【0042】
なお、利用可能なスレッドの数が演算子の数以上である場合、各演算子は、異なるスレッドが割り当てられて対応する演算子の操作を実行することができる。しかしながら、利用可能なスレッドの数が演算子の数よりも小さい場合、対応するスレッドを持っていない演算子が存在するため、同時実行スレッドの数が制限され、割り当て済みスレッドを再利用することでスレッドの再割り当てを実現することができる。例示的には、全てのスレッドが割り当てられた後、割り当てられた各スレッドの実行状態を監視し、割り当て済みスレッドが、このスレッドに割り当てられた演算子の操作を実行し終わった後、全ての演算子が割り当てられるまで当該スレッドに割り当て対象の演算子を割り当てることができる。
【0043】
S102、隣接する2つの演算子ごとに対して、前記隣接する2つ演算子のうちの前の演算子に対応するスレッドによって前の演算子の操作を実行し、前の演算子の実行結果データを前記隣接する2つの演算子に対応するバッファキューに書き込み、前記隣接する2つの演算子のうちの後の演算子に対応するスレッドによって、前記隣接する2つの演算子の前の演算子の実行結果データを前記バッファキューから後の演算子の操作の実行用に並列に読み取る。
【0044】
図1Bに示す隣接する2つの演算子の実行プロセスの概略図を参照すると、前の演算子に対応するスレッドは、当該演算子を実行して実行結果データD1、D2、D3及びD4を取得してバッファキューに順次書き込み、後の演算子に対応するスレッドは、実行結果データD1をバッファキューから読み取り、実行結果データD1を自体の入力とし、実行結果データD1に対してこのスレッドに対応する演算子の操作を実行し、同時に、前の演算子に対応するスレッドは、このスレッドに対応する演算子の操作を並列に実行し、実行結果データD5を生成し、実行結果データD5をバッファキューに書き込み、これにより、後の演算子は、一部の実行結果データを取得した後、すぐに自体のスレッドを起動して対応する演算子の操作を実行して、隣接する演算子の処理間のデータ待ち時間を節約する。
【0045】
従来技術では、グラフデータベースをトラバースする時に、通常、以下の2つの方式を使用する。
【0046】
方式(1)、各レイヤーの操作を1つの演算子として抽象化し、各演算子が反復可能なオブジェクトとして抽象化される。後のレイヤーの演算子が実行される時に前のレイヤーの演算子を反復して呼び出し、すべての演算子は、ネストされたマルチレイヤー反復を論理的に形成し、全てのレイヤー反復が整然として1ラウンド実行され、1つの最終結果が生成される。例えば、g.V(1).out(“friend”).has(‘age’,eq(25)).properties(‘name’)という語句の場合、その意味は、番号1のエンティティの年齢が25歳である友人の名前を見つけることであり、プロパティ(properties)演算子を1回実行すると、結果を取得するためにhas演算子を1回呼び出す必要があり、has演算子を呼び出すと、out演算子が呼び出され、out演算子を実行すると、V演算子が一回実行される。全ての演算子が1ラウンド実行されと、1つの最終結果が生成され、いかなる同時実行論理が存在せず、大規模なデータ量での実行効率が低いため、システムリソースの利用率が低下する。
【0047】
方式(2)、各レイヤーの演算子は、厳格な順序で計算され、次のレイヤーの演算子は、その上のレイヤーの演算子の出力を入力とする。例えば、上記例のトラバース語句が実行される場合、まずV(1)を実行し、番号1のエンティティを見つけ、次にout演算子を実行し、当該エンティティの全ての友人エンティティを見つける。次に、これらのエンティティに対してフィルタリング操作を実行して、その中の年齢が25であるエンティティをスクリーニングし、その名前を出力する。各レイヤーの演算子が厳格かつ整然として実行されるため、次のレイヤーは、その上のレイヤーのすべての実行結果を待った後にのみ、起動でき、各レイヤーの演算子の実行により実行フロー全体がブロックされ、同様に大規模なデータ量での実行効率が低い。
【0048】
本出願は、異なる演算子を異なるスレッドに割り当てることにより、前の演算子の実行結果データの全てではなく一部が生成された後、後の演算子のスレッドによって当該実行結果データを処理できるが、この時の前の演算子について対応する演算子操作が引き続き実行され、他の実行結果データが生成されることが理解できる。前の演算子を実行した後に次の演算子を実行する必要がないため、隣接する演算子の実行の待ち時間が短縮されると同時に、複数の演算子に対応するスレッドの並列実行という効果が達成され、それによってグラフデータベースのトラバース効率が向上する。
【0049】
グラフトラバース語句に複数の演算子が含まれているため、多数のバッファキューが作成される場合、異なるバッファキューを容易に区別するために、各スレッドに対応するアドレス情報を設定することができ、これにより、各スレッドは、演算子操作を実行する時に、バッファキューの正確な位置決めを実現することができる。
【0050】
例示的には、単一のコンピュータ機器内でスレッドを各演算子に割り当て、隣接する2つの演算子ごとにバッファキューを作成する場合、アドレス情報は、キュー番号又は占有ポートのポート情報などの各バッファキューのキュー識別子であってもよい。各スレッドがバッファキューのアドレス情報を検索することを容易にするために、コンピュータ機器にスレッドキュー関係テーブルを設定することができ、当該スレッドキュー関係テーブルには、いずれかのスレッドについて、当該スレッドによって実行された演算子の実行結果データを記憶しているバッファキューのキュー識別子、及び当該スレッドによって実行された演算子に対応する前の演算子の実行結果データを記憶しているバッファキューのキュー識別子が登録されている。1番目の演算子について前の演算子がないため、前の演算子の実行結果データを記憶するためのバッファキューのキュー識別子は、空又は他のデフォルト値に設定されてもよい。
【0051】
例示的には、複数のコンピュータ機器内でスレッドを各演算子に割り当て、隣接する2つの演算子ごとにバッファキューを作成する場合、1番目の演算子について、前記1番目の演算子の実行結果データを保存するためのバッファキューのアドレス情報を前記1番目の演算子を実行するためのコンピュータ機器に送信して、前記1番目の演算子を実行するためのコンピュータ機器が受信された前記アドレス情報に基づいて対応するバッファキューを位置決めするようにし、前記1番目の演算子以外のいずれかのターゲット演算子について、前記いずれかのターゲット演算子の前の演算子の実行結果データを保存するための第1のバッファキューのアドレス情報と、前記いずれかのターゲット演算子の実行結果データを保存するための第2のバッファキューのアドレス情報とを、前記いずれかのターゲット演算子を実行するためのコンピュータ機器に送信して、前記いずれかのターゲット演算子を実行するためのコンピュータ機器が受信されたアドレス情報に基づいて対応する前記第1のバッファキュー及び前記第2のバッファキューを位置決めする。
【0052】
バッファキューがキュークラスターに作成されている場合、バッファキューのアドレス情報にはキュー識別子が含まれ、バッファキューがコンピュータ機器に作成されている場合、バッファキューのアドレス情報には、キューが位置するコンピュータ機器の機器識別子、ポート情報及びキュー識別子のうちの少なくとも1つが含まれる。例示的には、バッファキューのアドレス情報は、ip:port:idという軽量レベルの実現方式を使用することで決定されてもよい。ここで、ipがコンピュータ機器の機器識別子に対応し、portがコンピュータ機器のポート情報に対応し、idがバッファキューのグローバルキュー識別子に対応する。具体的には、機器識別子(ip)とポート情報(port)によってキューの位置を決め、キュー識別子(id)によって具体的なバッファキューを位置決めすることができる。
【0053】
本出願の実施例は、入力されたグラフトラバース語句を取得し、グラフトラバース語句に含まれる少なくとも2つの演算子及び各演算子の実行順序を決定し、各演算子にスレッドをそれぞれ割り当て、隣接する2つの演算子ごとにバッファキューをそれぞれ作成し、隣接する2つの演算子ごとに対して、隣接する演算子のうちの前の演算子に対応するスレッドによって前の演算子への操作を実行し、前の演算子の実行結果データを隣接する2つの演算子に対応するバッファキューに書き込み、隣接する2つの演算子のうちの後の演算子に対応するスレッドによって、隣接する2つの演算子の前の演算子の実行結果データをバッファキューから後の演算子への操作の実行用に並列に読み取る。上記技術案では、隣接する2つの演算子ごとにバッファキューを作成することにより、隣接する2つの演算子の前の演算子が実行結果データを生成し、前記実行結果データがバッファキューに書き込まれた後、バッファキュー内のデータを読み取って後の演算子を実行することができ、それによって演算子への並列実行が実現され、トラバース操作の実行効率とシステムリソースの利用率が向上する。
【0054】
実施例2
図2は本出願の実施例2におけるグラフデータベースのトラバース方法のフローチャートである。本出願の実施例は、上記各実施例の技術案に基づいて最適化及び改善される。
【0055】
さらに、グラフデータベースのトラバース方法では、「各演算子の実行順序に従ってトークンデータを各演算子に対応するスレッド間で伝送することによって、トークンデータを受信したスレッドに、このスレッドに対応する演算子の操作の実行を開始させ、前記トークンデータを次の演算子に対応するスレッドに伝送する」という操作を追加し、次の演算子に対応するスレッドの起動を関連付けてトリガーする。
【0056】
図2に示すグラフデータベースのトラバース方法は、次のステップを含む:
【0057】
S201、入力されたグラフトラバース語句を取得し、前記グラフトラバース語句に含まれる少なくとも2つの演算子及び各演算子の実行順序を決定し、各演算子にスレッドをそれぞれ割り当て、隣接する2つの演算子ごとにバッファキューをそれぞれ作成する。
【0058】
S202、各演算子の実行順序に従って、トークンデータを各演算子に対応するスレッド間で伝送することによって、トークンデータを受信したスレッドに、このスレッドに対応する演算子の操作の実行を開始させ、前記トークンデータを次の演算子に対応するスレッドに伝送する。
【0059】
ここで、トークンデータは、設定された長さの文字列で構成され、電子デバイスに予め記憶され、各演算子に対応するスレッドが演算子の操作を実行する前に、異なるスレッド間で伝送されてもよい。
【0060】
例示的には、1番目の演算子に対応するスレッドがトークンデータを受信した後、トークンデータを受信した当該スレッドは、このスレッドに対応する演算子の操作を実行し、トークンデータを2番目の演算子に対応するスレッドに伝送し、このスレッドに対応する演算子の操作の実行を起動するように対応するスレッドをトリガーし、これによって類推し、前のスレッドが対応するスレッドに対応する演算子の操作を実行した後、トークンデータを次の演算子に対応するスレッドに伝送し、それによって各スレッドが演算子の操作の実行を自動的に起動するという目的を達成する。
【0061】
利用可能なスレッドの数が演算子の数以上である場合、各演算子について異なるスレッドを割り当て対応する演算子の操作を実行し、トークンデータの伝送により、対応する演算子の操作を実行するように各演算子に対応するスレッドを順次トリガーすることができることが理解できる。
【0062】
しかしながら、利用可能なスレッドの数が演算子の数よりも小さい場合、対応するスレッドを持っていない演算子が存在するため、同時実行スレッドの数が制限され、割り当て済みスレッドを再利用することでスレッドの再割り当てを実現することができる。
【0063】
例示的には、全てのスレッドが割り当てられた後、各割り当て済みスレッドの実行状態を監視することができ、割り当て済みスレッドがこのスレッドに割り当てられた演算子の操作を完了した後、全ての演算子が割り当てられるまで当該スレッドに割り当て対象の演算子を再割り当てる。
【0064】
それに応じて、各演算子の実行順序に従って、トークンデータを各演算子に対応するスレッド間で伝送する場合、再利用化された割り当て済みスレッドへの起動トリガーを次の方式により行うことができる。トークンデータを受信したスレッドは、次の演算子が対応するスレッドを持っているか否かを判断し、前記トークンデータを受信したスレッドは、次の演算子が対応するスレッドを持っていないと判断した場合、予め設定された条件を満たしている割り当て済みスレッドがある時に、前記割り当て済みスレッドを前記次の演算子に再割り当て、前記トークンデータを前記割り当て済みスレッドに伝送して、前記割り当て済みスレッドに前記次の演算子の操作を実行させ、ここで、前記予め設定された条件は、前記割り当て済みスレッドが既にこのスレッドに対応する演算子の操作を実行したことである。
【0065】
例えば、利用可能なスレッドの数が4であり、グラフトラバース語句に対応する演算子の数が5である場合、1番目の演算子に対応するスレッドは、このスレッドに対応する演算子の操作を実行し、トークンデータを2番目の演算子に対応するスレッドに伝送し、これにより、2番目の演算子に対応するスレッドは、このスレッドに対応する演算子の操作を実行し、トークンデータを次の演算子に対応するスレッドに伝送し、これによって類推し、4番目の演算子が実行される場合、トークンデータを5番目の演算子に対応するスレッドに伝送する必要があるが、この時に併発リソースが使い果たされるため、割り当てられたスレッドが対応する演算子の操作を実行して併発リソースを解放することを待つ必要がある。この時に1番目の演算子に対応するスレッドの実行が完了され、併発リソースが解放される場合、5番目の演算子に当該アイドルスレッドを割り当て、トークンデータを5番目の演算子に対応するスレッドに割り当て、これにより、2番目の演算子に対応するスレッドは、このスレッドに対応する演算子の操作を実行する。
【0066】
本出願の実施例の1つの選択可能な実施形態では、トークンデータをグローバル番号の形態で実現することができる。例示的には、各演算子に1つの順序番号を与えるとともに、1つのグローバル番号を電子機器に登録し、各演算子が実行されると、当該グローバル番号を次の演算子に対応する番号に変更し、これによって次の演算子の決定及び対応するスレッドの検索を行い、次の演算子に対応するスレッドを検索した後、グローバル番号の伝送を実現し、当該次の演算子が実行される時に、グローバル番号を変更し、これによって類推し、全ての演算子が実行されるまで続ける。
【0067】
ステップS203、各スレッドがこのスレッドに対応する演算子の操作を実行する場合、隣接する2つの演算子ごとに対して、前記隣接する2つ演算子のうちの前の演算子に対応するスレッドによって前の演算子の操作を実行し、前の演算子の実行結果データを前記隣接する2つの演算子に対応するバッファキューに書き込み、前記隣接する2つの演算子のうちの後の演算子に対応するスレッドによって、前記隣接する2つの演算子の前の演算子の実行結果データを前記バッファキューから後の演算子の操作の実行用に並列に読み取る。
【0068】
本出願の実施例の技術案では、各演算子の実行順序に従って、トークンデータを各演算子に対応するスレッド間で伝送して、トークンデータを受信したスレッドに、このスレッドに対応する演算子の操作を実行させ、前記トークンデータを次の演算子に対応するスレッドに伝送し、それによって各演算子に対応するスレッド間のトークンデータ伝送により、次の演算子に対応するスレッドの起動を関連付けてトリガーし、隣接する演算子に対応するスレッド間の待ち時間を短縮し、さらに実行効率を向上させる。
【0069】
実施例3
図3Aは本出願の実施例3におけるグラフデータベースのトラバース方法のフローチャートである。本出願の実施例は、上記各実施例の技術案に基づいて最適化及び改善される。
【0070】
さらに、グラフデータベースのトラバース方法では、大量の無効な計算を除去するために、「1番目の演算子以外のいずれかのターゲット演算子に対応するスレッドが演算子実行終了条件を満たしていると判断した場合、予め設定された操作を実行して、対応する演算子の操作を終了するように前記いずれかのターゲット演算子の前の各演算子に対応するスレッドに通知する」という操作が追加される。
【0071】
図3Aに示すグラフデータベースのトラバース方法は、次のステップを含む。
【0072】
S301、入力されたグラフトラバース語句を取得し、グラフトラバース語句に含まれる少なくとも2つの演算子及び各演算子の実行順序を決定し、各演算子にスレッドをそれぞれ割り当て、隣接する2つの演算子ごとにバッファキューをそれぞれ作成する。
【0073】
S302、隣接する2つの演算子ごとに対して、前記2つの隣接する演算子のうちの前の演算子に対応するスレッドによって前の演算子の操作を実行し、前の演算子の実行結果データを前記隣接する2つの演算子に対応するバッファキューに書き込み、前記隣接する2つの演算子のうちの後の演算子に対応するスレッドによって、前記隣接する2つの演算子の前の演算子の実行結果データを前記バッファキューから後の演算子の操作の実行用に並列に読み取る。
【0074】
S303、1番目の演算子以外のいずれかのターゲット演算子に対応するスレッドが演算子実行終了条件を満たしていると判断した場合、予め設定された操作を実行して、対応する演算子の操作を終了するように前記いずれかのターゲット演算子の前の各演算子に対応するスレッドに通知する。
【0075】
各演算子に対応するスレッドが対応する演算子の操作を実行する過程では、1番目の演算子の以外のいずれかのターゲット演算子に対応するスレッドが演算子実行終了条件を満たしている場合、予め設定された操作を実行することにより、対応する演算子への実行操作を終了するように当該いずれかのターゲット演算子の前の各演算子に対応するスレッドに通知し、当該いずれかのターゲット演算子の後の各演算子に対応するスレッドは、演算子に対応する操作を実行し続けて、最終的な実行結果を得ることが理解され得る。例示的には、演算子実行終了条件は、必要な全てのデータを取得したことであってもよい。上記解決策では予め設定された操作を実行し、終了情報を生成し、バッファキューチェーン内のデータフローの反対方向に沿って終了情報を伝送することにより、スレッドは、レイヤーごとに閉じられる。
【0076】
本出願の実施例の1つの選択可能な実施形態では、予め設定された操作を実行して、対応する演算子の操作を終了するように前記いずれかのターゲット演算子の前の各演算子に対応するスレッドに通知することは、前記いずれかのターゲット演算子を現在の演算子とし、現在の演算子の前の演算子の実行結果データを保存するためのバッファキューの読み取り側状態を閉じて、前の演算子に対応するスレッドが当該バッファキューの読み取り側状態が閉じられていることを検出する時に、当該バッファキューへのデータの書き込みを停止し、当該バッファキューの書き込み側状態を閉じて前の演算子の実行を終了するようにし、前の演算子を新しい現在の演算子とし、前記1番目の演算子の実行が終了されるまで現在の演算子の前の演算子の実行結果データを保存するためのバッファキューの読み取り側状態を閉じる操作を実行するために戻ることであってもよい。
【0077】
具体的には、1番目の演算子の以外のいずれかのターゲット演算子に対応するスレッドが演算子実行終了条件を満たしている場合、当該いずれかのターゲット演算子を現在の演算子とし、当該現在の演算子の前の演算子の実行結果データを保存するためのバッファキューの読み取り側状態を閉じて、現在の演算子のスレッドがバッファキューから前の演算子の実行結果データを引き続き読み取ることができないようにする。それに応じて、前の演算子に対応するスレッドが、その実行結果データを記憶するバッファキューの読み取り終了状態が閉じられていることを検出すると、その後の演算子がこのスレッドに対応する演算子の実行結果データの取得を行う必要がなく、したがって、それは、当該バッファキューへのデータの書き込みを能動的に停止し、つまり、このスレッドに対応する演算子の実行を停止し、実行結果データの生成を阻止し、同時に、当該バッファキューの書き込み側状態を閉じ、バッファキューへのデータの書き込みを受動的に停止する。当該前の演算子を新しい現在の演算子とし、前記1番目の演算子への実行が終了されるまで現在の演算子の前の演算子の実行結果データを保存するためのバッファキューの読み取り側状態を閉じる操作を循環して実行する。
【0078】
図3Bに示す隣接する2つの演算子ごとに終了情報を伝送する概略図を参照すると、後の演算子が実行結果データD1をバッファキューから取得した場合、演算子実行終了条件を満たしていると決定し、この時にバッファキューの読み取り側状態を閉じて、後の演算子がその後で実行結果データD2、D3及びD4などをバッファキューから読み取ることを禁止する。前の演算子が、当該バッファキューの読み取り側状態が閉じられていることを検出する場合、バッファキューへの実行中の演算子の実行結果データD5の書き込みを停止し、バッファキューの書き込み側状態を閉じて、前の演算子に対応するスレッドがバッファキューにデータを書き込むことを禁止し、それによって当該前の演算子の実行を終了し、終了情報の逆伝送を実現する。当該前の演算子を新しい後の演算子とし、その前の演算子に対応するバッファキューの読み取り側状態を閉じ続け、これによって類推し、1番目の演算子の実行が終了されるまで続ける。
【0079】
本出願の実施例の別の選択可能な実施形態では、予め設定された操作を実行して、対応する演算子の操作を終了するように前記いずれかのターゲット演算子の前の各演算子に対応するスレッドに通知することは、終了情報を予め設定されたグローバル情報テーブルに登録して、前記いずれかのターゲット演算子の前の各演算子に対応するスレッドが前記終了情報を読み取ると、対応する演算子の操作を終了することであってもよい。
【0080】
具体的には、グローバル情報テーブルを予め設定することができ、各演算子は、いずれも当該グローバル情報テーブルに情報を登録又は読み取ることができる。1番目の演算子以外のいずれかの演算子に対応するスレッドが演算子実行終了条件を満たしていると決定された場合、終了情報を予め設定されたグローバル情報テーブルに登録する。グラフトラバース語句に含まれる各演算子に対応するスレッドを実行すると、グローバル情報テーブルから終了情報を読み取ることができるため、グローバル情報テーブルに終了情報が登録されている場合、いずれかのターゲット演算子の前の各演算子に対応するスレッドは、対応する演算子の操作を終了し、これにより、当該いずれかのターゲット演算子の入力として、新しい実行結果データが生成されない。
【0081】
上記方式は、当該いずれかのターゲット演算子の前の演算子が終了情報を同時に読み取り、実行結果データの生成を終了し、各隣接する演算子の実行が終了されると時間遅延がないため、無効な計算の発生をさらに減少させることができることが理解され得る。また、グラフトラバース語句に含まれる各演算子に対応するスレッド間で情報共有を実現するために、他のグローバル情報をグラフトラバーステーブルに同時に登録することができる。
【0082】
本出願の実施例は、1番目の演算子以外のいずれかのターゲット演算子に対応するスレッドが演算子実行終了条件を満たしていると決定された場合、予め設定された操作を実行して、対応する演算子の操作を終了するように前記いずれかのターゲット演算子の前の各演算子に対応するスレッドに通知する。上記技術案では、後の演算子が終了条件を満たしていると決定される時に、予め設定された操作を実行して、実行を終了するように前の全ての演算子に通知することにより、フィードバックメカニズムを通じて潜在的な多数の無効な計算が除去される。
【0083】
実施例4
図4は本出願の実施例4におけるグラフデータベースのトラバース装置の構成図である。本出願の実施例は、グラフデータベースでデータトラバースを行うことに適用する。この装置は、ソフトウェア及び/又はハードウェアで実現され、且つ具体的には、一定のデータコンピューティング機能を備えた電子機器に配置される。
【0084】
図4に示すグラフデータベースのトラバース装置400は、トラバース語句取得モジュール401と演算子並列実行モジュール402とを含む。
【0085】
トラバース語句取得モジュール401は、入力されたグラフトラバース語句を取得し、グラフトラバース語句に含まれる少なくとも2つの演算子及び各演算子の実行順序を決定し、各演算子にスレッドをそれぞれ割り当て、隣接する2つの演算子ごとにバッファキューをそれぞれ作成するように構成され、
演算子並列実行モジュール402は、隣接する2つの演算子ごとに対して、前記2つの隣接する演算子のうちの前の演算子に対応するスレッドによって前の演算子の操作を実行し、前の演算子の実行結果データを前記隣接する2つの演算子に対応するバッファキューに書き込み、前記隣接する2つの演算子のうちの後の演算子に対応するスレッドによって、前記隣接する2つの演算子の前の演算子の実行結果データを前記バッファキューから後の演算子の操作の実行用に並列に読み取るように構成される。
【0086】
本出願の実施例は、トラバース語句取得モジュールにより、入力されたグラフトラバース語句を取得し、グラフトラバース語句に含まれる少なくとも2つの演算子及び各演算子の実行順序を決定し、各演算子にスレッドをそれぞれ割り当て、隣接する2つの演算子ごとにバッファキューをそれぞれ作成し、演算子並列実行モジュールにより、隣接する2つの演算子ごとに対して、隣接する2つ演算子のうちの前の演算子に対応するスレッドによって前の演算子の操作を実行し、前の演算子の実行結果データを隣接する2つの演算子に対応するバッファキューに書き込み、隣接する2つの演算子のうちの後の演算子に対応するスレッドによって、隣接する2つの演算子の前の演算子の実行結果データをバッファキューから後の演算子の操作の実行用に並列に読み取る。上記技術案では、隣接する2つの演算子ごとにバッファキューを作成することにより、隣接する2つの演算子の前の演算子が実行結果データを生成し、前記実行結果データがバッファキューに書き込まれた後、バッファキュー内のデータを読み取って後の演算子を実行することができ、それによって演算子の並列実行が実現され、トラバース操作の実行効率とシステムリソースの利用率が向上する。
【0087】
さらに、当該装置は、
各演算子の実行順序に従って、トークンデータを各演算子に対応するスレッド間で伝送することによって、トークンデータを受信したスレッドに、このスレッドに対応する演算子の操作の実行を開始させ、前記トークンデータを次の演算子に対応するスレッドに伝送するように構成されるトークン伝送モジュールをさらに含む。
【0088】
さらに、トラバース語句取得モジュール401は、各演算子にスレッドをそれぞれ割り当てるように実行する時に、具体的には、
利用可能なスレッドの数に基づいて、各演算子の実行順序に従って各演算子にスレッドをそれぞれ割り当てるように構成される。
【0089】
さらに、前記利用可能なスレッドの数が演算子の数よりも少ない場合、トラバース語句取得モジュール401は、各演算子の実行順序に従ってトークンデータを各演算子に対応するスレッド間で伝送する時に、具体的には、
前記トークンデータを受信したスレッドが、次の演算子が対応するスレッドを持っているか否かを判断し、
トークンデータを受信したスレッドが、次の演算子が対応するスレッドを持っていないと判断した場合、予め設定された条件を満たしている割り当て済みスレッドがある時に、前記割り当て済みスレッドを前記次の演算子に再割り当て、前記トークンデータを前記割り当て済みスレッドに伝送して、前記割り当て済みスレッドに前記次の演算子の操作を実行させるように構成され、
ここで、前記予め設定された条件は、前記割り当て済みスレッドがこのスレッドに対応する演算子の操作を実行し終わったことである。
【0090】
さらに、トラバース語句取得モジュール401は、各演算子にスレッドをそれぞれ割り当て、隣接する2つの演算子ごとにバッファキューをそれぞれ作成するように実行する時に、具体的には、
各演算子にローカルコンピュータ機器のスレッドをそれぞれ割り当て、前記ローカルコンピュータ機器において隣接する2つの演算子ごとにバッファキューをそれぞれ作成し、又は、
各演算子について、前記演算子を実行するためのコンピュータ機器を少なくとも2つのコンピュータ機器から決定し、決定されたコンピュータ機器のスレッドを前記演算子に割り当て、
少なくとも2つのコンピュータ機器からバッファキューを作成するためのコンピュータ機器を隣接する2つの演算子ごとに決定し、決定されたコンピュータ機器において前記隣接する2つの演算子に対応するバッファキューを作成するように構成される。
【0091】
さらに、当該装置は、アドレス情報保存モジュールをさらに含み、前記アドレス情報保存モジュールは、具体的には、
1番目の演算子について、前記1番目の演算子の実行結果データを保存するためのバッファキューのアドレス情報を前記1番目の演算子を実行するためのコンピュータ機器に送信して、前記1番目の演算子を実行するためのコンピュータ機器が受信された前記アドレス情報に基づいて対応するバッファキューを位置決めするようにし、
前記1番目の演算子以外のいずれかのターゲット演算子について、前記いずれかのターゲット演算子の前の演算子の実行結果データを保存するための第1のバッファキューのアドレス情報と前記いずれかのターゲット演算子の実行結果データを保存するための第2のバッファキューのアドレス情報とを、前記いずれかのターゲット演算子を実行するためのコンピュータ機器に送信して、前記いずれかのターゲット演算子を実行するコンピュータ機器が受信されたアドレス情報に基づいて対応する前記第1のバッファキュー及び前記第2のバッファキューを位置決めするように構成される。
【0092】
さらに、前記バッファキューがキュークラスターに作成されている場合、前記バッファキューのアドレス情報にはキュー識別子が含まれ、
前記バッファキューがコンピュータ機器に作成されている場合、前記バッファキューのアドレス情報には、キューが位置するコンピュータ機器の機器識別子、ポート情報及びキュー識別子のうちの少なくとも1つが含まれる。
【0093】
さらに、当該装置は、
1番目の演算子以外のいずれかのターゲット演算子に対応するスレッドが、演算子実行終了条件を満たしていると決定された場合、予め設定された操作を実行して、対応する演算子の操作を終了するように前記いずれかのターゲット演算子の前の各演算子に対応するスレッドに通知するように構成されるスレッド終了モジュールをさらに含む。
【0094】
さらに、スレッド終了モジュールは、予め設定された操作を実行して、対応する演算子の操作を終了するように前記いずれかのターゲット演算子の前の各演算子に対応するスレッドに通知するという操作を実行する時に、具体的には、
前記いずれかのターゲット演算子を現在の演算子とし、現在の演算子の前の演算子の実行結果データを保存するためのバッファキューの読み取り側状態を閉じて、前の演算子に対応するスレッドが当該バッファキューの読み取り側状態が閉じられていることを検出する時に、当該バッファキューへのデータの書き込みを停止し、当該バッファキューの書き込み側状態を閉じて前の演算子の実行を終了するようにし、前の演算子を新しい演算子とし、前記1番目の演算子の実行が終了されるまで現在の演算子の前の演算子の実行結果データを保存するためのバッファキューの読み取り側状態を閉じる操作を実行するために戻り、又は、
終了情報を予め設定されたグローバル情報テーブルに登録して、前記いずれかのターゲット演算子の前の各演算子に対応するスレッドが前記終了情報を読み取ると、対応する演算子の操作を終了するように構成される。
【0095】
上記グラフデータベースのトラバース装置は、本出願の任意の実施例によって提供されるグラフデータベースのトラバース方法を実行することができ、グラフデータベースのトラバース方法を実行するための対応する機能モジュールと有益な効果を備える。
【0096】
実施例5
本出願の実施例によれば、本出願は、電子機器と読み取り可能な記憶媒体とをさらに提供する。
【0097】
図5は本出願の実施例によるグラフデータベースのトラバース方法を実現するための電子機器のブロック図である。電子機器は、ラップトップコンピュータ、デスクトップコンピュータ、ワークステーション、パーソナルデジタルアシスタント、サーバ、ブレードサーバ、メインフレーム及び他の適切なコンピュータなどの様々な形態のデジタルコンピュータを表すことを図る。電子機器は、さらに携帯情報端末、セルラー電話、スマートフォン、ウェアラブルデバイス及び他の類似するコンピューティングデバイスなどの様々な形態の移動装置を表すこともできる。本明細書に示されているコンポーネント、それらの接続及び関係、並びにそれらの機能は、例だけであり、かつ本明細書での説明及び/又は要求される本出願の実現を制限することを意図するものではない。
【0098】
図5に示すように、当該電子機器は、1つ又は複数のプロセッサ501と、メモリ502と、高速インターフェース及び低速インターフェースを含む、各コンポーネントを接続するためのインターフェースとを含む。各コンポーネントは、異なるバスで相互に接続され、かつ共通のマザーボードに取り付けられてもよいか、又は必要に応じて他の方式で取り付けられてもよい。プロセッサは、外部入力/出力装置(インタフェースに結合された表示装置など)にGUIのグラフィック情報を表示するためにメモリ内又はメモリ上に記憶される命令を含む、電子機器内に実行される命令を処理することができる。他の実施形態では、必要の場合、複数のプロセッサ及び/又は複数のバスを複数のメモリと複数のメモリとともに使用することができる。同様に、複数の電子機器を接続することができ、各装置は、部分の必要な操作を提供することができる(例えば、サーバアレイ、1つのブレード型サーバ、又はマルチプロセッサシステムとする)。
図5では、一つのプロセッサ501は例として挙げられる。
【0099】
メモリ502は、本出願による非一時的コンピュータ読み取り可能な記憶媒体である。ここで、前記メモリには、前記少なくとも1つのプロセッサが本出願によるグラフデータベースのトラバース方法を実行するように、少なくとも1つのプロセッサで実行可能な命令が記憶される。本出願の非一時的コンピュータ読み取り可能な記憶媒体は、コンピュータに本出願によるグラフデータベースのトラバース方法を実行させるためコンピュータ命令を記憶している。
【0100】
メモリ502は、非一時的コンピュータ読み取り可能な記憶媒体として、非一時的ソフトウェアプログラム、非一時的コンピュータ実行可能プログラム、及び本出願の実施例におけるグラフデータベースのトラバース方法に対応するプログラム命令/モジュール(例えば、
図4に示すトラバース語句取得モジュール401と演算子並列実行モジュール402とを含むグラフデータベースのトラバース装置400)などのモジュールを記憶するように構成されてもよい。プロセッサ501は、メモリ502に記憶されている非一時的ソフトウェアプログラム、命令及びモジュールを実行することにより、サーバの様々な機能アプリケーション及びデータ処理を実行し、即ち上記方法の実施例におけるグラフデータベースのトラバース方法を実現する。
【0101】
メモリ502は、プログラム記憶領域とデータ記憶領域とを含むことができ、ここで、プログラム記憶領域は、オペレーティングシステムと、少なくとも一つの機能に必要なアプリケーションプログラムとを記憶することができ、データ記憶領域は、グラフデータベースのトラバース方法を実行するための電子機器の使用に応じて作成されたデータなどを記憶することができる。また、メモリ502は、高速ランダムアクセスメモリを含むことができ、非一時的メモリ、例えば少なくとも一つの磁気ディスク記憶デバイス、フラッシュメモリデバイス、又は他の非一時的ソリッドステートストレージデバイスをさらに含むことができる。いくつかの実施例では、メモリ502は、プロセッサ501に対して遠隔に設けられたメモリを選択的に含むことができ、これらの遠隔メモリは、ネットワークを介してグラフデータベースのトラバース方法を実行するための電子機器に接続されてもよい。上記ネットワークの実施例は、インターネット、イントラネット、ローカルエリアネットワーク、移動通信ネットワーク及びそれらの組み合わせを含むがこれらに限定されない。
【0102】
グラフデータベースのトラバース方法を実行するための電子機器は、入力装置503と出力装置504とをさらに含むことができる。プロセッサ501、メモリ502、入力装置503と出力装置504は、バス又は他の方式で接続されてもよく、
図5ではバスによる接続が例として挙げられる。
【0103】
入力装置503は、入力された数字又は文字情報を受信し、グラフデータベースのトラバース方法を実行するための電子機器のユーザ設定及び機能制御に関するキー信号入力を生成することができ、例えばタッチスクリーン、キーパッド、マウス、トラックパッド、タッチパッド、インジケータースティック、一つ又は複数のマウスボタン、トラックボール、ジョイスティックなどの入力装置である。出力装置504は、表示装置、補助照明装置(例えば、LED)及び触覚フィードバック装置(例えば、振動モータ)などを含むことができる。当該表示装置は、液晶ディスプレイ(LCD)、発光ダイオード(LED)ディスプレイとプラズマディスプレイを含むことができるがこれらに限定されない。いくつかの実施形態では、表示装置は、タッチスクリーンであってもよい。
本出願の実施例によれば、コンピュータプログラムが提供される。当該コンピュータプログラムにおける命令が実行された場合に、本出願の実施例のグラフデータベースのトラバース方法が実行される。
【0104】
本明細書で説明されるシステム及び技術の様々な実施形態は、デジタル電子回路システム、集積回路システム、特定用途向けASIC(特定用途向け集積回路)、コンピュータハードウェア、ファームウェア、ソフトウェア、及び/又はそれらの組み合わせで実現されてもよい。これらの様々な実施形態は、一つ又は複数のコンピュータプログラムで実施されることを含むことができ、当該一つ又は複数のコンピュータプログラムは、少なくとも一つのプログラマブルプロセッサを含むプログラマブルシステムで実行及び/又は解釈されてもよく、当該プログラマブルプロセッサは、専用又は汎用プログラマブルプロセッサであってもよく、記憶システム、少なくとも1つの入力装置、及び少なくとも1つの出力装置からデータ及び命令を受信し、かつデータ及び命令を当該記憶システム、当該少なくとも一つの入力装置及び当該少なくとも一つの出力装置に伝送することができる。
【0105】
これらのコンピューティングプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、又はコードとも呼ばれる)は、プログラマブルプロセッサの機械命令を含み、かつ高度レベルのプロセス及び/又はオブジェクト向けプログラミング言語、及び/又はアセンブリ/機械言語で実現されてもよい。本明細書で使用されるように、用語「機械読み取り可能な媒体」及び「コンピュータ読み取り可能な媒体」は、機械命令及び/又はデータをプログラマブルプロセッサに提供するための任意のコンピュータプログラム製品、機器、及び/又は装置(例えば、磁気ディスク、光ディスク、メモリ、プログラマブルロジックデバイス(PLD))を指し、機械読み取り可能な信号である機械命令を受信する機械読み取り可能な媒体を含む。用語「機械読み取り可能な信号」は、機械命令及び/又はデータをプログラマブルプロセッサに提供するための任意の信号を指す。
【0106】
ユーザとのインタラクションを提供するために、本明細書で説明されるシステム及び技術をコンピュータで実施することができ、当該コンピュータは、情報をユーザに表示するための表示装置(例えば、CRT(陰極線管)又はLCD(液晶ディスプレイ)モニタ)と、キーボード及びポインティングデバイス(例えば、マウス又はトラックボール)とを有し、ユーザは、当該キーボード及び当該ポインティングデバイスによって入力をコンピュータに提供することができる。他の種類の装置は、ユーザとのインタラクションを提供するように構成されてもよい。例えば、ユーザに提供されるフィードバックは、任意の形態のセンシングフィードバック(例えば、視覚フィードバック、聴覚フィードバック、又は触覚フィードバック)であってもよく、かつ任意の形態(音響入力と、音声入力と、触覚入力とを含む)でユーザからの入力を受信することができる。
【0107】
本明細書で説明されるシステム及び技術は、バックエンドコンポーネントを含むコンピューティングシステム(例えば、データサーバとする)、又はミドルウェアコンポーネントを含むコンピューティングシステム(例えば、アプリケーションサーバ)、又はフロントエンドコンポーネントを含むコンピューティングシステム(例えば、グラフィカルユーザインタフェース又はウェブブラウザを有するユーザコンピュータであり、ユーザは、当該グラフィカルユーザインタフェース又は当該ウェブブラウザによって本明細書で説明されるシステム及び技術の実施形態とのインタラクションを行うことができる)、又はこのようなバックエンドコンポーネント、ミドルウェアコンポーネント、又はフロントエンドコンポーネントの任意の組み合わせを含むコンピューティングシステムで実施されてもよい。任意の形態又は媒体のデジタルデータ通信(例えば、通信ネットワーク)によってシステムのコンポーネントを相互に接続することができる。通信ネットワークの例としては、ローカルエリアネットワーク(LAN)と、ワイドエリアネットワーク(WAN)と、インターネットとを含む。
【0108】
コンピュータシステムは、クライアントとサーバとを含むことができる。クライアントとサーバは、一般的には、互いに離れており、通常、通信ネットワークを介してインタラクションを行う。クライアントとサーバとの関係は、対応するコンピュータ上で実行されかつ相互にクライアント-サーバ関係を有するコンピュータプログラムによって生成される。
【0109】
本出願の実施例は、入力されたグラフトラバース語句を取得し、グラフトラバース語句に含まれる少なくとも2つの演算子及び各演算子の実行順序を決定し、各演算子にスレッドをそれぞれ割り当て、隣接する2つの演算子ごとにバッファキューをそれぞれ作成し、隣接する2つの演算子ごとに対して、隣接する2つの演算子のうちの前の演算子に対応するスレッドによって前の演算子の操作を実行し、前の演算子の実行結果データを隣接する2つの演算子に対応するバッファキューに書き込み、隣接する2つの演算子のうちの後の演算子に対応するスレッドによって、隣接する2つの演算子の前の演算子の実行結果データをバッファキューから後の演算子の操作の実行用に並列に読み取る。上記技術案では、隣接する2つの演算子ごとにバッファキューを作成することにより、隣接する2つの演算子の前の演算子が実行結果データを生成し、前記実行結果データがバッファキューに書き込まれた後、バッファキュー内のデータを読み取って後の演算子を実行することができ、それによって演算子の並列実行が実現され、トラバース操作の実行効率とシステムリソースの利用率が向上する。
【0110】
上記様々な形態のフローを使用して、ステップを並べ替え、追加、又は削除することができることを理解すべきである。例えば、本出願に記載されている各ステップは、本出願で開示されている技術案の所望の結果さえ達成すれば、並列に実行されてもよいし、順次実行されてもよいし、異なる順序で実行されてもよいが、本明細書では限定されない。
【0111】
上記具体的な実施形態は、本出願の保護範囲を制限するためのものではない。当業者は、設計要件及び他の要因に従って、様々な修正、組み合わせ、サブコンビネーション及び置換を行うことができることを理解すべきである。本出願の精神及び原則の範囲内で行われたいかなる修正、同等の置換と改良などは、いずれも本出願の保護範囲内に含まれるべきである。