Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我应该根据请求计算一个帖子的热度还是预先计算它?

我应该根据请求计算一个帖子的热度还是预先计算它?
EN

Software Engineering用户
提问于 2013-01-24 01:45:11
回答 3查看 1.3K关注 0票数 1

这里是Reddit的热门算法:

代码语言:javascript
运行
AI代码解释
复制
cpdef double _hot(long ups, long downs, double date):
    """The hot formula. Should match the equivalent function in postgres."""
    s = score(ups, downs)
    order = log10(max(abs(s), 1))
    if s > 0:
        sign = 1
    elif s < 0:
        sign = -1
    else:
        sign = 0
    seconds = date - 1134028003
    return round(order + sign * seconds / 45000, 7)

我的大脑说,一个帖子的辣度应该根据每一个请求来计算,因为旧帖子的辣度分数应该很低。

我在MySql中实现了这个函数,但正如您可能猜到的那样,它很慢。非常慢,甚至还有索引。

然后,我想更新的热点领域的帖子,在每一次投票或否决的帖子。让我们假设,我们有一个帖子刚刚发布,并有100上票和1次投票,它的热度是78 (例子)。但它在三天内没有得到任何选票。3天后,一个新的职位出现,获得100票和1票,并有78分。如果我正在更新投票的热门评分,3天前的帖子和新的帖子将一起显示。但从理论上讲,这篇为期3天的帖子甚至不应该出现在头版上。

在这种情况下,最可行的方法是什么?

EN

回答 3

Software Engineering用户

回答已采纳

发布于 2013-01-24 11:18:04

我的大脑说,一个帖子的辣度应该根据每一个请求来计算,因为旧帖子的辣度分数应该很低。

你的大脑是错的。函数中的date是最初发布的时间。该函数的值与计算时间无关,且在表决之间保持不变。记住这一点,你只需要在投票时更新它。您只需将数字存储在索引列上的数据库和查询中。性能问题消失了。

这也解决了你的第二个问题--今天发100张选票的帖子总是比昨天写的+100的帖子热。

票数 2
EN

Software Engineering用户

发布于 2013-01-24 05:13:45

当您有长期运行的进程时,最好不要提出依赖于流程完成的请求。如果给用户最新的热度分数并不是最重要的,你可能会给用户一个相对接近的分数。

而不是对每个请求启动此计算,您应该有某种机制来触发一个后台进程,该进程可以提取所需的数据、计算热度并更新post的设置值。您的数据库希望类似于:

代码语言:javascript
运行
AI代码解释
复制
/* Other Post Data */
postViews - BIGINT // Number of actual post views
postViewsLastRun - BIGINT // Number of post views at last hotness job
lastViewed - DATETIME  // Timestamp of the last viewing of the post
lastCalculated - DATETIME // Timestamp of the last hotness job
hostness - INT // Hotness rating to display to the user

根据您认为合适的内容,您可能希望在每个n帖子查看数之后重新计算热度,或者您可能希望每小时计算一次。

对于前者,您将提取postViewspostViewsLastRun列,增加它,并根据您的帖子阈值检查它。如果postViewsLastRunpostViews之间的差异达到或超过了阈值,则需要使用某种作业调度器更新postViewsLastRun派生的进程,以处理热评分的处理和更新。

对于后者,您需要运行一个计划好的进程,比如每小时运行一次。它将根据lastCalculated列检查当前时间,以检查帖子是否在其阈值时间范围内被查看。假设满足了另一种计算的标准,它将派生出处理处理的作业,并继续检查数据库中其他帖子的相关数据。

现在,每当用户请求帖子的数据时,您就可以根据准确的标准给他们一个相对精确的热度等级,并且它不会因为长时间运行的计算而造成任何延迟。在您的示例中,您不会希望任何陈旧的信息出现,因为这会导致糟糕的用户体验,因此您需要使用定期运行的方法。

票数 2
EN

Software Engineering用户

发布于 2013-01-24 04:59:30

在我看来(不是专家)是,你可以更新数据库中的热点在任何向上或否决,但为了区别新的和旧的职位,你可以应用某种等式,你保持在数据库中的热度。类似于:

hotnesss = hotness_from_up_and_down_votes_in_DB + (150 -(今日-后日期))+(15-(今日-最后一次投票日期))*10

这意味着,随着时间的推移,帖子会变得不那么火辣,超过150天的帖子就会开始产生负面的热度,而在过去15天里投票的帖子也会因此变得更热,而在没有投票的15天之后,它们就开始变得消极了。

如果你不想要负面的性感,你可以这样做:

hotnesss = hotness_from_up_and_down_votes_in_DB + (150 /((今日-后期日期)+ 1)) +(15/(今天-最后一次投票日期))*10

同样的事情,但随着时间的推移,你开始得到0,而不是负面。

注:+1 on“((今天-post_date)+1)”只是为了防止今天的帖子被150除以0

注意:您可以随意设置阈值( 150天和15天)。如果你想要一个更好的方程,你可以看看逻辑方程或指数方程。

希望能帮上忙。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/184660

复制
相关文章
获取git的提交内容
  Qt君最近工作需要发布一款软件,可是遇到了些问题。需要为软件写版本描述,但版本修改内容都在git的每个commit里面,用手动复制显然太浪费时间,不值得。
