背景:
我正在尝试在 RoR 中优化一个完整的 Ajax 驱动论坛。由于 RoR 已经不是完整 ajax 站点的最佳平台,我正在尝试优化我的 sql 请求和存储。
问题:
帖子的声誉基于简单的喜欢/不喜欢从 0-100% 变化,而主要只有最后 100 票应计入所有其他帖子的声誉的 10%,这些帖子引用/回答了该帖子。现在,将该值存储在我的数据库中以便快速读取的最有效方法是什么?
尝试过的解决方案Post.reputation
:
a) 在每个请求上分别读取所有连接。那将是读取巨大的连接表并计算连接。这是否会产生很大的服务器负载,因为它加载了许多条目,或者这不是问题,因为它基本上只有 1 个表?
b) 根本不使用连接,而是将信誉总和存储在actual
(+1 on like, +0.1 on sub-like)和potential
(+1 on like or dislike, +0.1 on sub-like or sub-dislike)。那么Post.reputation
将是actual/potential
. 同时,我仍然必须使用 joinsusers_posts
来限制每个帖子的 1 票。在我看来,这将是性能最好的解决方案,但是有没有办法通过额外的变量来实现 100 票计数限制?因为似乎我几乎放弃了有关投票顺序的信息,这对此很重要。
c) 基本上像a)一样存储所有连接,但另外在数据库中存储信誉值,以便在添加引用连接时读取和计算 + 写入它。在数据库中多次存储相同信息是一种错误的方式吗?
问题:
哪种解决方案最聪明地将该信息存储在我的数据库中并快速/经常访问它?