【问题标题】:GAE Memcache Usage for NDB Seems LowNDB 的 GAE Memcache 使用率似乎很低
【发布时间】:2012-07-19 21:05:24
【问题描述】:

我有一个具有约 40 GB 数据库的 Google App Engine 项目,但使用 NDB 的读取性能很差。我注意到我的内存缓存大小(在仪表板上列出)只有大约 2 MB。我希望 NDB 隐含地更多地使用 memcache 来提高性能。

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

【问题讨论】:

    标签: google-app-engine memcached app-engine-ndb


    【解决方案1】:

    这个页面很好地解释了 NDB 缓存的工作原理: https://developers.google.com/appengine/docs/python/ndb/cache

    我要检查的第一个地方是策略设置,以确保您实际上是在告诉 NDB 缓存您想要缓存的内容:https://developers.google.com/appengine/docs/python/ndb/cache#policy_functions

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 圭多;所有模型都设置为使用 memcache,我们可以在 appstats 中看到调用。真正的问题是为什么 memcache 中只有 2MB 和 250 个项目——似乎项目正在被驱逐——内存、项目编号或时间限制是多少?最旧的项目是 12 小时,尽管一直在编写新模型,即使在过去一个小时内写入的可缓存实体的总数也远大于 250 个。
      • 对项目数和内存使用没有硬性限制,而且这些数字似乎很低。也许您的应用程序使用的内存缓存不足以让内存缓存服务器费心保留您的项目——它偏爱具有高命中率的应用程序和项目。另外:(a)如果您没有正确使用@ndb.toplevel,则可能您实际上并未将值写入内存缓存; (b) 值仅在您获取它们时写入内存缓存(只需清除它们)。因此,如果您不回读它们,那么它们不在缓存中是可以理解的;并且缓存仅对第 2 次及后续读取有效。
      猜你喜欢
      • 2014-06-30
      • 2020-12-09
      • 1970-01-01
      • 2014-07-10
      • 1970-01-01
      • 2016-06-28
      • 2013-03-06
      • 2017-04-19
      • 2016-03-17
      相关资源
      最近更新 更多