【发布时间】:2011-07-19 10:59:09
【问题描述】:
Stackoverflow 会在您的用户名旁边显示您的声誉。我想它不会命中数据库来计算每个页面渲染的分数(或者它可能会?)。当有人给我点赞时,用户表中的总分字段会更新吗?
这类系统的最佳做法是什么?如果这是一个明显的问题,我很抱歉,我是数据库新手。
【问题讨论】:
-
+1。这个问题问了自己很久。
Stackoverflow 会在您的用户名旁边显示您的声誉。我想它不会命中数据库来计算每个页面渲染的分数(或者它可能会?)。当有人给我点赞时,用户表中的总分字段会更新吗?
这类系统的最佳做法是什么?如果这是一个明显的问题,我很抱歉,我是数据库新手。
【问题讨论】:
当您登录时,系统会从数据库中提取该号码以及您的所有用户信息。
它可以是一个用户对象。该用户对象有一个属性 score,当您登录时,该属性会被初始化为数据库中的任何数字。
当您浏览网站并进行操作时,属性会更新,但数据库不会更新。
然后,您只能在对象用户被破坏时(通过注销或关闭浏览器)或在一定时间后更新数据库。
【讨论】:
我认为这样一个一般问题的一般答案是:缓存!缓存的想法可能很简单,但要做到正确并不总是那么容易。我会假设 SO 不仅存储您的总分。它存储所有添加到您的分数的“事件”。您的总分是根据这些“事件”计算出来的。所以总分已经是某种预先计算或缓存的值。如果您不想为每个请求访问数据库,则可以将值缓存在内存中。 Memcached 经常用于此类作业,但当然还有其他选择。
【讨论】: