Neo4jは非常に堅牢なグラフ DB であり、柔軟な (少し複雑な場合でも) ライセンスも備えています。Blueprints API を実装しており、PHP を含むほぼすべての言語から簡単に使用できます。また、REST APIもあり、柔軟性に優れており、PHP から使用する良い例が少なくとも1 つあります。
持っているデータに応じて、保存する方法はいくつかあります。
ポイントがすでに特定のパスを介して互いに接続されている「ルート」データがある場合 (つまり、あるポイントから別のポイントに直接ジャンプすることはできません)、各ポイントをノードにして、その間の接続を作成するだけです。ルート内のポイントはノード間のエッジであり、それらのエッジのプロパティとして距離があります。これにより、古典的な「巡回セールスマン」のような問題のようなグラフが得られます。ノード間の距離の計算は、重み付けされた幅優先検索を実行するだけの問題です (最短経路が必要であると仮定します)。
データセットを使用して場所を移動できる場合は、完全に接続されたグラフが作成されています。明らかに、これは大量のデータであり、宛先を追加すると 2 次的に増加しますが、グラフ DB はおそらくリレーショナル DB よりもこれを処理するのに適しています。距離を保存するには、グラフにノードを追加するときに、そのプロパティの 1 つとして事前に計算された距離を使用して、既存の各ノードにエッジも追加します。次に、ノードのペア間の距離を取得するには、単純にそれらの間のエッジを見つけて、その距離プロパティを取得します。
ただし、完全に接続されたノードが多数ある場合は、それらのノードの座標を保存し、必要に応じて距離を計算し、必要に応じて結果をキャッシュして高速化する方がよいでしょう。
最後に、Blueprints API とそのスタック内の他のツール ( GremlinやRexterなど) を使用すると、互換性のあるグラフ データベースをスワップ イン/アウトできるはずです。 Cassandra / Hadoopクラスター上でTitanを使用するようなものです。