Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将计算出的值存储在数据存储中,或只是动态计算_Python_Database_Performance_Google App Engine_Google Cloud Datastore - Fatal编程技术网

Python 将计算出的值存储在数据存储中,或只是动态计算

Python 将计算出的值存储在数据存储中,或只是动态计算,python,database,performance,google-app-engine,google-cloud-datastore,Python,Database,Performance,Google App Engine,Google Cloud Datastore,我用python为google app engine编写了一个应用程序,每个用户都可以提交一篇帖子,每个帖子都有一个排名,这个排名是由投票数和评论数决定的。排名只是基于这两个参数的简单计算。我想知道我应该将这个值存储在数据存储中(并在那里占用空间),还是在每次需要时简单地计算它。现在仅供参考,这些帖子将按排名排序,因此需要加以考虑 我主要考虑的是效率,并试图平衡我是否应该尝试保存数据存储室或保存读/写配额 我认为最好是简单地存储它,但是每次有人在帖子上投票或发表评论时,我都需要重新计算并重写排名

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

我主要考虑的是效率,并试图平衡我是否应该尝试保存数据存储室或保存读/写配额

我认为最好是简单地存储它,但是每次有人在帖子上投票或发表评论时,我都需要重新计算并重写排名值


任何输入都很好。

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

当计算昂贵时,缓存最有用。如果计算简单且便宜,您还可以根据需要重新计算。

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

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

每次有人在帖子上投票或发表评论时,你都需要做一个数据库操作,对吧!?!还有什么方法可以跟踪投票/评论

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


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

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

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

每次有人在帖子上投票或发表评论时,你都需要做一个数据库操作,对吧!?!还有什么方法可以跟踪投票/评论

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


难道我们不需要考虑如何选择要显示的帖子吗?根据投票和评论进行排名是唯一的标准吗?

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

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


这真的取决于你想优化什么。如果您试图通过以非事务方式缓存投票计数来最小化磁盘写入,则可能会丢失投票。

如果您依赖于在实体中保留运行的投票计数,则您必须愿意偶尔丢失投票,或者必须使用事务。如果您使用事务,则您的速率限制为每秒可以执行多少事务。(参见交易记录和实体组文档)。如果你有可能获得大量选票,那么利率限制可能是个问题

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


这真的取决于你想优化什么。如果您试图通过以非事务方式缓存投票计数来最小化磁盘写入,则可能会丢失投票。

在考虑效率时,请考虑存储数据所需的额外工作。一般来说,I/O是比处理能力更大的限制。因此,我倾向于进行动态计算。在考虑效率时,考虑存储数据所需的额外工作。一般来说,I/O是比处理能力更大的限制。因此,我倾向于进行动态计算,我更喜欢在内存中缓存,而不是将其写入数据库。对我来说,它意味着一种比写入持久性存储更少的永久性状态。我还喜欢让它更接近内存,不需要网络跳来获取它。我更喜欢在内存中缓存,而不是将其写入数据库。对我来说,它意味着一种比写入持久性存储更少的永久性状态。我也喜欢让它更接近内存,不需要网络跳来获取它。好吧,那么写一个实体的三个属性与写两个属性没有多大区别?这不是50%的增长吗?我想不会,但知道这一点很好。有类别,但在每个类别中,帖子仅按创建日期或排名为什么索引投票/评论排序?当然不是投票!如果你正在为评论编制索引,那么文本搜索不是一种好方法吗?不管怎样,通过不索引你不需要的东西来节省你的写作费用