Qt君
2019/12/27
2.7K0
Jenkins: 获取文件变更列表、提交ID、提交人和提交信息
Jenkins — Get the latest changed files list, Commit ID, AuthorName, and Commit Message
DevOps云学堂
2022/12/29
2.9K0
Jenkins: 获取文件变更列表、提交ID、提交人和提交信息
从mysql获取到从redis获取 示例
1.因采集是每分钟写入一次数据库,故redis每分钟读取一次数据库最新信息,读取脚本如下:
葫芦
2019/04/13
2.4K0
从mysql获取到从redis获取 示例
flask使用request获取表单提交数据和获取url
web开发免不了需要获取用户提交的数据,Flask为我们提供了request对象来获取用户提交给服务器的数据。 下面是一个最基本的获取数据的例子:
菲宇
2022/05/06
3.1K0
SVN 命令行获取提交日志
可以看到,每次基本只能显示一条记录,大致是给定的日期开始时的最新版本的提交日志,所以获取的是给定日期前(前一天或更早之前)。但是有一个参数为当天(20220720)的,获取结果为空,不知何故。
独立观察员
2022/12/06
1.4K0
SVN 命令行获取提交日志
html获取表单提交数据_提交表单的两种方法
转载于:https://blog.csdn.net/yongwoozzang/article/details/83029128
全栈程序员站长
2022/11/08
2.7K0
Egg 中获取 POST 提交的数据
用过Koa的码农都知道,在Koa中获取POST提交的数据需要配置第三方的中间件,而Egg继承于Koa,在这一方面做了优化,获取POST提交的数据不需要再配置其它的中间件了,并添加了安全机制 CSRF 的防范,在Egg中获取用户提交的POST数据主要有以下两种方法。
越陌度阡
2020/11/26
1.6K0
从记录获取
Record.FieldCount(record as record) as number
逍遥之
2020/03/23
1.2K0
React技巧之表单提交获取input值
原文链接:https://bobbyhadz.com/blog/react-get-form-input-value-on-submit[1]
chuckQu
2022/08/19
1.6K0
React技巧之表单提交获取input值
python 从mysql获取变为redis获取
1.因采集是每分钟写入一次数据库,故redis每分钟读取一次数据库最新信息,读取脚本如下:
葫芦
2019/04/17
3.3K0
python 从mysql获取变为redis获取
[android] 从gallery获取图片
调用Intent对象的setAction()方法,设置动作,参数:Intent.ACTION_PICK
唯一Chat
2019/09/10
1.4K0
JQuery获取form表单数据及数据提交
JQuery获取表单数据 <form id="form-box">   ... </form> JSON字符串格式: let json = $('#form-box').serialize(); console.log('json: ', json); // 输出:json:name=w3h5&type=web 对象格式: let data = {}; let value = $('#form-box').serializeArray(); $.each(value, function (index, i
德顺
2020/12/10
7.8K0
后端获取不到axios.post提交的参数
部署运行项目后,发现后端这两个方法获取参数都是为null,后端又不想变更,于是前端想着怎么来解决这个问题。
青山师
2023/05/05
1.4K0
BlackCat勒索软件声称从Reddit 窃取了80GB的数据
据Security Affairs 6月18日消息,曾于今年2月5日攻击流行社交新闻聚合平台Reddit的幕后主使于近日浮出水面,BlackCat(又名 ALPHV)勒索软件组织发布消息称对这起网络攻击负责。
FB客服
2023/08/08
2130
BlackCat勒索软件声称从Reddit 窃取了80GB的数据
PHP获取当前页面的FORM表单提交
因为制作页面需求,需要在当前页面用php来响应,不做跳转。所以,研究了一下当前页面获取form表单提交的数据!
小唐同学.
2022/03/07
2.9K0
JQuery获取form表单数据及数据提交
未经允许不得转载:w3h5-Web前端开发资源网 » JQuery获取form表单数据及数据提交
德顺
2023/08/25
4550
C#网络爬虫实例:使用RestSharp获取Reddit首页的JSON数据并解析
Reddit 是一个非常受欢迎的分享社交新闻聚合网站,用户可以在上面发布和内容。我们的目标是抓取 Reddit 首页的数据 JSON,以便进一步分析和使用。
小白学大数据
2023/10/16
4600
如何从Facebook获取流量?
译者:Nic 审校:陈明艳 本文长度为4634字,预估阅读时间10分钟。 前言:作为重要的流量来源的Facebook,流量中究竟蕴藏了什么秘密,让我们一探究竟! Facebook带来数量相当可观
iCDO互联网数据官
2018/03/05
5.2K0
如何从Facebook获取流量?
【爬虫】获取Github仓库提交纪录历史的脚本 python
本脚本为第一版开发;后续会进行扩展 #! python3 import requests import time, datetime import json from colorama import Fore,Back,Style,init from bs4 import BeautifulSoup process = 0 output = 0 def req(type,addr,data='',**args): if type == 'get': try:
Mirror王宇阳
2020/12/16
1.4K0
Python开发实战教程(8)-向网页提交获取数据
Python应用现在如火如荼,应用范围很广。因其效率高开发迅速的优势,快速进入编程语言排行榜前几名。本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结。希望大家能够快速入门并学习Python这门语言。
做全栈攻城狮
2018/12/20
8850

相似问题

获取Reddit提交的正文?

11

从reddit获取图像

10

如何使用API获取Reddit提交的评论?

15

Reddit提交API 500错误

10

如何从reddit获取随机帖子

120
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档