2

データベース内の製品を検索できるアプリを開発しています。私たちが使用しているデータベースは Amazon Dynamo DB であり、任意の時点で少なくとも 1,000 万を超える製品情報が保存されます。

ユーザーが UI を介して製品名を入力すると、検索結果が 2 ~ 3 秒以内に表示されるようにしたいと考えています。DynamoDB がこの検索で​​主要な役割を果たすことは理解していますが、アプリケーション側で他にできることがあれば知りたいです。2 回目の検索時に高速になるように、Memcache を使用して検索をキャッシュする予定です。

検索が非常に高速に行われるように、実装または処理できるものは他にありますか? 実装は Java です。

前もって感謝します。

4

2 に答える 2

1

Dynamodb にはインデックスの概念がないため、主キー以外では高速に検索できません。

いくつかの主要なオプションがあります。

  1. 検索結果を事前に生成し、検索キーをハッシュ キーとして保存し、結果の ID を範囲として保存します。次に、主キーを取得することですべての検索結果を取得できます
  2. 別のインデックスを使用して、すべての ID を保存します。たとえば、CloudSearch
  3. 製品名の完全一致が必要な場合は、ID へのマッピングを使用して別のテーブルに保存します。
于 2013-02-11T09:56:59.147 に答える
0

正確な機能は、ユーザーが製品を検索し、現在の場所から半径 5KM 以内で一致するすべての製品が表示されることです。これについて何か考えはありますか?– JavaMany

したがって、製品属性に対するフリーテキスト検索と地理空間フィルタリングが必要です。DynamoDB は、これら 2 つの概念のいずれも「すぐに使える」ものではなく (完全なテーブル スキャンを実行する場合を除いて)、リレーショナル クエリにはあまり適していません。

いくつかのオプションがあります-他の人が述べたように、フリーテキスト検索属性に CloudSearch を使用できます。これにより、1,000 万レコードがより小さなサブセットにフィルター処理されます。これらのそれぞれについて、DynamoDB から経度/緯度を取得し、それらをユーザーのポイントの周囲 5 KM の半径と比較する必要があります。CloudSearch が検出するレコードの数によっては、これが適切に実行される場合とそうでない場合があります。

CloudSearch インデックスを最新の状態に保つ方法を見つける必要があります。

もう 1 つの方法は、AmazonRDS を使用し、MySQL または MS SQL のフリー テキスト検索と地理空間機能を使用することです。もちろん、それにはスキーマが必要になる場合があります(回避しようとしていると思います)。

于 2013-02-11T16:20:13.703 に答える