Javascript 如何按“排序”对搜索结果进行排序;趋势;?
在我的例子中,我希望根据趋势(仅基于上升投票与时间)过滤搜索结果 以下是一些实现“趋势排序”的网站示例: 我看到的两个选择: 1。动态计算分数(每次页面加载) 这就是我目前拥有的解决方案。每次页面加载都会调用一个MySQL查询,并计算表中每一行的分数。这似乎是最准确、实时的方法。问题是要比较的项目越多,所需时间就越长。现在大约有120万行,需要3秒钟。在生产场景中,我的目标是<100-300毫秒 2。计划每X分钟运行一次任务,并预先计算分数 这似乎是一个很好的解决方案,但我看到的一个非常明显的问题是,结果存储在哪里?更新数据库中的每一行都需要很长时间(我有大约120万行) 大量的谷歌搜索帮助我决定使用哪种趋势算法,而不是如何在生产场景中实现它 下面是我的数据库的一个简单示例:Javascript 如何按“排序”对搜索结果进行排序;趋势;?,javascript,mysql,database,node.js,web,Javascript,Mysql,Database,Node.js,Web,在我的例子中,我希望根据趋势(仅基于上升投票与时间)过滤搜索结果 以下是一些实现“趋势排序”的网站示例: 我看到的两个选择: 1。动态计算分数(每次页面加载) 这就是我目前拥有的解决方案。每次页面加载都会调用一个MySQL查询,并计算表中每一行的分数。这似乎是最准确、实时的方法。问题是要比较的项目越多,所需时间就越长。现在大约有120万行,需要3秒钟。在生产场景中,我的目标是
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);
};
};