非常に大きな人口密度データベースを照会する必要がある Web アプリケーションを開発しています。データは基本的に緯度、経度、および人口数です (これをlat, lon, popとして抽象化できます)。
これには MySQL と PHP を使用します。データは非常に粒度が細かいため、ポイントの総数は非常に多く、数十億のオーダーです。(正直に言うと、この時点でどれくらいの大きさかはわかりません。まだ完全なデータは持っていません。サンプルを試すだけです。) サーバーは単なる安価なサーバー ファーム マシン (Bluehost など) です。
アプリケーションは、特定の緯度と経度の座標を中心とする任意の半径の円の人口データを集計しようとします。つまり、基本的には、「緯度、経度を中心とする半径xの円の総人口を教えてください」と言うことになります。これには、非常に単純な合計関数を記述するだけで済みます。
上記のすべてと、これを可能な限り高速かつ効率的にしたいという欲求を考慮して、私の質問は次のとおりです。最適なデータベーススキーマは何ですか? 私はここを見て、この種のデータの格納に関するいくつかの優れた基本を学びました (浮動小数点数は緯度/経度データに対しては正常に機能し、BETWEEN ステートメントは < および > 演算子よりも高速です)。大量のデータを処理するには、数十億行のテーブルと 3 つのフィールド ( lat、lon、popなど) を使用するよりも良い方法があります。
私が思いついたアイデアは、すべての主要な経度見出しを別々の表に分けることでしたが、それが本当に物事を大幅にスピードアップするかどうかはわかりません. (インデックス作成以外の MySQL の最適化についてはよくわかりません。) もう 1 つの関連するアイデアは、データのさまざまな「チャンク」 (たとえば、特定の緯度x経度の正方形)に対して 16 進データの超長い文字列を格納することです。大きなバイナリ ビットマップを使用し、その場でデコードするだけです (ただし、これは、比較的安価なサーバーを管理するには非現実的だと思います)。
しかし、私は DBA ではなく、あまりプログラマーでもないので (私は初心者ではありませんが、専門家でもありません)、これを行う方法について他の提案を聞きたいと思っています。現在のサーバーの処理能力を考えると、そもそもそれが馬鹿げた考えであるかどうか。