【发布时间】:2012-10-30 19:30:46
【问题描述】:
Memcache 是解决方案绝对可以是任何东西的东西之一,而没有人真正给出一个像样的答案,也许是因为没有。所以我不是在寻找直接的答案,而只是为了让我朝着正确的方向前进。
对于一个典型的请求,这是我的 AppStats 信息:
因此,在总共 440 毫秒的请求中,我在内存缓存中花费了 342 毫秒。在这里,我认为 memcache 应该是闪电般的速度。我一定是做错了什么。
在我的管理控制台中查看我的内存缓存统计信息,我有这个:
Hit count: 3848
Miss count: 21382
Hit ratio: 15%
我不是这方面的专家,但我很确定 15% 很糟糕。
上面的典型请求有点过于详细,无法解释,但基本上,我创建并放置了一个新实体,该实体还更新并放置了一个父实体,该实体也更新并放置了与父实体关联的任何用户。
在所有这些过程中,我总是通过密钥获取,从不查询。哦,我正在使用 NDB,所以所有基本的memcache stuff is handled automatically。所以我从来没有在我的代码中自己手动接触过内存缓存。
有什么想法吗?
编辑:这是我的请求的细分
所以我只有 2 个数据存储获取和 2 个放置。其余的会自动处理 memcache 的东西。为什么要做这么多工作?手动处理这些东西会更好吗?
【问题讨论】:
-
如果不确切知道您在做什么以及您的数据模型是什么样的,就不可能给您任何好的建议。
-
@JasonHall 是的,我想。我正在使用 NDB,所以我没有手动处理任何内存缓存。都是自动的。所以我想知道是什么导致它在内存缓存中占用 342?即使在绝对最坏的情况下,memcache 真的应该花那么长时间吗?
-
您可能希望对内存缓存的内容/方式进行一些控制——将其留给 NDB 不会神奇地解决您的问题,特别是因为 NDB 不知道您要尝试什么做。例如,尽可能使用
set_multi而不是set来批处理您的内存缓存请求。 -
@JasonHall 老实说,我并没有做任何疯狂的事情。这只是一堆获取和放置,全部通过键。一些使用 ndb.get_multi,而另一些则分散在各处。我认为对于这种基本行为,NDB 缓存可能只是处理它。无论如何,我看到的数字是不是很糟糕?这是我第一次使用 GAE,所以我没有什么可以与之比较的......
-
@JasonHall 不确定它是否有帮助,但请查看更新..
标签: google-app-engine memcached