私たちが取引している会社は、約 900,000 の製品リストを含む 1.2 GB の CSV ファイルを毎日私たちに提供したいと考えています。ファイルのごく一部のみが毎日変更され、おそらく 0.5% 未満であり、実際には製品が追加または削除されているだけであり、変更されていません。製品リストをパートナーに表示する必要があります。
これをさらに複雑にしているのは、パートナーが郵便番号から半径 30 ~ 500 マイル以内にある製品リストのみを表示できるようにする必要があることです。各製品リストの行には、製品の実際の半径を表すフィールドがあります (30 だけのもの、500 のもの、100 のものなどがあります。500 が最大です)。特定の郵便番号のパートナーは、結果が 20 件ほどしかない可能性が高く、未使用のデータが大量にあることを意味します。すべてのパートナーの郵便番号が事前にわかるわけではありません。
パフォーマンスを考慮しなければならないので、これについてどうするのが最善の方法かわかりません。
2 つのデータベースを用意する必要があります。1 つは郵便番号と緯度/経度を含み、Haversine 式を使用して距離を計算し、もう 1 つは実際の製品データベースを使用する必要があります。その後、どうすればよいでしょうか? 指定された半径内のすべての郵便番号を返し、製品データベースで一致するものを探しますか? 半径 500 マイルの場合、大量の郵便番号になります。または、MySQL 関数を記述しますか?
Amazon SimpleDB を使用してデータベースを保存することもできますが、それでも郵便番号に問題があります。Amazon が呼んでいるように、製品用と郵便番号用の 2 つの「ドメイン」を作成できますか? ただし、複数の SimpleDB ドメインにまたがるクエリを作成できるとは思いません。少なくとも、私は彼らのドキュメントのどこにもそれを見ません。
私は他の解決策を完全に受け入れています。PHP/MySQL または SimpleDB である必要はありません。専用サーバーは 2 GB の P4 であることに注意してください。RAM をアップグレードすることはできますが、これでは大量の処理能力を投入することはできません。または、1.2 GB の CSV の処理中に VPS が耐えられないほど遅かったとしても、問題にならない場所に毎晩 VPS でデータベースを保存して処理することさえできます。デスクトップ コンピューターでファイルをオフラインで処理し、データベースをリモートで毎日更新することもできますが、郵便番号と製品リストを相互参照する必要があるという問題はまだあります。