(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-09-13
(45)【発行日】2023-09-22
(54)【発明の名称】K-最近傍探索のための分散型インメモリ空間データストア
(51)【国際特許分類】
G06F 16/909 20190101AFI20230914BHJP
【FI】
G06F16/909
(21)【出願番号】P 2021560062
(86)(22)【出願日】2019-04-12
(86)【国際出願番号】 CN2019082349
(87)【国際公開番号】W WO2020206665
(87)【国際公開日】2020-10-15
【審査請求日】2021-10-27
(73)【特許権者】
【識別番号】518236797
【氏名又は名称】グラブタクシー ホールディングス プライベート リミテッド
【氏名又は名称原語表記】GRABTAXI HOLDINGS PTE. LTD.
【住所又は居所原語表記】3 Media Close, #01-03/06, Singapore 138498, Singapore
(74)【代理人】
【識別番号】100137095
【氏名又は名称】江部 武史
(74)【代理人】
【識別番号】100091627
【氏名又は名称】朝比 一夫
(72)【発明者】
【氏名】ザン, ジイン
(72)【発明者】
【氏名】ファン, シャオチェン
(72)【発明者】
【氏名】サン, チャオタン
(72)【発明者】
【氏名】ゼン, シャオリン
【審査官】甲斐 哲雄
(56)【参考文献】
【文献】特開2009-199151(JP,A)
【文献】米国特許出願公開第2017/0139913(US,A1)
【文献】特開2019-040292(JP,A)
【文献】特開2013-178677(JP,A)
【文献】特開2005-275678(JP,A)
【文献】米国特許第6879980(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
G08G 1/00-99/00
(57)【特許請求の範囲】
【請求項1】
特定の位置に対して最近傍のオブジェクトを決定するために、複数の移動オブジェクトを探索するように構成されたデータベースシステムであって、
前記複数の移動オブジェクトのそれぞれは、位置データを含む属性を有し、複数のセルで構成される複数の空間的に異なるサブ空間で構成される地理的空間内に位置し、
前記データベースシステムは、
複数の保存ノードと、
オペレーティングシステムと、を含み、
前記オペレーティングシステムは、前記複数の保存ノード間のオブジェクトデータの保存を制御するように構成され、前記複数の保存ノードのそれぞれの1つにおいて、1つまたは複数の空間的に異なるサブ空間を代表するデータを保存させるように構成され、
前記オブジェクトの前記位置データは、各前記複数の保存ノード内の各前記空間的に異なるサブ空間を構成するセルに対して前記オブジェクトをインデックスするために使用され、
前記データは、前記複数の空間的に異なるサブ空間のそれぞれの読み込み及び/又は書き込みロードに基づいて、サブ空間から、どのサブ空間がどの保存ノードに属するかを明示的に定義する保存ノードへの設定可能なマッピングを使用して前記複数の保存ノードに保存されることを特徴とするデータベースシステム。
【請求項2】
前記空間的に異なるサブ空間の前記データは、単一の保存ノードに完全に保存されている請求項1に記載のデータベースシステム。
【請求項3】
前記オペレーティングシステムは、前記空間的に異なるサブ空間の前記データが、データレプリカを形成するために前記複数の保存ノードに複製されるように構成されている請求項1または2に記載のデータベースシステム。
【請求項4】
前記オペレーティングシステムは、前記空間的に異なるサブ空間に対する書き込み動作が、全ての関連する前記データレプリカに伝搬されるように構成されている請求項3に記載のデータベースシステム。
【請求項5】
前記データレプリカの数は、使用ケースに基づいて構成可能であることを請求項3または4に記載のデータベースシステム。
【請求項6】
前記オペレーティングシステムは、k-最近傍クエリに応答するために、幅優先探索アルゴリズムを動作させるように構成されている請求項1ないし5のいずれかに記載のデータベースシステム。
【請求項7】
前記データは、コンシステントハッシュ法によって、前記複数の保存ノードに保存される請求項1に記載のデータベースシステム。
【請求項8】
ロードバランシングのために、前記オペレーティングシステムは、サブ空間から、どのサブ空間がどのノードに属するかを明示的に定義する保存ノードへのユーザ設定可能なマッピングと、コンシステントハッシュ法との両方を使用するように構成される請求項1に記載のデータベースシステム。
【請求項9】
コンシステントハッシュ法は、前記マッピングに含まれないデータのために使用される請求項8に記載のデータベースシステム。
【請求項10】
前記マッピングにおける1つのノードは、新たなジョインをブロードキャストするための静的コーディネータとして使用される請求項1に記載のデータベースシステム。
【請求項11】
前記オペレーティングシステムは、ノード発見のためにゴシップスタイルのメッセージングを適用する請求項1に記載のデータベースシステム。
【請求項12】
前記データベースシステムは、配車アプリケーション用であり、
前記オブジェクトは、サービスプロバイダの車両である請求項1ないし11のいずれかに記載のデータベースシステム。
【請求項13】
前記データベースシステムは、インメモリに保存される
請求項1ないし12のいずれかに記載のデータベースシステム。
【請求項14】
複数のセルで構成される複数の空間的に異なるサブ空間で構成される地理的空間内の特定の位置に対して、高速で最近傍探索することができるために、複数の移動オブジェクトを表すデータを保存する方法であって、
前記複数の移動オブジェクトのそれぞれは、位置データを含む属性を有し、
データベースシステムは、複数の保存ノードを含み、
前記方法は、プロセッサを含む装置によって実行され、
1つまたは複数の空間的に異なるサブ空間を代表するデータが各単一の保存ノードに保存されるように、前記複数の保存ノードの間でオブジェクトデータを保存する工程と、
各前記複数の保存ノード内の各前記空間的に異なるサブ空間を構成するセルに対して前記複数の移動オブジェクトをインデックスするために、各前記複数の移動オブジェクトの現在の位置データを使用する工程と、
どのサブ空間がどの保存ノードに属するかを明示的に定義する保存ノードに前記サブ空間をマッピングするために、前記複数の空間的に異なるサブ空間のそれぞれの読み込み及び/又は書き込みロードを使用する工程と、を含むことを特徴とする方法。
【請求項15】
請求項1ないし12のいずれかに記載されたデータベースシステムを含む、kNN探索用の拡張可能なインメモリ空間データストア。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般に、データ保存および検索に関する。より詳細に、もっぱら、本発明は、K-最近傍探索を容易にするためのデータベースシステムに関する。例示的な実施形態は、配車(ride hailing)サービスを管理する分野にある。
【背景技術】
【0002】
典型的な配車シナリオでは、潜在的なユーザは、スマートフォンアプリを介して予約リクエストを発行する。そして、これは、要求されたサービスを提供するために利用可能な最も適した近くのサービスプロバイダを派遣することによって、ホストによって実行される。
【0003】
最も近い移動オブジェクト(例えば、ドライバ)をリアルタイムで検索することは、配車サービスが対処する必要がある基本的な問題の1つである。ホストは、サービスプロバイダのリアルタイムの地理的位置を追跡し、各予約リクエストに対しユーザの位置の近くのk個の利用可能なサービスプロバイダを探索する。なぜなら、最も近いサービスプロバイダが常に最良の選択ではないからである。問題を簡単にするために、経路距離よりむしろ、直線距離を使用する。
【0004】
静的オブジェクトについてのk-近傍法(kNN)クエリ(例えば、k個の最も近いレストランを検索すること)、または、移動オブジェクトについての連続的なk-近傍法クエリ(例えば、移動している車に対してk個の最も近いガソリンスタンドを見つけること)の既存の研究と異なり、問題は、動的k-近傍クエリを実行する移動しているオブジェクトを伴う。これは、チャレンジである。
【0005】
[先行技術文献]
最も近いレストランの検索のような静的オブジェクトのk-最近傍探索は、オブジェクトのインデクシングに適切にフォーカスする。2つの主要なインデクシングアプローチ、すなわち、オブジェクトベースのアプローチおよびソリューションベースのアプローチがある。
【0006】
オブジェクトベースのインデクシングは、オブジェクトの位置をターゲットとする。R-ツリーは、最小外接矩形を使用して、k-最近傍法が空間結合によって計算される階層インデックスを構築する。ソリューションベースのアプローチは、予め計算されたソリューション空間をインデクシングすること(例えば、ボロノイ図に基づいてソリューション空間を分割すること)にフォーカスし、ボロノイセルに対応する最近傍探索の結果を予め計算する。他のアプローチは、前記2つのアプローチを組み合わせ、ボロノイセル内にある任意のクエリの最近傍のオブジェクトを保存するグリッドパーティションインデックスを提案する。
【0007】
インデックスに基づいて静的オブジェクトのkNNクエリを速めるために、k個の近傍オブジェクトの優先リストを維持しながら、最良の最初の探索を行うためのR-ツリーに基づいて、分岐および結合アルゴリズムを開発することが提案されている。
【0008】
別のアプローチでは、静的オブジェクトについて移動するkNNクエリを研究する。それは、新しい位置でのk-近傍クエリが前の結果に含まれるように、k個の結果アイテム以上を戻す。
【発明の概要】
【発明が解決しようとする課題】
【0009】
しかしながら、移動オブジェクトのこのような複雑なインデックスを維持することは、頻繁な位置更新が問題となる。
【0010】
インデクシング移動/モバイルオブジェクトは、次の2つのカテゴリに分類される。それらは、(1)移動オブジェクトの現在および予想される将来の位置のインデクシング、および(2)複数経路(trajectory)のインデクシングである。
【0011】
一つの以前の研究は、移動するオブジェクトの現在および予想される将来の位置のインデクシングにフォーカスし、時間パラメータ化されたR-ツリー(すなわち、TPR-ツリー)インデックスを提案する。TPR-ツリー内の外接矩形は、時間の関数であり、それらが移動するとき、囲まれたデータ点または他の矩形に連続的に従う。
【0012】
インデクシング複数経路アプローチは、複数経路履歴を保存し、R-ツリーの典型的範囲の探索を可能にする複数経路のバンドルツリー(TB-ツリー)を提案する。我々の設定では、オブジェクトの過去の複数経路は関心がないことに留意されたい。
【0013】
静的オブジェクトについての連続的なk-最近傍探索は、例えば、予め指定された経路に沿った任意の点上の移動車両の3つの最も近いガソリンスタンドを見つけることに注目されている。
【0014】
オブジェクトがインデクシングされる従来のアプローチとは対照的に、別のアプローチは、クエリ(すなわち、Q-インデックス)およびオブジェクト(すなわち、速度制約インデックス(VCI))の両方にインデックスを構築する。さらに別のアプローチは、オブジェクトが現在の速度で常に移動し、したがって将来のタイムスタンプでk個の最近傍オブジェクトを推論することができると仮定する。全てをモニタリングする連続的なクエリの多くの作業は、インデクシングのクエリに注意を払う。しかしながら、これらの方法は、クエリがどのように移動するか(例えば、複数経路に沿って)についての仮定を行うか、またはインメモリグローバルインデックスを仮定するかのいずれかである。
【0015】
高容量の書込み動作の存在下で前述の複雑なインデックス技術を拡張することは、自明ではないことに注意すべきである。読み出し動作と書き込み動作の両方を容易に拡張する単純なインデックス構造は、実際のアプリケーションによく適している。
【0016】
移動するオブジェクトのデータベースは、非常に困難である。一つのアプローチは、移動オブジェクトの位置を追跡し、更新するデータベースを考慮する。しかし、焦点は、データベース内の移動オブジェクトの位置が更新されるべきである時を決定することである。空間データベースは、空間データを管理し、クエリ点が多角形エリアに含まれているかどうかのような、GIS(地理情報システム)クエリをサポートする。
【0017】
技術上の問題は、膨大なI/Oコストのため、データベースが重たい書き込み負荷を扱うのに適していないということである。
【0018】
拡張可能なインメモリキー値データストア(stores)は、頻繁な書き込みの下でよく拡張する。キー値データストアでは、オブジェクトはキーであり、それらの位置は値である。従って、k-最近傍探索に応答するには、全てのキーをスキャンする必要がある。その待ち時間(レイテンシー)は許容できない。
【課題を解決するための手段】
【0019】
第1の態様では、データ保存が分散されているkNN探索用に調整された拡張可能なインメモリ空間データストアが開示される。
【0020】
第2の態様では、近傍移動オブジェクト(ドライバ)をリアルタイムで検索するためのシステムおよび方法が開示される。
【0021】
第3の態様では、複数の空間的に異なる空間シャードで構成された地理空間内に位置する最近傍な移動オブジェクトを高速に探索することができるように構成されたデータベースシステムが開示される。複数の空間的に異なる空間シャードは、複数のセルから構成され、複数の保存ノードの間で保存オブジェクトデータを制御するように構成されている。データは、各ノード内の各空間的に異なるシャードを構成するセルに対してそのオブジェクトをインデックスするために使用される各移動オブジェクトの位置データとともに、分散的な状態で保存される。
【0022】
第4の態様では、データベースシステムが開示される。データベースシステムは、複数の空間的に異なるサブ空間から構成される地理的空間内に位置する最近傍のオブジェクトを高速に探索することができるように構成されている。複数の空間的に異なるサブ空間は、複数のセルから構成される。そのデータベースシステムは、複数の保存ノードと、オペレーティングシステムとを含む。オペレーティングシステムは、複数のノード間のオブジェクトデータの保存を制御するように構成される。オペレーティングシステムは、1つまたは複数の空間的に異なるサブ空間を代表するデータを、保存ノードのそれぞれの1つに保存させるように構成されている。そして、各オブジェクトの位置データは、各ノード内の各空間的に異なるサブ空間を構成するセルに対してそのオブジェクトをインデックスするために使用される。
【0023】
別の態様では、複数の空間的に異なるサブ空間で構成される地理的空間内に位置する最近傍のオブジェクトを高速に探索することができるデータを保存する方法が開示される。複数の空間的に異なるサブ空間は、複数のセルで構成されている。データベースシステムは、複数の保存ノードを含む。この方法は、複数の保存ノードの間にオブジェクトデータを保存する工程を含む。その結果、1つまたは複数の空間的に異なるサブ空間を代表するデータは、保存ノードのそれぞれの1つに保存される。その方法はまた、各保存ノード内の各空間的に異なるサブ空間を構成するセルに対してそのオブジェクトをインデックスするために、各オブジェクトの位置データを使用する工程を含む。
【0024】
さらに別の態様では、データ間の地理的関係に従って、複数の保存ノードにデータを分配する工程を含む最近傍探索を加速する方法が開示される。それによって、データの探索は、減少された数のリモートコールを使用して実行される。
【0025】
別の態様では、第4の態様で請求されるデータベースシステムを含むkNN探索用の拡張可能なインメモリ空間データストアが開示される。
【0026】
一実施形態では、空間的に異なるサブ空間のデータは、単一の保存ノードに完全に保存される。
【0027】
実施形態では、空間的に異なるサブ空間のデータは、複数の保存ノードに複製されて、データレプリカを形成する。
【0028】
実施形態では、空間的に異なるサブ空間に関する書き込み動作は、関連する全てのデータレプリカに伝搬される。クォーラムベースのヴォーティングプロトコルが使用される。
【0029】
いくつかの実施形態では、レプリカの数は、使用事例に基づいて構成可能である。
【0030】
いくつかの実施形態では、幅優先探索アルゴリズムは、k-最近傍クエリに応答する。
【0031】
一群の実施形態では、データは、コンシステントハッシュ法を使用して複数の保存ノードに保存される。それによって、抽象的なハッシュサークルに割り当てている。
【0032】
別の群の実施形態では、データは、サブ空間から保存ノード(これはどのサブ空間がどの保存ノードに属するかを明示的に定義する)へのユーザ設定可能なマッピングを使用して、複数の保存ノードに保存される。
【0033】
さらに別の群では、サブ空間から保存ノード(これはどのサブ空間がどのノードに属するかを明示的に定義する)へのユーザ設定可能なマッピングおよびコンシステントハッシュ法の両方が、異なるデータに対して使用される。
【0034】
データベース内のデータは、一組の実施形態では、インメモリに保存される。
【0035】
マッピングに含まれないデータについては、コンシステントハッシュ法が用いられる。
【0036】
マッピング内の1つのノードは、新しいジョイン(joins)をブロードキャスト(broadcast)するための静的コーディネータとして使用される。
【0037】
ゴシップスタイルのメッセージは、ノード発見を可能にするために使用される。
【0038】
オブジェクトは、移動してもよいし、少なくとも移動可能であってもよく、配車システムのサービスプロバイダの車両であってもよい。
【発明の効果】
【0039】
このようなデータベースシステムは、データを異なるノードに分配し、インメモリに保存することによって、書き込み動作の容量の問題に対処するように構成されている。
【0040】
別の態様では、データ間の地理的関係に従って、オペレーティングシステムが複数の保存ノードにデータを配信するデータベースシステムが提供される。それによって、減少した数のリモートコールを用いて、データの探索を実行することができる。
【図面の簡単な説明】
【0041】
【
図1】
図1は、配車サービスの使用のための例示的な通信システムの部分ブロック図を示す。
【
図2】
図2は、最近傍探索技術のフローチャートを示す。
【
図3】
図3は、k-最近傍探索のためのBFSの図である。
【
図4】
図4は、ナイーブk-最近傍探索アルゴリズムを示す。
【
図5】
図5は、最適化されたk-最近傍探索アルゴリズムを示す。
【
図6】
図6は、アクセスしたシャード内のアクセスしたセルの平均数を示す。
【
図7】
図7は、ハッシュ対シャードテーブルマッピングの比較を示す。
【
図9】
図9は、異なる地理的空間インデックスの計算を比較する表である。
【
図10】
図10は、分散データベースのアーキテクチャの高度に簡略化されたブロック図を示す。
【発明を実施するための形態】
【0042】
本明細書で使用されているように、データベースは、オペレーティング管理システムを有する構造である。その構造は、メモリを含む。そして、オペレーティング管理システムは、メモリに保存されたデータの探索を容易にするために、データをメモリに保存するように構成されている。
【0043】
データベースが、オブジェクトを表す複数の論理行と、オブジェクトの属性を表す複数の論理列とを有するものとみなすことができる場合、「タプル(tuple)」は、特定のオブジェクトの属性のセットを表す単一の行である。
【0044】
「ハッシュ化」は、元の文字列(string)を表す「キー」と呼ばれるデータアイテムに文字列を変換することである。ハッシュ化は、データベース内のアイテムをインデックスし、検索するために使用される。なぜなら、元の値を使用してアイテムを見つけるよりも、ハッシュ化された短いキーを使用してアイテムを見つけることがより速いからである。
【0045】
「コンシステントハッシュ法」は、分散ハッシュスキームである。このスキームは、ノードやオブジェクトを抽象的なサークルまたはハッシュリング上の位置に割り当てることによって、分散ハッシュテーブル内のノードまたはオブジェクトの数とは独立して動作する。これにより、システム全体に影響を与えることなく、ノードおよびオブジェクトを追加または除去することができる。
【0046】
「シャーディング」は、データベースを独自のデータセットに分割し、データを複数のサーバに分配することができ、それによってデータの検索を高速化する。典型的には、データベースの水平パーティションがある。本発明の文脈において、固有のデータセットは、それぞれ、地理的に異なるエリアを表し、そのようなエリアの各々は、シャード(shard)と呼ばれる。
【0047】
用語「シャード」は、ここでは、各エリアのデータ内容を定義するために使用される。その結果、データのシャードxを参照することは、地理的シャードxのデータセットを参照する。k-最近傍探索(kNN探索)は、考慮中のオブジェクトに対して、k個の最近傍を識別する探索である。
【0048】
「レディス(redis)」(Remote Dictionary Server)は、非常に高い読み込み-取り書込み能力を有するデータベースとして使用可能なデータ構造サーバのタイプである。
【0049】
メインメモリデータベースシステムまたはMMDBとも呼ばれる「インメモリデータベース」(IMBD)は、コンピュータデータ保存のためのメインメモリに主に依存するデータベース管理システムである。インメモリのデータにアクセスすることは、データを照会する際のシーク時間を低減または除去する。
【0050】
「レプリカセット」という用語は、同じデータの別々に保存されたインスタンスを示す。
【0051】
まず、
図1を参照すると、配車アプリケーションのための通信システム100が示されている。通信システム100は、通信サーバ装置102と、サービスプロバイダ通信デバイス104(ここでは、サービスプロバイダデバイスとも呼ばれる)と、クライアント通信デバイス106とを含む。これらのデバイスは、例えば、インターネット通信プロトコルを実施する各通信リンク110、112、114を介して通信ネットワーク108(例えば、インターネット)に接続される。通信デバイス104、106は、移動セルラー通信ネットワークを含む他の通信ネットワーク(例えば、公衆交換電話ネットワーク(PSTNネットワーク))を介して通信することができる。しかし、これらは、明瞭化のために
図1から省略されている。
【0052】
通信サーバ装置102は、
図1に概略的に示されるような単一のサーバであってもよく、複数のサーバコンポーネントにわたって分散されたサーバ装置102によって実行される機能を有する。
図1の例では、通信サーバ装置102は、多数の個別のコンポーネントを含む。この多数の個別のコンポーネントは、特に限定されないが、1または複数のプロセッサ116と、実行可能命令120のロードのためのメモリ118(例えば、RAMのような揮発性メモリ)とを含む。実行可能命令は、サーバ装置102がプロセッサ116の制御下で実行する機能を定義する。通信サーバ装置102はまた、サーバが通信ネットワーク108を介して通信することができる入出力モジュール122を含む。ユーザインタフェース124は、ユーザ制御のために提供され、例えば、表示モニタ、コンピュータキーボード等のような従来のコンピュータ周辺デバイスを含む。サーバ装置102はまた、データベース126を含む。その1つの目的は、処理される際にデータを保存することであり、将来の履歴データとして利用可能なデータを作成することである。
【0053】
サービスプロバイダデバイス104は、複数の個別のコンポーネントを含む。この多数の個別のコンポーネントは、特に限定されないが、1または複数のマイクロプロセッサ128と、実行可能命令132のロードのためのメモリ130(例えば、RAMのような揮発性メモリ)とを含む。実行可能命令は、サービスプロバイダデバイス104がプロセッサ128の制御下で実行する機能を定義する。サービスプロバイダデバイス104はまた、サービスプロバイダデバイス104が通信ネットワーク108上で通信することができる入出力モジュール134を含む。ユーザインタフェース136は、ユーザ制御のために提供される。サービスプロバイダデバイス104が、例えばスマートフォンまたはタブレットデバイスである場合、ユーザインタフェース136は、多くのスマートフォンおよび他の携帯端末において普及しているようなタッチパネルディスプレイを有する。あるいは、サービスプロバイダ通信デバイスが、例えば、従来のデスクトップまたはラップトップコンピュータである場合、ユーザインタフェースは、例えば、表示モニタ、コンピュータキーボード等のような従来のコンピュータ周辺デバイスを有する。
【0054】
クライアント通信デバイス106は、例えば、サービスプロバイダデバイス104と同じまたは類似のハードウェアアーキテクチャを有するスマートフォンまたはタブレットデバイスである。
【0055】
実施形態では、使用において、サービスプロバイダデバイス104は、例えば、APIコールをデータベースに直接送信することによって、データのパケットを通信サーバ装置102にプッシュするようにプログラムされる。パケットは、例えば、サービスプロバイダデバイス104のID、デバイスの位置、タイムスタンプ、および他の態様(例えば、サービスプロバイダがビジーまたはアイドルである場合)を示す他のデータを表す情報を含む。
【0056】
いくつかの実施形態では、プッシュされたデータは、サーバのクロックに同期してサーバ104によってアクセスされることを可能にするためにキューに保持される。他の実施形態では、プッシュされたデータは、直ちにアクセスされる。
【0057】
さらに他の実施形態では、サービスプロバイダデバイス104は、サーバにデータをプッシュするよりむしろ、サーバ102からの情報リクエストに応答する。
【0058】
さらに他の実施形態では、データは、サービスプロバイダデバイスによって放出されたデータのストリームから情報を引くことによって得られる。
【0059】
データがサービスプロバイダデバイスからプッシュされる実施形態では、実施形態のデータベースへの転送は、Kafkaストリームを用いて実行される。このような手段が使用されず、少数の同時データがプッシュされる場合、データベースは、それらを同時に処理するように構成される。多数のプッシュが発生する場合、受信データは、FIFOメモリとして実現されるメッセージキューに保持される。
【0060】
サービスプロバイダデバイス104からのパケット化されたデータは、多くの方法でサーバによって使用される。その方法は、例えば、サービスプロバイダへのクライアントリクエストをマッチングするための方法、配車システムを管理するための方法(例えば、仕事が利用可能であるまたは利用可能となりそうなサービスプロバイダをアドバイスする方法)、履歴データベース126として保存するための方法などである。
【0061】
パケット化されたデータのいくつかは、kNN探索を実行するためのデータベースによって保存のためにデータタプルに変換される。
【0062】
一実施形態では、データタプルは、IDによって一意に識別されたオブジェクトがタイムスタンプtsの位置locにあることを表す4つの属性(id、loc、ts、メタデータ)からなる。メタデータは、オブジェクトの状態を特定する。例えば、サービスプロバイダのメタデータは、サービスプロバイダが配車のための自動車ドライバであるか、または食品配送のための自動二輪車サービスプロバイダであるかどうかを示す。k-最近傍探索クエリは、locが位置座標であり、tsがタイムスタンプである(loc、ts、k)として表される。k-最近傍探索クエリ(loc、ts、k)が与えられると、実施形態のデータベースは、クエリ位置locに最も近いk個のデータタプルに戻る。なお、本実施形態では、直線距離を想定している。
【0063】
一群の実施形態では、クエリタイムスタンプtsもまた検索されて、データタプルのタイムスタンプを有効化する。なぜなら、焦点(focus)が短時間内にリアルタイム位置にあるからである。
【0064】
本実施形態のデータベースは、データが保存のために異なるノードを横切って拡散される分散データストアを含む。1つまたは複数の地理的シャード内に位置されたサービスプロバイダのデータタプルは、それぞれのノードに保存される。現在の実施例では、データはノード間で複製されず、単一のインスタンスのみが書き込まれる。可能な限り、本実施形態は、空間的に近いサービスプロバイダを表すデータタプルを一緒に書き込み、迅速なkNN探索を可能にする。しかしながら、関心のある第1のサービスプロバイダが、1つのノードに保存されたシャードの境界にあるか、または、それに近い場合、第1のサービスプロバイダに近いが、実際には、他のノードにデータが保存されている隣接するシャード内に位置するサービスプロバイダであってもよいことに留意されたい。
【0065】
データを保存する場所を決定することは、それらの地理的位置に従って、データタプルをシャードにまず分割することによって達成される。そして、シャーディングアルゴリズムは、どのノードがデータシャードにあるかを決定する。
【0066】
上述したように、データタプルは、それらの地理的位置に従ってシャードに分割される。本実施形態では、これは、2次元WSG(世界測地システム)平面をグリッドセル(本明細書ではシャードまたは地理的シャードと呼ぶ)に分割することによって達成される。
【0067】
緯度及び経度の値は、それぞれ、-90~+90、-180~+180の範囲である。問題を簡単にするために、グリッドサイズは、l×lと定義される。従って、合計
のグリッドセルがある。簡単なインデックス関数index(lat;lon)を使用して、任意の所与の位置(lat;lon)のグリッドid(すなわち、シャードid)を計算する。
ここで、(-180、-90)は原点であり、シャードは原点の右上の
セルおよび原点の上の
である。
【0068】
k-最近傍探索を速めるために、本実施形態は、2つのレベルのインデックス階層を維持する。グリッドサイズlを減少させることにより、地理的シャードは、より小さいセル(以下、セルという)にさらに分割される。問題を簡単にするために、一実施形態では、セルサイズは、各セルが正確に1つのシャードに属するように選択される。各地理的シャードは、1組のセルを含む。シャードの物理的サイズは異なっていてもよく、赤道付近のシャードは極近くのものよりも物理的に大きい。しかしながら、近くのシャードは、同様の物理的サイズ、特に、関心のある焦点が小さな半径(<10km)内のオブジェクトにある場合を有するものと仮定する。一実施形態では、地理的シャードは、赤道で約20km×20km四方で表す。一方、セルは、約500メートル×500メートルのエリアを表す。
【0069】
地理的シャードは、最小の共有単位である。上述したように、同じ地理的シャードに属するデータは、同じノードのメモリに保存される。本実施形態は、シャーディング機能、すなわち、ノード_id=シャーディング(インデックス(lat;lon))に基づいて1または複数の地理的シャードをノードに分配する。
【0070】
シャーディングアルゴリズムの詳細は、本明細書では後述される。同様に、シャーディングアルゴリズムは、セルが保存されているノードidにセルをマッピングする。
ノード_id=シャーディング(セル_id)
【0071】
それぞれのシャード内のサービスプロバイダにデータを保存する複数のノードを有するデータベースが与えられると、タスクは、特定の場所、例えば、クライアントが提供されるべきサービスを必要とする場所(例えば、ピックアップ位置)にk個の最近傍を見つけることである。
【0072】
ナイーブk-最近傍探索。
図4(アルゴリズム1)に戻って、位置が与えられると、実施形態は、幅優先探索(BFS)を用いてk個の最近傍オブジェクトを検索する。
【0073】
クエリ位置が属するセルを開始するために、(ライン1)、すなわち、
図3の中央ドット320が特定される。探索アルゴリズムは、隣接するセル(ライン11)の幅優先探索を実行する。
図3の番号は、反復回数を示す。セルにアクセスする(visiting)とき、セル内のk個の最近傍オブジェクトは、アルゴリズム、すなわち、関数KNearest_InCell(ライン9)によって抽出される。サイズkのグローバルオブジェクト優先キュー(アルゴリズムの結果)は、オブジェクトと、所与の探索位置との間の距離に基づいて維持される。ライン10は、セル内のk個の最近傍オブジェクトを比較して、最終結果にマージする。
【0074】
反復i+1(例えば、
図3のドット323)に見られるオブジェクトは、前の反復i(例えば、ドット325)に見られるオブジェクトよりも近いことに留意されたい。
【0075】
クエリ位置が存在するクエリセルが与えられると、反復iにおいて見られるセル内の任意の位置と、セル内の任意の位置との間の距離は、(i-1)xlから√2×(i+1)×lの範囲にある。ここで、lは、セルの長さである。
【0076】
この実施形態では、一般性を失うことなく、ハーバーサイン(haversine)距離よりむしろユークリッド距離が使用される。従って、BFSは、結果のk個の最近傍オブジェクトが反復min_iter内に見出される時かつその時に限り、反復iの終了時に終了する。(ライン13)
min_iterは、マージ機能によって維持される(ライン10)。
【0077】
ナイーブk-最近傍探索の問題は、シャーディング(セル)がローカルでない場合に、KNearest_InCell(ライン9)がリモートコールであるということである。最悪の場合、O(n)のリモートコールがある(nはアクセスされたセルの数である)。なお、同一のシャードに属するセルが同一ノードに保存されていることに注意されたい。これは、同一ノードに対する複数コールにつながる。
【0078】
次に、この問題を解決するために最適化されたk-最近傍探索アルゴリズム(
図5、アルゴリズム2)を説明する。
【0079】
シャード内のセルが一緒に保存されることを想起されたい。ここで、リモートKNearest_InCell(K、loc、セル)コールがリモートコールの数をO(m)に低減するように同じシャード内にある場合、アルゴリズムは、そのリモートKNearest_InCell(K、loc、セル)コールを一緒に集める。ここで、mは、アクセスされたシャードの数である。実際、サービスは、半径r(r<<シャードサイズ)内の最も近いオブジェクトとのみ関係している。したがって、アクセスされたシャードの数は、ほとんど一定である。こうして、リモートコールの数は、O(1)に低減される。実際、所与の半径rが与えられると、アルゴリズム1で必要とされる反復の総数は、ループを早期に出るように予め計算される。さらに、セルにアクセスする前に、セルがサークル半径rと交差するかどうかが検証される。
【0080】
アルゴリズム2は、最適化されたk-最近傍探索を提示する。アルゴリズムは、最初に、近くの交差するシャードを識別する(ライン1)。その詳細は省略される。次に、ナイーブ_BFS(K、loc)は、各シャードが保存されているノードで局所的に実行される(ライン3)。次いで、アルゴリズムは、全てのシャードからの結果をマージする(ライン4)。シャードは互いに独立しているので、リモートコールは並行に送られる。セルもまたナイーブ_BFS(K、loc)内で独立している。そのため、KNearest_InCell(K、loc、セル)も並行して実行される。
【0081】
オブジェクトが移動すると、実施形態はオブジェクトの位置を更新する。高速更新のために、インメモリの全てのデータタプルを保存する。インデックス(loc)は、その新しい位置がどのセルに属するかを一意に識別することを想起されたい。オブジェクトがセル内に既に存在する場合、その位置は単に更新される。そうでなければ、新しいデータタプルは、セルに挿入される。本実施形態は、タプルの古い位置を直ちにディアクティベートしない。データタプルは、TTL(Time to Live)を有する。シャードからの読出しまたはシャードへの書込時に、TTLが満了したシャード内のタプルは、ディアクティベートされる。このようにして、k-最近傍クエリがサービスプロバイダの最新の位置に戻らないことが起こり得る。それにもかかわらず、タプルの適時性は、タイムスタンプによって保存される。この実施形態は、k最近傍クエリの定義を緩めて、kデータタプルまで戻す。kデータタプルは、期間内のクエリ位置に最も近い。これは、実際のアプリケーションにおいて十分である。
【0082】
本実施形態は、さらに、無駄なデータシャードを定期的にリリース(release)する。多くのドライバがアクティブである日中に作成されたデータシャードは、ドライバが仕事を終えた時の夜間にリリースされる。
【0083】
正式には、データシャードは、シャード内の全てのドライバの位置が古くなった(例えば、10分前)場合に、メモリからリリースされる。実際には、データシャードは、15分毎にクリーンアップされる。
【0084】
地理的空間インデックスは、以下の条件が満たされる場合、分割の目的に役立つと仮定することができる。
・地球を小さなチャンクに分割する
・一意に、地理的座標をチャンク(a.k.a.aシャード)にマッピングする
・隣接するチャンクを効率的に検索する
【0085】
最近開発された、地理的空間インデックス(例えば、グーグルによるS2)、ウーバーによるH3は、実際、クエリフェーズを速める可能性を有する。例えば、H3のヘキサゴンは、探索空間を減少させる正方形よりも少ない近傍を有する。しかし、本実施形態の単純なインデックスは、はるかに速く計算することができる(
図9)。高速インデックス計算は、書込みおよび読出し動作の両方を速める。それにもかかわらず、本実施形態はモジュール式であり、前述のインデックスは必要に応じてシステムにプラグインされる。
【0086】
低レイテンシー、高信頼性および利用可能性を達成するために、本実施形態が分散された設定においてノードをどのように管理するかについての説明を以下に示す。第1の提案は、ロードバランスを達成するために、データシャードをノードに分配するためのコンシステントハッシュ法に対する補間としてのシャードテーブルである。既知のゴシッププロトコルSWIMは、ノードの発見と、障害検出のために使用される。最後に、実施形態がどのように地域の障害から迅速に回復するかということが示されている。
【0087】
シャーディングアルゴリズム
このセクションは、実施形態がデータシャードを異なるノードにどのように分配するかを記載する。
【0088】
コンシステントハッシュ法は、等しい数のデータシャードを異なるノードに分配するために広く使用されている。これは、新しいノードが追加されるとき、最小量のデータを移動する必要があるという利点がある。しかしながら、このアプローチは、アンバランスなシャードサイズおよびクエリの必要性のために、実際には大きな性能上の問題を生じる。あるシャードは、他のものよりもはるかに多くのオブジェクトを含んでいる。例えば、より大きな都市(例えば、シンガポール)のシャードは、より小さい都市(例えば、バリ)よりも5倍多いドライバを有する。第二に、高需要エリア(例えば、ダウンタウンエリア)におけるシャードは、地方のエリアよりもはるかに多く問合せされる。シャードをノードに均等に分配する場合、あるノードは80%を超えるCPU使用量を有するホットスポットとなり、他のいくつかのノードはアイドル状態であることが観察される。
【0089】
さらに、コンシステントハッシュ法の下で新しいコンピュータ(machines)を追加すると、特に悪いことがある。例えば、アマゾンウェブサービス(AWS)では、スケールアウトは、典型的に、ノードの高いCPU使用量(すなわち、ホットスポット)によってトリガされる。新しいノードが追加されると、コンシステントハッシュ法は、1つまたは数個のノードをランダムに選択し、それらのデータシャード(従って、クエリ負荷)を新しいノードに使わない(spare)。残念ながら、ホットスポットノードは、選択されることが保証されない。これは、ホットスポットが全く緩和されないが、新しいアイドルノードの追加につながる。
【0090】
従って、本実施形態は、シャードテーブルを使用することによって、データ移動時間と、高速クエリ時間との間で交換する。シャードテーブルは、シャードからノードへのユーザ設定可能なマッピングである。そのノードは、どのシャードがどのノードに属するかを明示的に定義する。一実施形態では、ノードは、都市内の高需要のエリアに専用である。場合によっては、ノードは、多数の小都市に役に立つ。シャードテーブルにないシャードに対して、フォールバックは、コンシステントハッシュ法を使用することである。
【0091】
シャードテーブルは、半自動である。ホットスポットノードが観察されると、本実施形態は、シャード上の読み込み/書き込みロードに基づいて移動する必要のあるシャードを計算する。次に、管理者は、既存のアイドルノードまたは新しいノードにシャードを移動する。
【0092】
半自動構造は、本出願人に対して良好に働く。シャードテーブルが第1の場所で適切に構成される場合、人間の介入は、ほとんど必要とされない。
【0093】
ノード発見および障害回復
本実施形態は、ノード発見のためにゴシップスタイルのメッセージを適用する。各ノードは、ネットワークトポロジー上でその知識を中心にゴシップする。特に、Serfは、ライフガード強化を用いてSWIMを実施するから選択される。SWIMに関する一つの問題は、新しいノードが結合すると、静的コーディネータが多数のメンバー応答を回避するためにジョインリクエストを処理するために必要とされるということである。
【0094】
実施形態は、新しいジョインをブロードキャストする静的コーディネータのように、シャードテーブル内の1つのノードを微妙に再使用する。SWIMは、時間有界の完全性を提供する、すなわち、任意のメンバーの障害の最悪の場合の検出時間を制限することに価値がある。これを達成するために、SWIMは、ラウンドロビンプローブターゲット選択を適用する。各ノードは、現在のメンバシップリストを維持し、ランダムよりむしろラウンドロビン方式でピンターゲットを選択する。新しいノードは、脱優先されることを避けるために、エンドに付加される代わりに、ランダムな位置でリストに挿入される。リストの順序は、現在、および1回のスキャンが終了した後にシャッフルされる。加えて、SWIMは、故障したようなノードを示す前に、メンバーがノードを疑うことができることによって、障害の偽陽性を減少させる。
【0095】
第三者のノード発見サービスを使用することは、可能な限りサービス依存性を最小にするために、故意に回避されることに注意されたい。
【0096】
実施形態は、障害回復のために、定期的にデータのスナップショットを取る。スナップショットは、外部キー値のデータストアRedisに保存される。全てのノード電力サイクル、従って全てのインメモリデータが失われている停止状態の場合、実施形態は、Redis内のデータスナップショットをスキャンすることによって開始することができる。実験は、実施形態が1分間で障害から回復することができることを実証する。
【0097】
レプリカセットおよびクエリ転送
高い信頼性および耐久性は、データ複製(duplication)を必要とする。実施形態は、データ複製(replication)のためのレプリカセットを適用する。各データシャードは、ノードが等しく処理される複数のノードに複製される。シャードの書き込み動作は、全てのレプリカノードに伝搬される。コンシステシー構成に応じて、クォーラムベースのヴォーティングプロトコルは、適用されてもよいし、適用されていなくてもよい。利用可能性がコンシステシーを優先する場合、位置データの適時性のために、コンシステシーを緩和することができる。レプリカの数は、使用事例に基づいて構成可能である。
【0098】
一実施形態は、マスタースレーブデザインよりレプリカセットを好む。マスターメンバーシップを維持すること、またはマスターを再選択することは、余分なコストを招く。対照的に、レプリカセットは、より柔軟である。これは、利用可能性のためにコンシステシーをトレードする。コンシステトハッシュ法によって、ノードに分配されるシャードに対して、古典的な実装が使用される。すなわち、リング内の次のノードにそのレプリカを保存する。シャードテーブルにおけるシャードの場合、マッピングは、シャードのレプリカが保存されている場所を維持する。
【0099】
k-最近傍クエリに応答すると、この実施形態は、各レプリカノードを等しく処理する。ノードが位置でk-最近傍探索リクエストを受信すると、それはアルゴリズム1を起動する。
【0100】
リモートコール(アルゴリズム1におけるライン3)に関して、シャード用のレプリカが存在するので、レプリカ、ファンアウト、またはラウンドロビンに対するクエリをバランスさせるための2つの戦略がある。ファンアウト設定では、ノードは、リモートコールをレプリカに並列に送る。そして、最も速く返された方の結果を受け取る。ラウンドロビン設定では、レプリカは、順番にリモートコールを取る。
【0101】
k-最近傍クエリ
このセクションでは、出願人の実際のk-最近傍クエリを使用して、k-最近傍クエリアルゴリズム1およびアルゴリズム2の性能を比較する。出願人は、毎日約6百万の自動車(rides)をサポートする。それにより、1日当たり10億のk-最近傍クエリに達している。アルゴリズム1の時間の複雑さは、リモートコールの数によって支配される。これは、アクセスされたセルの数において線形である。アルゴリズム2は、アクセスされたシャードの数において線形である。従って、アクセスされたシャード内のアクセスされたセルの平均数は、アルゴリズム1に対するアルゴリズム2の改善を実証するために使用される。
【0102】
図6は、アクセスされたシャード内のアクセスされたセルの平均数を示す。時間の変化(x軸)として、アクセスされたシャード内のアクセスされたセルの平均数はわずかに変化することに留意されたい。平均して、シャードにアクセスすることは、120個のセルの最悪の場合で、27:3のセルをスキャンする。従って、アルゴリズム2は、平均して、アルゴリズム1より27:3倍速い。さらに、アルゴリズム2でアクセスされたシャードの平均数は、1:27である。これは、一定時間の複雑さを有効にする。
【0103】
ロードバランシング
このセクションでは、コンシステントハッシュ法は、それらのロードバランシング性能においてシャードテーブルと比較される。実験は、10個のノードで実行された。1つの設定で、コンシステントハッシュ法がシャード分布のために使用される。一方、他の設定で、実施形態は、シャードテーブルインデックスおよびコンシステントハッシュ法の両方とともに使用される。書込みおよびk-最近傍クエリ負荷の両方は、実際の環境と比較される。いくつかのレベルの詳細は、商業的な理由のための二次対策のみを提示するために示されていない。
【0104】
図7aは、コンシステントハッシュ法下で、10個のノードの書込みおよびクエリ負荷分散を示す。シャードが物理的な世界と等しいとしても、ある国は、他の国よりも1つのシャードにおいてより多くのドライバを有する。そして、書き込み動作は、ドライバの数において線形である。
図7aに示すように、最も極端なノードは、ドライバ全体の32:9%をホストする。一方、他のノードは、ドライバの少なくとも0:37%をとる。サンプル分散は、103程度の高さである。同様に、k-最近傍クエリ負荷も、0:72%~39:84%の範囲で不均衡である。
【0105】
図7bは、本実施形態を用いた10個のノード間の書き込みクエリ負荷分散を示す。書き込み負荷は、8:71%~13:92%の範囲で、非常に良好にバランスされていることは明らかである。サンプルの分散は、3:64程度の低いものである。現在の実施形態がk-最近傍クエリ負荷に対する書き込み負荷をバランスさせるのに好ましいということは、注目に値する。
図7cは、実施形態のクエリ負荷分散を示す。バランスのとれた書き込み負荷で、すなわち、各ノードがほとんど同じ数のドライバをホストしながら、クエリ負荷は、1:93%~35:49%の範囲で依然として変動する。しかし、それは、コンシステントハッシュ法よりも良好である。
【0106】
障害回復
このサブセクションでは、実施形態の性能は、障害回復について評価される。実験は、2.7GHzのインテルコアi7および16GBのメモリを備えたMacPro上で実行された。
図8は、結果を示す。
【0107】
回復時間は、ドライバの数が増加するにつれて評価される。
図8に示すように(ドライバの数の対数目盛りに注意)、ドライバの数が1kから5百万に増加するにつれて、回復時間は直線的に増加する。本実施形態は、5百万人のドライバであっても、25秒未満で回復することができる。
【0108】
フローチャート
図2を参照すると、フローチャートは、複数のノード内でそれぞれ実行する2つのプロセス430および450を示す。ブロック470は、複数のレプリカセットを表す。データスナップショットプロセス490は、各ノード内で同様に実行される。
【0109】
図示のように、リクエストおよび書込みデータ401は、ロードバランシングデバイス411に入力される。そのデバイス411は、異なるノード間でリクエストおよび書込みを分配するように動作する。それによって、多くの負荷および書込みを処理する能力と負荷さえ保証する。ロードバランシングデバイス411は、書き込みデータタプルを含むリアルタイム位置データ413と、k-最近傍クエリリクエスト415とのタイプによって、データを書き込みにソートする。
【0110】
書き込みデータタプルは、本明細書の他の場所に記載されているように、例えば、配車状況の車両、各オブジェクトのID、タイムスタンプ情報、およびメタデータなどの検討中のオブジェクトの地理的位置を含む。
【0111】
k-最近傍クエリリクエストは、例えば、位置データ、タイムスタンプ、k、および探索の半径を含むパケットのデータを含む。
【0112】
リアルタイム位置データ413は、2つの決定を実行する保存ユニット430に渡される。第1の決定ユニット431は、WSG平面をシャードに分割したことを示すデータと、地理的データソース421からのコールとが供給され、インデックス機能を実行する。これにより、リアルタイム位置データ413がどのシャードおよびセルに属するかに関する決定が行われる。
【0113】
この決定を行った後、シャードがどのノードレプリカセットに位置されているかを決定するように、リアルタイムデータは、第2の決定ユニット433に渡される。これは、構成データ423、シャードテーブルおよびレプリカセットサイズに関連するデータが供給される。
【0114】
次いで、結果として得られたデータは、書込みユニット435によって使用されて、オブジェクト(配車アプリケーションにおける車両)の位置をノードレプリカセットのシャードに挿入する、または既にこのシャードに存在する場合には、オブジェクト位置を更新する。
【0115】
保存ユニットは、ノード発見471およびレプリカセットのデータ473を含む分散メモリ470にこのデータ481を書き込む。
【0116】
k-最近傍リクエストデータ415は、クエリユニット450に渡す。クエリユニット450は、一次シャードデータをホストするノードにリクエストを転送するための第1のプロセス449と、レプリカセット内のクエリを転送するための第2のプロセス451と、第3のプロセス453とを実行する。すなわち、分散されたk-最近傍クエリアルゴリズムを実行する。その結果は、読み出しデータ487として分散メモリ470に出力される。この実施形態では、検索アルゴリズムの結果は、第1の場所でクエリを開始した発信者にさらに戻される(チャートには示されていない)。検索結果は、k最近傍ドライバのIDと、それらの位置データと、タイムスタンプとである。
【0117】
分散メモリ470はまた、書き込みプロセス483を介してデータスナップショット490を書き込む。これは、障害回復485に使用可能である。
【0118】
アーキテクチャ
図10を参照すると、インメモリデータベースシステムの簡略化された実施形態の概略ブロック図は、
図2に関して先に説明したロードバランシングユニット411と共に、3つの保存ノードA、B、Cからなる。各保存ノードA、B、Cはそれぞれ、プロセッサX、Y、Zおよびメインメモリ(例えば、RAM)A1、A2、A3を含む。使用時には、プロセッサX、Y、Zは、
図2に関して説明したように、プロセス430、450を実行する。インメモリ(すなわち、RAM)ストレージは、大量のデータ書込み/更新リクエストをサポートするために使用される。
【0119】
将来のリモートまたはクラウドストレージが予想されるが、配車アプリケーションに必要とされる書き込み負荷のソートを扱うことは現在可能ではない。
【0120】
本実施形態では、大量のデータフローに対するデータ転送時間が有意にならないように、保存ノードを互いに十分に近接させることが重要である。
【0121】
複数のピアセットであるレプリカセットは、異なるノードに保存される。この理由の一つは、1つのノードが故障した場合、別のノードが依然として機能するということである。ハッシング/インデクシングプロセス(コンシステントハッシュ法またはシャードテーブルインデクシング)を使用して、複数のどのノードで、特定のシャードが保存されるかを決定する。本実施形態では、データは、そのデータの一次ホームとして固定されてるノードなしに複数のノードに保存される。
【0122】
以下の説明では、説明を容易にするために、添付図面を単一の線として示している。このことは、実際の実施形態の場合ではないことが理解される。その実施形態において、非常に高いデータレートは、多導体バスまたは他の相互接続を介して転送される。
【0123】
図示のように、バランシングユニット411に向かって示している矢印713は、システムに入力されるサービスプロバイダ(例えば、ドライバ位置)更新情報を表す。矢印714は、入力されている最近傍探索リクエストを表す。ユニット411から上方を指示する矢印715は、データベースから出力されるクエリ結果を表す。ロードバランサ411は、読み出しおよび書き込みの負荷をバランスするために、ノード間で探索リクエストおよびサービスプロバイダデータを分配する。ロードバランスユニット411からノードAへの矢印717は、ノード(ノードA)に渡されるサービスプロバイダデータを表す。矢印719は、ノードから出るクエリ結果を表す。707は、ユニット411からノードCへのデータである。709は、ノードCからのクエリ結果である。
【0124】
ノードAにおいて、矢印723は、プロセッサXから保存位置A1へ、および保存位置A1からプロセッサXへのドライバデータフローを表す。保存位置A3は、位置B2に保存されたデータのシャードのレプリカセットを表す。ノードBは、位置B2に保存されたデータのシャードのためのホストノードである。
【0125】
矢印725は、保存位置A3への読取りおよび書込みアクセスを表す。これは、位置B2に保存されたデータのレプリカセットを保存する。上述したように、一実施形態では、レプリカセットは、異なるノードに保存される。その結果、1つのノードが問題を有する場合には、別のノードまたは他のノードを使用するサービスが依然として存在する。
【0126】
矢印727は、ノードAおよびBのプロセッサXとYとの間のデータ転送を表す。矢印729は、位置B2へ、および位置B2からのデータ転送を表す。矢印731は、プロセッサYとZとの間のデータフローを表す。
【0127】
動作の簡単な例として、探索は、位置B2に保存されたデータを探索するために、ロードバランサ411でリクエストされ、この探索リクエストは、ライン707を介してノードCにロードバランサ411によって渡されることを仮定する。ノードCがリクエストを受信した後、それは、接続731を介して、「ホスト」ノード、ノードBにリクエストを転送するために、“know”に対してコンシステントハッシュ法またはシャードテーブルインデックスを使用する。クエリ位置は、保存される。次に、ホストノード、ノードBのプロセッサは、ライン729を介してクエリを実行する。位置B2に保存されたデータを更新する場合、プロセッサYは、位置A3のレプリカセットも更新されるように、接続727を介して更新データを転送する。
【0128】
上記は、非現実的なシステムの非常に簡略化された説明を表す。実際には、多数のノードにある複数のレプリカセットが存在する。多くの実施形態では、ノードAからノードBからノードCへの単純な相互接続は、相互接続のネットワークによって置き換えられる。
【0129】
使用時に、探索クエリがファンアウトモードで実行される場合、ノードAおよびノードBの両方は、データおよびリターンに関するクエリを実行する。この場合、AおよびBの両方は、ホストノードである。設定がラウンドロビンである場合、例えば、ノードAおよびノードBは、クエリを実行するためにホストノードとなることを交代で行う。
【0130】
実施形態の利点
実施形態は、キーによる大量の頻繁な書き込みのためのサポートを提供する。すべてのオブジェクトの現在位置を更新し追跡するために、書込み操作が必要である。ドライバは、シンガポールのような発展した国で、毎秒25メートルを移動することができる。従って、ミリ秒でなければ、秒毎にドライバの位置を更新することが重要である。従って、書込み動作のためにディスクI/OSで被る従来の相関的データベースまたは地理的空間データベースは、使用するにはあまりにも高価である。実施形態は、分散環境におけるインメモリのデータを保存する。
【0131】
全てのオブジェクトが1つのコンピュータ(machine)のメモリに適合することができるとしても、単一のコンピュータは、大量の書き込みおよびkNNクエリによってすぐに圧倒される。そして、リアルタイム位置が報告されるドライバの数を念頭に置いている。この問題を解決するために、実施形態は、オブジェクト(例えば、ドライバ)をそれらの地理的位置に従って、異なるノード(すなわち、コンピュータ)に分配する。
【0132】
地理的位置によるkNNのサポート
周知のキー値データストア(例えば、ダイナモおよびメモキャッシュ)は、キーとしてオブジェクトを保存し、それらの位置を値として保存する。次に、kNN探索は全てのキーをスキャンし、ペアワイズ距離を計算することを必要とする。そのレイテンシーは許容できない。従来のkNN探索アルゴリズムは、クエリを速めるために、R-ツリーのようなインデックスに依存する。しかし、頻繁な書き込みを処理しながら、このような複雑なインデックスを維持することは不可能である。実施形態は、k最近傍クエリに応答するために、幅優先探索アルゴリズムを適用する。シャードを小さなセルにさらに分割することにより、実施形態は、十分なシャードスキャンを回避する。それは、クエリポイントが存在するセルから開始し、隣接するセルを徐々に探索する。リモートコールを減少させるために、実施形態は、シャードレベルでコールを集約する。これは、並列性も達成する。
【0133】
不均衡な負荷のためのサポート
地理的シャードは固定された物理的サイズ(例えば、20km×20km)であるので、あるシャードが他のシャードよりも多くのデータおよびクエリを有することは驚くべきことではない。例えば、より大きな都市(例えば、シンガポール)のシャードは、より小さい都市(例えば、バリ)のシャードよりも5倍多くのドライバを有する。その結果、前者のシャードは、後者のシャードよりも5倍多くの書込みを有する。高需要エリア(例えば、ダウンタウンエリア)におけるシャードは、地方のエリアよりもはるかに多く照会される。このような不均衡な負荷は、スケールアウトポリシーの極端な困難性の原因になる。コンシステントハッシュ法は、ノードを横切って移動する必要があるデータの量を最小にするので、スケールアウトに広く使用されている。しかし、1つのノードがホットスポットになり、新しいノードが追加されると、コンシステントハッシュ法は、ランダムにノードを選択し、そのデータの一部を新しいノードに転送する。残念ながら、ホットスポットノードが選択されないと、その状況は全く緩和されない。この状況は、新しいアイドルインスタンスを追加するデッドループで終了する可能性が非常に高い。
【0134】
一実施形態は、ロードバランシングのためのコンシステントハッシュ法に対する補間として、およびコンシステントハッシュ法と一緒に使用する補間として、シャードテーブルを提案する。コンシステントハッシュ法は、ほぼ等しい数のシャードをノードに分配するが、シャードテーブルは、1つまたは複数のノードを1つの特定のシャードに専用にするように構成されている。シャードテーブルは、半自動構造であるが、実際には、人間の介入はほとんど必要とされない。
【0135】
信頼性、高速障害検出および回復
実施形態は、高利用可能性のために強いコンシステンシーを犠牲にするレプリカセットを使用する。同時に、異なるレプリカは、異なるデータ状態を見る。これは、我々の使用ケースに重要ではない。レプリカセットは、システム全体を高い利用可能性にする。実施形態は、高速障害検出を達成するために、ゴシップスタイルのプロトコルSWIMを利用する。地域的な停止状態の場合、実施形態は、データスナップショットが非同期に維持される外部データストアから迅速に回復することができる。
【0136】
本発明は、一例としてのみ記載されていることが理解される。添付の特許請求の範囲の精神および範囲から逸脱することなく、本明細書に記載された技術に対して種々の変更が可能である。開示された技術は、独立して、または互いに組み合わせて提供される技術を含む。したがって、1つの技術に関して説明された特徴を他の技術と組み合わせて提示することもできる。