<p>在这里-<a href="https://developers.google.com/appengine/docs/billing" rel="nofollow">https://developers.google.com/appengine/docs/billing</a>(向下滚动大约一半),您可以得到高级操作(get、query、put、delete,…)在低级操作(小、读、写)中所花费的全部成本。在</p>
<p>我强烈建议使用<a href="https://developers.google.com/appengine/docs/python/tools/appstats" rel="nofollow">AppStats</a>来帮助跟踪读取操作的来源。{{{1}仍然是一个值得注意的问题,因为这是一个非常重要的选项。这意味着如果你做<code>.fetch(10, offset=20)</code>,你将花费30次阅读。您想改用<a href="https://developers.google.com/appengine/docs/python/ndb/queries#cursors" rel="nofollow">query cursors</a>。在</p>
<p>另一个优化是按键(<a href="https://developers.google.com/appengine/docs/python/datastore/modelclass#Model_get" rel="nofollow">^{<cd4>}</a>)进行取数,而查询只需花费1个读取操作,而不是查询哪个查询花费1个读操作,每个实体返回1个读操作(因此,一个有1个实体的查询返回2个读操作,但是同一个实体的<code>.get()</code>只需要1个读操作。您可能还想看看使用<a href="https://developers.google.com/appengine/docs/python/ndb/queries#projection" rel="nofollow">projection queries</a>,它的查询开销是1个read,但是每个检索到的投影实体只有1个小值(<em>注意:</em>所有投影的属性都必须被索引)。在</p>
<p>另外,如果您还没有,您应该使用<a href="https://developers.google.com/appengine/docs/python/ndb/" rel="nofollow">NDB API</a>,它会自动<a href="https://developers.google.com/appengine/docs/python/ndb/cache" rel="nofollow">caches</a>获取,并有助于减少读取操作。与官方文档一起,Rodrigo和Guido的<a href="https://docs.google.com/document/d/1AefylbadN456_Z7BZOpZEXDq8cR8LYu7QgI7bt5V0Iw/edit" rel="nofollow">NDB cheat sheet</a>是从外部数据库去ndb。在</p>
<p>在<em>管理数据存储使用</em>下面有一些好的提示:
<a href="https://developers.google.com/appengine/articles/managing-resources" rel="nofollow">https://developers.google.com/appengine/articles/managing-resources</a></p>
<p>最后,您可能还对使用<a href="https://github.com/kamens/gae_mini_profiler" rel="nofollow">gae_mini_profiler</a>感兴趣,它为当前请求提供了对AppStats的方便访问,以及其他有用的分析和日志信息。在</p>