背景
我正在尝试在RoR中优化完整的Ajax驱动的论坛。由于RoR已经不是完整的ajax站点的最佳平台,我正在尝试优化我的sql请求和存储。
问题:
帖子的声誉基于0-100%的简单喜欢/不喜欢,而主要只有最后100张选票应该优先于所有其他帖子的信誉的10%,这些帖子会引用/回答该帖子。现在,在我的数据库中存储该值以便快速读取的最有效方法是什么?
尝试Post.reputation
的解决方案:
a)在每个请求中单独读取所有联接。那将是阅读巨大的连接表并计算连接数。这是否会创建一个大的服务器负载,因为它加载了很多条目或者这不是一个问题,因为它基本上只有一个表?
b)根本不使用联接,但是将信誉总和存储在actual
(类似于+1,类似于+0.1)和potential
(+1对类似或不喜欢,+ 0.1对子类或次类不喜欢)。然后Post.reputation
将是actual/potential
。与此同时,我仍然需要使用users_posts
的联接来限制每个帖子的1票。在我看来,这将是具有最佳性能的解决方案,但有没有办法用额外的变量实现100票数限制?因为看起来我几乎放弃了关于投票顺序的信息,这对此很重要。
c)基本上存储所有连接,如 a),但另外将信誉值存储在 DB读取的数据库中,并在引用连接时计算+写入添加。在DB中多次存储相同信息是一种错误的方法吗?
问题:
哪种解决方案最智能地将该信息存储在我的数据库中并快速/经常访问?
答案 0 :(得分:1)
最好的方法是(c)。很多时候,在RDBMS中,我们将冗余信息存储为缓存以提高性能。
附加说明:
如果您需要一些原理图代码,请告诉我。