2012-07-20 78 views
2

我有一个具有〜40 GB数据库的Google App Engine项目,而且NDB读取性能差。我注意到,我的memcache大小(在仪表板上列出)只有大约2 MB。我期望NDB隐含地更多地使用memcache来提高性能。GAE Memcache用于NDB似乎很低

有没有调试NDB的内存缓存使用情况的方法?

回答

6

这个问题是相当不明确的 - 有很多原因造成阅读性能差,而且大多数是由于写得不好的应用程序造成的,但是您不会告诉我们关于应用程序的任何信息。

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

+0

Guido;所有模型都设置为使用memcache,我们可以看到appstats中正在进行的调用。真正的问题是为什么memcache中只有2MB和250个项目 - 似乎项目正在被驱逐 - 内存,项目编号或时间限制是什么?最旧的项目是12小时,尽管一直都在写新的模型,并且即使在过去一小时内写入的可缓存实体的总数也远远大于250. – wsorenson 2012-09-01 18:39:32

+0

对项目数量和内存使用量没有硬性限制,并且这些数字似乎很低。也许你的应用没有足够的memcache来满足memcache服务器留下你的物品的需要 - 它支持高命中率的应用和物品。另外:(a)如果你没有使用@ ndb.toplevel,你可能实际上没有将值写入memcache; (b)只有当你*得到它们时才将值写入memcache(只需*清除*)。所以如果你没有阅读它们,可以理解它们不在缓存中;并且缓存仅对第二次和随后的读取有效。 – 2012-09-03 14:28:15