该功能的工作方式如下:
- 网站有用户,用户可以保存任意数量的搜索(例如纽约的工作、PHP 工作等)。涉及到很多参数,所以这几乎不可能索引(我使用的是 MySQL)。
- 每天都有许多新工作发布到网站上
- 每 24 小时,我们都会获取过去 24 小时内发布的职位,并将它们与现有的职位搜索进行匹配,然后通过电子邮件向用户发送有关匹配职位的信息。
这里的问题是它是一个高流量的网站,即使是乐观的情况(很少有新的职位发布),运行这个搜索查询也需要 10 分钟。这个问题有没有经典的解决方案?我们一直在使用 Sphinx 搜索密集的地方,但我不能在这里应用它,因为 Sphinx 不会返回所有结果,它最终会切断它们。现在我能想到的最好的事情是拥有 search.matched_job_ids 列,然后每当发布职位时,将其与所有现有搜索进行匹配,并将职位 ID 记录在匹配搜索的matched_job_ids 列中。在一天结束时,我们将向用户发送电子邮件并截断该列。这在技术上并没有提供任何性能改进,而是通过执行许多较小的搜索查询而不是一个大查询来分散负载。