我目前正在用 Ruby on Rails 编写一个 webapp,它根据用户回答的问题来匹配用户。然后他们可以搜索一系列用户,系统将搜索者与该范围内的每个用户进行匹配,并以有序列表的形式返回它们,因此最高匹配首先出现。
问题是这个操作的工作量非常大,我认为我不能即时完成。我已经将我的 SQL 优化到最大,并在一个 SQL 查询中完全实现了我的匹配算法,计算 2 个用户(本地机器)之间的匹配百分比大约需要 8.2 毫秒。问题是当有 5000 个用户被搜索时,Rails 获取这个用户数组,遍历他们并执行这个查询 5000 次,这在我的本地机器上大约需要 50 秒。如果我转移到 PostgresSQL 并将其设为存储过程,我可以减少这种情况吗?
我现在的问题是,有哪些方法,例如后台进程、缓存,以便当用户按下搜索时,结果显示只需几秒钟?或者这不可能在这么大的范围内,我必须预先计算匹配并将它们存储在 NoSQL 或类似的东西中,因为对于 50k 用户来说已经有 25 亿行。