2

为了降低 GAE Python 的使用成本,我想优化 DB 读取操作。你有什么建议吗?

我不明白为什么 GAE 显示的数据库读取操作比我想象的要多。如果你能给出 GAE 如何计算数据库读取操作的一般逻辑,它也应该非常有帮助。

谢谢!

4

2 回答 2

4

您可以在此处获取低级别操作(小型、读取、写入)中高级操作(获取、查询、放置、删除...)成本的完整细分 - https://developers.google.com /appengine/docs/billing(向下滚动大约一半)。

我强烈建议使用AppStats来帮助追踪您的读取操作的来源。需要注意的一件大事是不要使用for 分页offset选项,因为这只会跳过结果,但仍然需要读取。.fetch()这意味着如果你这样做.fetch(10, offset=20),它将花费你 30 次阅读。您想改用查询游标

另一个优化是通过键获取.get(keys)(但是.get()对于同一个实体,a 只需要读取 1 次。您可能还想查看使用投影查询,该查询花费 1 次读取,但每个检索到的投影实体只有 1 个小(注意:所有投影的属性都必须被索引)。

此外,如果您还没有,您应该使用NDB API,它会自动缓存fetches 并有助于减少您的读取操作。与官方文档一起,Rodrigo 和 Guido 的NDB 备忘单是从 ext.db 过渡到 ndb 的好方法。

在此处管理数据存储使用情况下有一些很好的提示: https ://developers.google.com/appengine/articles/managing-resources

最后,您可能还对使用gae_mini_profiler感兴趣,它可以方便地访问当前请求的 AppStats,以及其他有用的分析和日志记录信息。

于 2013-01-26T03:32:11.553 回答
1

很难说为什么没有看到您的代码,但如果您还没有看到,请使用 memcache 来节省数据库读取。

https://developers.google.com/appengine/docs/python/memcache/usingmemcache

于 2013-01-26T01:01:24.997 回答