2013-02-11 109 views
2

我們正在開發一款應用程序,可以在我們的數據庫中執行產品搜索。我們使用的數據庫是Amazon Dynamo DB,並且在任何給定的時間點上至少會存儲超過1,000萬個產品信息。執行搜索的最佳方式

用戶通過用戶界面輸入產品名稱,我們希望搜索結果在不到2-3秒的時間內顯示出來。我們知道DynamoDB將在此搜索中扮演重要角色,但想知道在應用程序方面是否還有其他功能可以完成。我們計劃使用Memcache緩存搜索,以便在第二次搜索時更快。

還有什麼我們可以執行或照顧,以便搜索發生非常快。這個實現是用Java實現的。

在此先感謝。

+2

你需要更具體一些關於你的意思的「搜索」 - 完全匹配,部分匹配,通配符,simialr詞,soundex等。你的數據庫將需要不同的索引取決於你想要的搜索類型允許。 – 2013-02-11 09:55:30

+0

@JoshGreifer - 搜索可以是完全匹配或部分匹配 – JavaMany 2013-02-11 10:30:38

回答

1

Dynamodb沒有索引的conecpt,所以您將無法通過主鍵快速搜索。

你有一些主要的選項:

  1. 預生成的搜索結果,並存儲爲一個哈希鍵,結果爲範圍的ID搜索鍵。然後,您可以通過獲取主鍵獲得所有搜索結果。
  2. 使用另一個索引來存儲所有ID。例如CloudSearch
  3. 如果你想確切的產品名稱是否一致,他們的映射存儲在一個單獨的表的id
+0

確切的功能是用戶搜索產品,並顯示與其當前位置5KM範圍內匹配的所有產品。對此有何想法? – JavaMany 2013-02-11 11:11:30

+0

@JavaMany對於一個問題,這真的是一個非常大的範圍,很難回答。你將不得不計算每件物品的距離。用城鎮來存儲它們可能是一把主鑰匙,所以你可以得到他的城鎮的所有物品,並使用範圍鍵確切的位置(你可以得到範圍鍵+ - 一個整數) – 2013-02-11 12:26:05

0

的確切功能是某個產品的用戶搜索和內的所有配套產品顯示他當前位置的半徑5KM。對此有何想法? - 對產品JavaMany

所以,你要自由文本搜索屬性和地理空間濾波。 DynamoDB不支持「開箱即用」這兩個概念(除了進行全表掃描),並且不適用於關係查詢。

你有一些選擇 - 正如其他人所說的,你可以使用CloudSearch作爲自由文本搜索屬性;這將過濾10M記錄到一個較小的子集;對於其中的每一個,您都必須從DynamoDB中檢索long/lat,並將它們與用戶點周圍的5KM半徑進行比較。根據CloudSearch找到的記錄數量,這可能會或可能不會令人滿意。

您必須找到一種方法讓CloudSearch索引保持最新狀態。

另一種方法是使用AmazonRDS,並使用MySQL或MS SQL的自由文本搜索和地理空間功能。當然,這可能需要一個模式(我假設你試圖避免)。

相關問題