2

我们正在开发一个可以对我们数据库中的产品进行搜索的应用程序。我们使用的数据库是 Amazon Dynamo DB,在任何给定时间点都将至少存储超过 1000 万条产品信息。

用户通过 UI 输入产品名称,我们希望搜索结果在 2-3 秒内显示出来。我们知道 DynamoDB 将在此搜索中发挥重要作用,但想知道在应用程序端是否还有其他可以做的事情。我们计划使用 Memcache 缓存搜索,以便在第二次搜索时更快。

还有什么我们可以实现或处理的东西,以便搜索发生得非常快。实现是在Java中。

提前致谢。

4

2 回答 2

1

Dynamodb 没有索引的 conecpt,因此除了主键之外,您将无法快速搜索。

您有一些主要选择:

  1. 预生成搜索结果并将搜索键存储为哈希键,并将结果的 id 存储为范围。然后你可以通过获取主键来获取所有搜索结果
  2. 使用另一个索引来存储所有 id。例如云搜索
  3. 如果您想要产品名称完全匹配,请将它们存储在一个单独的表中,并映射到 id
于 2013-02-11T09:56:59.147 回答
0

确切的功能是用户搜索产品,并显示在其当前位置半径 5KM 内匹配的所有产品。对此有什么想法吗?– JavaMany

因此,您需要针对产品属性的自由文本搜索和地理空间过滤。DynamoDB 不支持“开箱即用”的这两个概念中的任何一个(除非进行全表扫描),并且并不真正适用于关系查询。

您有一些选择 - 正如其他人所提到的,您可以将 CloudSearch 用于自由文本搜索属性;这会将 10M 记录过滤到更小的子集;对于其中的每一个,您都必须从 DynamoDB 中检索 long/lat 并将它们与用户点周围 5KM 的半径进行比较。根据 CloudSearch 找到的记录数量,这可能会也可能不会执行。

您必须找到一种方法来使 CloudSearch 索引保持最新。

另一种方法是使用 AmazonRDS,并使用 MySQL 或 MS SQL 的自由文本搜索和地理空间功能。当然,这可能需要一个模式(我假设你试图避免)。

于 2013-02-11T16:20:13.703 回答