私の目的は、道路網の最短経路アルゴリズムを作成することです。
現在、私のアーキテクチャは次のようなものです。PostGIS 対応の PostgreSQL データベースにすべてのデータを保存しています。100,000 のエッジ (ウェイ) を持つテーブルで 3 秒未満しかかからない 1 つを実行しSELECT * FROM ways
、その後、既にメモリに存在するグラフに (Java、Ruby、または何かベースの) 最短パス アルゴリズムを適用します。2 番目の操作は、100,000 個のエッジを持つグラフで約 1.5 秒かかる場合があります。
したがって、次のものが必要です。
- データベースからすべてのウェイをメモリにロードしてグラフを作成するのに 2 ~ 3 秒かかります (ノードはウェイ (エッジ) を持つ 1 つのテーブルに格納されます)。
- すでにメモリ内にあるグラフの最短パスを計算するには、1 ~ 1.5 秒かかります。
これは、pgRouting が行うことと非常によく似ています (私の知る限り、C Boost を使用してグラフをメモリに保存します)。ただし、pgRouting は、同じデータセットで最短パスを計算するのに合計で約 2 秒かかります (はい、高速ですが、これは私にとってはブラック ボックスなので、独自のものが必要です)。
しかし最近、Graph データベースと Neo4j について知りました。彼らのサイトでは、「数百万の道路とウェイポイントのグラフでこれらの計算を1秒未満の速度で実行できるため、多くの場合、K / Vストアを使用してインデックスを事前計算する通常のアプローチを放棄して、ライブ条件に適応し、高度にパーソナライズされた動的な空間サービスを構築する可能性を備えたクリティカル パスにルーティングを配置します。」
質問は次のとおりです。グラフ データベースは、特定の問題で高速になりますか?
問題には次の特性があります。
- データベースは 1 つのテーブル (ウェイ) で構成されます。
- データベースへの唯一のクエリは、すべてのウェイをメモリに取得することです (グラフを作成するため)。
- スケーラビリティは必要ありません。つまり、グラフが大きくならない可能性があります。