1

该功能的工作方式如下:

  • 网站有用户,用户可以保存任意数量的搜索(例如纽约的工作、PHP 工作等)。涉及到很多参数,所以这几乎不可能索引(我使用的是 MySQL)。
  • 每天都有许多新工作发布到网站上
  • 每 24 小时,我们都会获取过去 24 小时内发布的职位,并将它们与现有的职位搜索进行匹配,然后通过电子邮件向用户发送有关匹配职位的信息。

这里的问题是它是一个高流量的网站,即使是乐观的情况(很少有新的职位发布),运行这个搜索查询也需要 10 分钟。这个问题有没有经典的解决方案?我们一直在使用 Sphinx 搜索密集的地方,但我不能在这里应用它,因为 Sphinx 不会返回所有结果,它最终会切断它们。现在我能想到的最好的事情是拥有 search.matched_job_ids 列,然后每当发布职位时,将其与所有现有搜索进行匹配,并将职位 ID 记录在匹配搜索的matched_job_ids 列中。在一天结束时,我们将向用户发送电子邮件并截断该列。这在技术上并没有提供任何性能改进,而是通过执行许多较小的搜索查询而不是一个大查询来分散负载。

4

1 回答 1

1

每个工作都可以用多个参数来描述——工作领域、工作名称、薪水等。每个参数都有一组预定义的值 -

  1. 工作领域——IT、医药、工业...
  2. 职位名称——程序员、测试员、司机……
  3. 每月10-50千,50-100...
  4. 弹性时间,全职,自由职业者......

让我们对保存的搜索进行编码。所有参数中值的最大数量(我相信它是工作名称)是数字系统的基础。参数数量 - 位数。

BIGINT = 2^64-1 = 18 446 744 073 709 551 616 = 20 digits. 在正常的 10 基系统中,您可以描述20-1 (first digit is fixed) = 19每个具有 10 个值的参数。由于 10 个值不足以描述作业名称等参数,您应该使用 30-60 基系统。当然,它会导致参数总数减少,但我认为可以用 12-15 个参数来描述一些工作。

创建savedSearches(code,mail)索引(代码,邮件)的表。索引类型 - 主键。

新职位发布:

1)以编程方式对其进行编码。
2) select mail from savedSearhes where code=calculatedCode。邮件在覆盖索引中 - 选择应该足够快。
3)将新工作发送到选定的邮件。

重要说明- 一个参数 - 发布职位的主办公司可能有太多的值。我认为您应该将其单独存储,而不是保存在已保存的Searhes 表中,因为用户通常不关心公司-他关心薪水、技能等

如果用户想要搜索不固定的参数,例如不仅仅是程序员职位而是测试人员,团队负责人你必须搜索的不是单个编码数字而是区间

我的想法只是假设,为进一步调查提供一些基础))

于 2013-08-16T10:24:33.470 回答