Google app engine NDB的GAE Memcache使用率似乎很低

Google app engine NDB的GAE Memcache使用率似乎很低,google-app-engine,memcached,app-engine-ndb,Google App Engine,Memcached,App Engine Ndb,我有一个GoogleAppEngine项目,数据库容量约为40GB,NDB的读取性能很差。我注意到我的memcache大小(如仪表板上所列)只有2MB左右。我希望NDB隐式地更多地使用memcache来提高性能 有没有办法调试NDB的memcache使用情况?本页很好地解释了NDB缓存的工作原理: 我要检查的第一个地方是策略设置,以确保您实际上是在告诉NDB缓存您想要缓存的内容:问题的表述相当糟糕——读取性能差的原因有无数,大多数是由于编写的应用程序不好,但您没有告诉我们有关该应用程序的任何信

我有一个GoogleAppEngine项目,数据库容量约为40GB,NDB的读取性能很差。我注意到我的memcache大小(如仪表板上所列)只有2MB左右。我希望NDB隐式地更多地使用memcache来提高性能


有没有办法调试NDB的memcache使用情况?

本页很好地解释了NDB缓存的工作原理:


我要检查的第一个地方是策略设置,以确保您实际上是在告诉NDB缓存您想要缓存的内容:

问题的表述相当糟糕——读取性能差的原因有无数,大多数是由于编写的应用程序不好,但您没有告诉我们有关该应用程序的任何信息


唯一可以回答的问题是最后一个:“有没有办法调试NDB的memcache使用情况?”除了Sologoub的指针之外,我还建议使用Appstats来确定是否实际进行了预期的memcache调用。阅读NDB源代码,特别是context.py中的get()和put(),可能也会有所帮助。

Guido;所有模型都设置为使用memcache,我们可以在appstats中看到调用。真正的问题是为什么memcache中只有2MB和250个项目——似乎项目正在被逐出——内存、项目或时间限制是什么?最旧的项目是12小时,尽管一直在编写新的模型,而且即使在过去一个小时内编写的可缓存实体总数也远远超过250个。项目计数和内存使用没有硬性限制,而且这些数字似乎很低。也许你的应用程序使用memcache的次数不够,memcache服务器不愿意保留你的项目——它喜欢点击率高的应用程序和项目。另外:(a)如果您没有正确使用@ndb.toplevel,则可能您实际上没有将值写入memcache;(b) 只有在获取值时才会将其写入memcache(put只是清除它们)。因此,如果你没有读回它们,那么它们不在缓存中是可以理解的;缓存仅对第二次和后续读取有效。