0

我用python为谷歌应用引擎编写了一个应用程序,每个用户都可以提交一个帖子,每个帖子都有一个由其投票和评论数决定的排名。排名只是基于这两个参数的简单计算。我想知道我应该将这个值存储在数据存储中(并在那里占用空间)还是只是在每次需要时简单地计算它。现在仅供参考,帖子将按排名排序,因此需要考虑在内。

我主要是出于效率考虑,并尝试平衡是否应该尝试保存数据存储空间或保存读/写配额。

我认为简单地存储它会更好,但是每次有人对帖子投票或评论时,我都需要重新计算和重写排名值。

任何输入都会很棒。

4

3 回答 3

2

将排名作为属性存储在帖子中怎么样?这对查询/排序是有意义的,不是吗。

如果您在存储投票/评论计数的同时(意味着在同一实体中)存储排名,那么写入成本的唯一增加将是索引。(好的初始写入成本也是如此,但这就是 2 [无论如何非常小])。

无论如何,每次有人对帖子投票或评论时,您都需要进行数据库操作!?!还有什么方法可以跟踪投票/评论?

但实际上,我想你会开始使用文本搜索来查找帖子中的数据。如果是这样,我会考虑将排名作为属性存储在搜索索引中,并使用它来对匹配结果进行排名。

我们不需要考虑您如何选择要显示的帖子。投票和评论排名是唯一的标准吗?

于 2012-06-30T00:34:52.497 回答
1

当计算成本很高时,缓存最有用。如果计算简单又便宜,还不如根据需要重新计算。

于 2012-06-29T22:52:34.140 回答
1

如果您依赖于在实体中保持运行中的投票计数,那么您要么必须愿意失去偶尔的投票,要么必须使用交易。如果您使用事务,则您每秒可以执行多少事务的速率受到限制。(请参阅有关交易和实体组的文档)。如果您有可能获得大量选票,则速率限制可能是个问题。

对于低投票率,在实体中保留计数可能会很好。但是,如果您的投票率出现任何显着峰值,存储单独的投票实体,这些实体会定期汇总到缓存计数中,可能会通过保存在 memcache 中的(可能不可靠的)增量计数进行调整,可能对您更有效。

这实际上取决于您要优化的内容。如果您试图通过以非事务方式缓存投票计数来最小化磁盘写入,则您可能会失去投票。

于 2012-06-30T03:50:01.830 回答