店舗の場所のデータと属性である複雑な XML オブジェクトのグループがあります。
50 の店舗ロケーションを持つ店舗もあれば、1500 の店舗ロケーションを持つ店舗もあれば、20,000 の店舗ロケーションを持つ店舗もあります。
店舗の場所に関する緯度/経度およびその他のデータで店舗の場所をフィルタリングできる店舗の Java オブジェクトのリストを作成したい
最も重要なフィルターは緯度/経度です。すべての場合において、最大および最小緯度と最大および最小経度の例でエリア内のすべての店舗を見つける必要があります: (40.146364,-75.406188) と (40.228694,-75.491295) の間
緯度/経度の値の重複は許可されています
フィルタリングに使用するいくつかの重要な明示的なプロパティ (緯度、経度、店舗タイプ コードなど) と完全な XML を含む文字列を含むオブジェクトを作成することを考えていました。
オブジェクトはArrayListまたは別のタイプのようなコレクションに入り、キーは緯度/経度の文字列であると考えていました。
コレクションをすばやくフィルタリングすることが重要です。それは1日に何百万回も起こります。コレクションの作成は起動時に行われ、フィルターが高速な場合はパフォーマンスが低下する可能性があります。
緯度/経度フィルターの特異性は非常に高いです。1500 の店舗の場所がある 1 つの例では、通常、50 以下の店舗の場所が返されます。
コレクションを反復処理し、緯度/経度のキーを解析することを考えていました。緯度/経度が目的の範囲内にある場合は、オブジェクトを取得し、その他のあまり具体的でない検索基準をフィルター処理します。
クエリの数が多く、同じクエリが繰り返されることはほとんどないため、データベースに直接クエリを実行することはお勧めできません。各クエリのパラメーターが異なるため、DB キャッシングは行われません (緯度/経度は多くの場合、小数点以下 5 桁です)。コレクションを処理するということは、負荷を DB からアプリケーション サーバーに移行することを意味しますが、Oracle のライセンスとクラスタリングは、AWS または Tomcat インスタンスの束を負荷分散するよりもはるかに高価で複雑です。
これらの要件と制約の実装に関するグループからのアイデアはありますか?