Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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
Php 优化从非常大的MySQL表中提取数据的算法_Php_Mysql_Algorithm - Fatal编程技术网

Php 优化从非常大的MySQL表中提取数据的算法

Php 优化从非常大的MySQL表中提取数据的算法,php,mysql,algorithm,Php,Mysql,Algorithm,我的网站提供了大量标记和分类的内容,我正试图创建一个强大的算法,使内容符合用户的需求。用户可以选择他们最感兴趣的标签,与这些标签匹配的内容将获得更高的优先级。此外,内容可以被“喜欢”(按优先级向上推),时间衰减按优先级向下推。因此,最终,用户应该看到与他们感兴趣的内容一致的相对新的内容,并且也受到其他用户的欢迎 当前算法的工作原理如下: 从content表中提取所有项目。为每个项目分配1分 对照用户标签检查内容标签,查看从步骤1提取的数组中是否存在匹配项。如果是这样,对该项目的分数应用乘数 检查

我的网站提供了大量标记和分类的内容,我正试图创建一个强大的算法,使内容符合用户的需求。用户可以选择他们最感兴趣的标签,与这些标签匹配的内容将获得更高的优先级。此外,内容可以被“喜欢”(按优先级向上推),时间衰减按优先级向下推。因此,最终,用户应该看到与他们感兴趣的内容一致的相对新的内容,并且也受到其他用户的欢迎

当前算法的工作原理如下:

  • content
    表中提取所有项目。为每个项目分配1分
  • 对照
    用户标签检查
    内容标签
    ,查看从步骤1提取的数组中是否存在匹配项。如果是这样,对该项目的分数应用乘数
  • 检查
    content\u likes
    ,查看每个项目有多少喜欢。根据此数量应用另一个乘数
  • 基于项目的时间衰减应用第三个因子。显然,较旧的物品比较新的物品受到更大的惩罚
  • 按总分排序。结果数组应首先包含最相关的项。然后,我可以简单地将这个数组缩减到20个左右的项目,并将它们显示在页面上
  • 正如您可能知道的,这是一个缓慢的算法,它不仅必须运行查询来提取每一条内容,而且还必须运行单独的查询来检查
    内容标签
    用户标签
    ,以及
    内容标签
    。太多的疑问

    我想我的第一个问题是:我做错了吗?除此之外,你能想出任何方法来优化我上面总结的一切吗?假设项目和用户都有相关的标签,那么算法本身工作得很好。但我担心,当我的
    内容
    表增加到数万项时,我会陷入一片混乱


    谢谢你的帮助

    使用许多查询会降低页面速度。
    尝试将它们组合成尽可能少的索引,请在mysql表上使用索引!你会注意到创建索引肯定会影响页面的加载时间。

    Q:你能想出任何方法来优化我上面总结的内容吗?答:为高效的查询设计数据库模式并创建数据库索引。为什么不记录每个内容的分数呢。那么你就不需要ti去做所有的事情了,这就很容易了,就像为那些内容获取分数一样。我认为跟踪分数的问题在于,它会根据每个用户的喜好而变化。如果它只包含喜欢和时间衰减,我可以保持分数,但是用户标签增加了新的复杂度。