まず最初に:
おそらく、単一のバケットと、ストアごとに異なるプレフィックスを持つことについて話しているでしょう。ストアごとにバケットがあるため、各バケットに 2 つのファイルを保持するのは、間違いなくやり過ぎです。
最寄りの店舗に関する質問: S3 に対して SQL クエリを実行できません。
ソリューションは、アプリケーションの規模に大きく依存します。Web (またはインターネット) スケールのアプリケーション (またはそれ以下) について話している場合は、間違いなく S3 の前に何かを追加する必要があります。S3 はストレージに関するものであり、クエリや計算の実行に関するものではありません。
私の提案は、顧客ベースのサイズと店舗ベースのサイズに応じて、以下のいずれかになります
。S3 の前に m1.small または同様の EC2 インスタンスを配置し、ストア リストをインスタンス ストレージ (または S3) に保持し、インスタンスのメモリ キャッシュでロケーション ベースのクエリを実行できます。選択したサーバー テクノロジ (Python、Java、node.js) を使用して実装できます。
2- 中規模以上: 数 (または数百万) のクライアント、数 (または数百万) のストア: 確実にアプリケーション層とデータベース層に固執します。アプリケーション層には任意の AWS テクノロジー (複数の EC2 インスタンス + ELB、Elastic Beanstalk など) を含めることができ、DB 層は SQL (私の推奨は RDS) または NoSQL (たとえば、DynamoDB) のいずれかにする必要があります。ストアをデータベース層にモデル化し、アプリ層にクエリを実行させます。
いくつかの方法で問題を解決できますが、私の提案は、一般的なアーキテクチャとして上記のいずれかに固執することです。