【问题标题】:How do you pre-compute a scoring system from the database?您如何从数据库中预先计算评分系统?
【发布时间】:2011-07-19 10:59:09
【问题描述】:

Stackoverflow 会在您的用户名旁边显示您的声誉。我想它不会命中数据库来计算每个页面渲染的分数(或者它可能会?)。当有人给我点赞时,用户表中的总分字段会更新吗?

这类系统的最佳做法是什么?如果这是一个明显的问题,我很抱歉,我是数据库新手。

【问题讨论】:

  • +1。这个问题问了自己很久。

标签: database scoring


【解决方案1】:

当您登录时,系统会从数据库中提取该号码以及您的所有用户信息。

它可以是一个用户对象。该用户对象有一个属性 score,当您登录时,该属性会被初始化为数据库中的任何数字。

当您浏览网站并进行操作时,属性会更新,但数据库不会更新。

然后,您只能在对象用户被破坏时(通过注销或关闭浏览器)或在一定时间后更新数据库。

【讨论】:

  • 属性在内存缓存中更新,也推送或排队到持久层(本例中为db)...你不能依赖用户注销或关闭浏览器来更新您的实体。
【解决方案2】:

我认为这样一个一般问题的一般答案是:缓存!缓存的想法可能很简单,但要做到正确并不总是那么容易。我会假设 SO 不仅存储您的总分。它存储所有添加到您的分数的“事件”。您的总分是根据这些“事件”计算出来的。所以总分已经是某种预先计算或缓存的值。如果您不想为每个请求访问数据库,则可以将值缓存在内存中。 Memcached 经常用于此类作业,但当然还有其他选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多