Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql “最佳的数据结构是什么?”;“已保存搜索”;每日电子邮件通知功能?_Mysql_Search_Database Optimization - Fatal编程技术网

Mysql “最佳的数据结构是什么?”;“已保存搜索”;每日电子邮件通知功能?

Mysql “最佳的数据结构是什么?”;“已保存搜索”;每日电子邮件通知功能?,mysql,search,database-optimization,Mysql,Search,Database Optimization,该功能的工作方式如下: 网站有用户,用户可以有任意数量的搜索 已保存(例如纽约的作业、PHP作业等)。有很多参数 所以这实际上是不可能索引的(我使用的是MySQL) 每天都有大量的新工作发布到网站上 每24小时,我们会将过去24小时内发布的工作与现有的工作搜索进行匹配,然后向用户发送电子邮件,告知匹配的工作 这里的问题是,它是一个高流量的网站,即使对于乐观的情况(很少有新的工作发布),运行这个搜索查询也需要10分钟。这个问题有经典的解决方案吗?我们已经在搜索密集的地方使用了Sphinx,但我

该功能的工作方式如下:

  • 网站有用户,用户可以有任意数量的搜索 已保存(例如纽约的作业、PHP作业等)。有很多参数 所以这实际上是不可能索引的(我使用的是MySQL)
  • 每天都有大量的新工作发布到网站上
  • 每24小时,我们会将过去24小时内发布的工作与现有的工作搜索进行匹配,然后向用户发送电子邮件,告知匹配的工作

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

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

  • 工作领域-IT、医药、工业
  • 工作名称-程序员、测试人员、驱动程序
  • 每月10-5万,50-100
  • 弹性工作制,全职,自由职业者
  • 让我们对保存的搜索进行编码。所有参数中的最大值(我相信是作业名称)是数字系统的基础。参数数-位数

    BIGINT=2^64-1=18 446 744 073 709 551 616=20位
    。在正常的10进制系统中,您可以描述
    20-1(第一个数字是固定的)=19个参数,每个参数有10个值。由于10个值不足以描述作业名称等参数,因此应使用30-60-base系统。当然,这会导致参数总数的减少,但我认为可以用12-15个参数来描述某项工作

    创建表
    savedSearches(code,mail)
    ,该表在(code,mail)上建立索引。索引类型-主键

    新职位公布:

    1) 以编程方式对其进行编码。
    2)
    从保存的搜索中选择邮件,其中code=calculatedCode
    。邮件在覆盖索引中-选择sholuld足够快。
    3)将新作业发送到所选邮件

    重要注意事项-一个参数-发布作业的主机公司可能有太多值。我认为您应该单独存储,而不是存储在SavedSearches表中,因为用户通常不关心公司-他关心工资、技能等

    如果用户希望搜索非固定参数,例如不仅仅是程序员职位,而是测试人员、团队负责人,那么您必须搜索而不是单个编码的数字,而是间隔


    我的想法只是假设,为进一步的调查奠定了基础。)

    每个工作都可以用参数的数量来描述——工作范围、工作名称、工资等等。每个参数都有一组预定义值-

  • 工作领域-IT、医药、工业
  • 工作名称-程序员、测试人员、驱动程序
  • 每月10-5万,50-100
  • 弹性工作制,全职,自由职业者
  • 让我们对保存的搜索进行编码。所有参数中的最大值(我相信是作业名称)是数字系统的基础。参数数-位数

    BIGINT=2^64-1=18 446 744 073 709 551 616=20位
    。在正常的10进制系统中,您可以描述
    20-1(第一个数字是固定的)=19个参数,每个参数有10个值。由于10个值不足以描述作业名称等参数,因此应使用30-60-base系统。当然,这会导致参数总数的减少,但我认为可以用12-15个参数来描述某项工作

    创建表
    savedSearches(code,mail)
    ,该表在(code,mail)上建立索引。索引类型-主键

    新职位公布:

    1) 以编程方式对其进行编码。
    2)
    从保存的搜索中选择邮件,其中code=calculatedCode
    。邮件在覆盖索引中-选择sholuld足够快。
    3)将新作业发送到所选邮件

    重要注意事项-一个参数-发布作业的主机公司可能有太多值。我认为您应该单独存储,而不是存储在SavedSearches表中,因为用户通常不关心公司-他关心工资、技能等

    如果用户希望搜索非固定参数,例如不仅仅是程序员职位,而是测试人员、团队负责人,那么您必须搜索而不是单个编码的数字,而是间隔

    我的想法只是假设,为进一步调查打下基础