多次元検索 (KDTree や RTree など) をサポートできるデータベース上に C++ アプリケーションを構築したいと考えています。R ツリーを有効にした SQLite は最大 5 次元しかサポートしていませんが、これは私が必要とするよりもはるかに小さいものです。なにか提案を?
1 に答える
さて、クエリは実際にこのように意味がありますか? ユークリッド距離は、2D および 3D ジオメトリック データの妥当な距離です。しかし、「時空」についてさえ、実際には意味がありません。1 秒は 1 メートルとはまったく異なるものだからです。
最初にどのタイプの距離が妥当かを判断し、次にどの指標が適切かを考えます。クエリに応じて、非常に異なるインデックスが必要になります。
ここには「フリーサイズ」はありません。1 つのタスクと 1 つのデータ セットで適切に機能するインデックスは、別のデータ セットでは特に高次元での線形スキャンよりも劣る可能性があります。
動的データと静的データは、やはり大きく異なる 2 つのものです。バランスの取れたツリーを動的に維持することは、R ツリーを STR で一括読み込みし、ウィンドウ クエリでクエリするよりもはるかに困難です。これはほんの数行で、優れたコーダーなら数日でできるはずです。
高次元データの問題について読みたいと思うかもしれません。たとえば、「次元の呪い」に関するかなりバランスの取れた記事です (失敗の言い訳として「高次元データにインデックスを付けることはできない」と言っている記事はたくさんあります)。そうするために、これは少なくとも、できる場合とできない場合の例をいくつか示します)。