Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.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/mysql/55.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
Javascript 如何按“排序”对搜索结果进行排序;趋势;?_Javascript_Mysql_Database_Node.js_Web - Fatal编程技术网

Javascript 如何按“排序”对搜索结果进行排序;趋势;?

Javascript 如何按“排序”对搜索结果进行排序;趋势;?,javascript,mysql,database,node.js,web,Javascript,Mysql,Database,Node.js,Web,在我的例子中,我希望根据趋势(仅基于上升投票与时间)过滤搜索结果 以下是一些实现“趋势排序”的网站示例: 我看到的两个选择: 1。动态计算分数(每次页面加载) 这就是我目前拥有的解决方案。每次页面加载都会调用一个MySQL查询,并计算表中每一行的分数。这似乎是最准确、实时的方法。问题是要比较的项目越多,所需时间就越长。现在大约有120万行,需要3秒钟。在生产场景中,我的目标是

在我的例子中,我希望根据趋势(仅基于上升投票与时间)过滤搜索结果

以下是一些实现“趋势排序”的网站示例:

我看到的两个选择:

1。动态计算分数(每次页面加载)

这就是我目前拥有的解决方案。每次页面加载都会调用一个MySQL查询,并计算表中每一行的分数。这似乎是最准确、实时的方法。问题是要比较的项目越多,所需时间就越长。现在大约有120万行,需要3秒钟。在生产场景中,我的目标是<100-300毫秒

2。计划每X分钟运行一次任务,并预先计算分数

这似乎是一个很好的解决方案,但我看到的一个非常明显的问题是,结果存储在哪里?更新数据库中的每一行都需要很长时间(我有大约120万行)

大量的谷歌搜索帮助我决定使用哪种趋势算法,而不是如何在生产场景中实现它

下面是我的数据库的一个简单示例:

table_topic
id
title


table_upvotes
topic_id
user_id
created_at
下面是实际的评分算法():

如果基于时间,例如“趋势”为“在过去24小时内获得了许多向上投票”,那么如果您只计算相关行的分数,而不是整个数据库的分数,那么您应该可以获得良好的性能提升,从而允许动态地进行计算

我唯一能理解的另一种解释是,按票数递增,所以这也不会花费太多时间,所以也应该可以在运行中进行

如果你想要更详细的答案,你必须详细说明你选择实现的确切算法。

如果基于时间,那么“趋势”就是“在过去24小时内获得了很多上升票”,例如,如果你只计算相关行的分数,而不是整个数据库的分数,你应该会获得良好的性能提升,因此,它可以在飞行中制造

我唯一能理解的另一种解释是,按票数递增,所以这也不会花费太多时间,所以也应该可以在运行中进行


如果您想要更详细的答案,您必须详细说明您选择实施的确切算法。

趋势分析还是仅基于上升投票?趋势=数学,上升票数=排序…趋势还是仅基于上升票数?趋势=数学,上升票数=排序…谢谢。我对问题进行了编辑,以包括实际使用的算法。你的方法可能更好。我可以计算过去X小时内的上升投票数,而不是计算自<代码>在<代码>日期创建以来的所有上升投票数,将分数标准化,然后进行比较。我必须运行测试并比较性能。您认为有没有不涉及即时计算的可能解决方案?谢谢。我对问题进行了编辑,以包括实际使用的算法。你的方法可能更好。我可以计算过去X小时内的上升投票数,而不是计算自<代码>在<代码>日期创建以来的所有上升投票数,将分数标准化,然后进行比较。我必须运行测试并比较性能。您是否看到任何不涉及即时计算的可能解决方案?
exports.hackerHot = function (gravity) {
  if (gravity == null) {
    gravity = 1.8;
  }
  return function (votes, itemDate) {
    var hourAge = (Date.now() - itemDate.getTime()) / (1000 * 3600);
    return (votes - 1) / Math.pow(hourAge + 2, gravity);
  };
};