为了降低 GAE Python 的使用成本,我想优化 DB 读取操作。你有什么建议吗?
我不明白为什么 GAE 显示的数据库读取操作比我想象的要多。如果你能给出 GAE 如何计算数据库读取操作的一般逻辑,它也应该非常有帮助。
谢谢!
为了降低 GAE Python 的使用成本,我想优化 DB 读取操作。你有什么建议吗?
我不明白为什么 GAE 显示的数据库读取操作比我想象的要多。如果你能给出 GAE 如何计算数据库读取操作的一般逻辑,它也应该非常有帮助。
谢谢!
您可以在此处获取低级别操作(小型、读取、写入)中高级操作(获取、查询、放置、删除...)成本的完整细分 - 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,以及其他有用的分析和日志记录信息。
很难说为什么没有看到您的代码,但如果您还没有看到,请使用 memcache 来节省数据库读取。
https://developers.google.com/appengine/docs/python/memcache/usingmemcache