4

MySQLにax、y、z 3Dポイントが保存されています。リージョン、スライス、またはポイントネイバーに質問したいと思います。Peano-Hilbert曲線を使用してポイントにインデックスを付け、クエリを高速化する方法はありますか?または、MySQLに3Dデータを保存するためのより効率的な方法はありますか?

アーマンに感謝します。

4

2 に答える 2

1

個人的にはここまで行ったことはありませんが、Z カーブを使用して 2D ポイントを保存しました。これは非常にうまく機能し、より良い結果を得るためにヒルベルト曲線を実装しようとする必要性を感じませんでした。

これにより、確実に近くにないポイントをすばやく除外できます。絶対的な最悪のシナリオでは、エリア内のポイントを見つけるためにテーブルの 25% 以上をスキャンする必要があります。

これを行う方法は、xyz をバイナリに分割し、曲線を使用してそれらを単一の値につなぎ合わせることです。SQL スクリプトを用意しておけばよかったのですが、はるかに簡単に実行できる 2D Z カーブ用に 1 つしかありません。

編集

申し訳ありませんが、これらすべてをすでに知っていて、本当に SQL サンプルを探しているだけかもしれませんが、いくつか追加があります。

  • 25% の最悪の場合のスキャンが 3D 平面にも当てはまるかどうかはわかりません。もっと高いかもしれませんが、今はあなたに伝える頭脳がありません;)。
  • このタイプの曲線は、検索する必要のある範囲を見つけるのに役立ちます。座標が 2 つある場合は、これらをヒルベルト曲線数に変換して、クエリと完全に一致するアイテムを探す必要があるテーブルのセクションを見つけることができます。
  • この概念を拡張して隣人を見つけることができるかもしれませんが、曲線を使用するためには、範囲内を調べることにまだ「行き詰まっています」。
于 2010-09-22T12:51:13.597 に答える
1

おそらく、アルゴリズムを使用してgeohashを作成し、それを 3 つの座標に拡張できます。基本的に、可能な 3D ポイントのワールド キューブを定義し、さらにビットを追加するにつれて、キューブを絞り込みます。次に、左下隅が最小値になるように一貫して定義し、次のような範囲チェックを実行できます。

XXXXa < the_hash < XXXXz
于 2010-09-22T12:52:06.230 に答える