0

我目前正在用 Ruby on Rails 编写一个 webapp,它根据用户回答的问题来匹配用户。然后他们可以搜索一系列用户,系统将搜索者与该范围内的每个用户进行匹配,并以有序列表的形式返回它们,因此最高匹配首先出现。

问题是这个操作的工作量非常大,我认为我不能即时完成。我已经将我的 SQL 优化到最大,并在一个 SQL 查询中完全实现了我的匹配算法,计算 2 个用户(本地机器)之间的匹配百分比大约需要 8.2 毫秒。问题是当有 5000 个用户被搜索时,Rails 获取这个用户数组,遍历他们并执行这个查询 5000 次,这在我的本地机器上大约需要 50 秒。如果我转移到 PostgresSQL 并将其设为存储过程,我可以减少这种情况吗?

我现在的问题是,有哪些方法,例如后台进程、缓存,以便当用户按下搜索时,结果显示只需几秒钟?或者这不可能在这么大的范围内,我必须预先计算匹配并将它们存储在 NoSQL 或类似的东西中,因为对于 50k 用户来说已经有 25 亿行。

4

1 回答 1

2
  1. 一种方法是尝试有一个 SQL 查询。现在您正在为每个用户执行一个查询,但我的意思是一个查询。因此,当您遍历用户时,一个查询将完成您正在做的工作。

  2. 您可以做一个数据库缓存,并每天为每个用户存储结果。为此,您不需要 NoSQL 数据存储,只需一个 cron 作业即可将结果写入数据库。

  3. 您还可以将结果存储在内存缓存中。内存缓存将在您的 Web 应用程序的 Rails 实例之间共享,因此所有实例都可以使用一份副本。我将通过一种检查过期条件的方法来访问结果,以测试它是否需要刷新数据。

于 2012-10-20T09:56:30.633 回答