我用python为谷歌应用程序引擎写了一个应用程序,每个用户都可以提交一个帖子,每个帖子都有一个由其投票和评论数量确定的排名。排名只是基于这两个参数的简单计算。我在想,我应该将这个值存储在数据存储中(并占用那里的空间),还是在每次需要它时简单地计算它。现在仅供参考,帖子将按排名排序,因此需要考虑这一点。
我主要考虑的是效率,并尝试平衡是否应该尝试节省数据存储空间或节省读/写配额。
我认为简单地存储它会更好,但是每次有人在帖子上投票或评论时,我都需要重新计算和重写排名值。
任何输入都是很棒的。
发布于 2012-06-30 00:34:52
如何将排名作为一个属性存储在帖子中。这对于查询/排序是有意义的,不是吗?
如果您在存储投票/评论计数的同时存储排名(意味着在相同的整体中),那么唯一增加的写入成本将是索引。(初始写入成本也可以,但这只是2个非常小的开销)。
你需要做一个数据库操作,每次任何人投票或评论的帖子,无论如何!还有什么方法可以跟踪投票/评论?
实际上,我想你会开始使用文本搜索来查找帖子中的数据。如果是这样,我会考虑是否可以将排名作为属性存储在搜索索引中,并使用它对匹配的结果进行排名。
我们不需要考虑您如何选择要显示的帖子。按投票和评论排名是唯一的标准吗?
发布于 2012-06-29 22:52:34
当计算开销很大时,缓存最有用。如果计算简单且成本低廉,您不妨根据需要重新计算。
发布于 2012-06-30 03:50:02
如果您依赖于在实体中保持运行的投票计数,那么您要么必须愿意偶尔失去投票,要么必须使用事务。如果你使用事务,你每秒能做多少事务是有速率限制的。(请参阅有关事务和实体组的文档)。如果你倾向于拥有大量的选票,那么速率限制可能是一个问题。
对于低得票率,在实体中保留计数可能会很好。但是,如果投票率有任何显著的峰值,那么存储定期汇总到缓存计数中的独立投票实体,可能会通过memcache中保存的(可能不可靠的)增量计数进行调整,这对您可能更好。
这真的取决于你想要优化什么。如果您试图通过以非事务方式缓存投票计数来最小化磁盘写入,则可能会丢失投票。
https://stackoverflow.com/questions/11269862
复制相似问题