0

我使用 App Engine,但在任何服务器应用程序中都可能出现以下问题:

我的应用程序使用 memcache 来缓存大型 (~50 KB) 和小型 (~0.5 KB) JSON 文档,这些文档汇总了从数据存储中刷新成本很高的信息。这些 JSON 文档可以经常更改,但文档中的更改很少(即,数百个项目中的一项可能一次更改)。目前,如果某些内容发生更改,应用程序会使整个文档无效,然后在需要时懒惰地重新创建它。但是,我想转向更高效的设计,该设计直接从缓存更新 JSON 文档中更改的任何特定值。

一个特别的问题是多个任务/请求处理程序更新同一个文档的争用,但我有办法检测到这个问题并缓解它。但是,我主要担心的是,一组文档可能会在很短的时间内来自不同的请求处理程序的快速更改,并且我不想单独编辑缓存中的 JSON 文档每一个。例如,可能会在不到一分钟的时间内触发 10 个影响同一组 20 个 50 KB 文档的小更改。

所以这是我的问题:将这些变化结合在一起的有效解决方案是什么?在我的旧解决方案中,虽然当一个小项目发生变化时重新创建整个文档的成本很高,但至少好处是它在需要它时会懒惰地执行它(可能需要一段时间)。然而,用一个小的改变来更新 JSON 文档似乎需要立即完成(而不是懒惰地)。也就是说,除非我想出一个复杂的解决方案,以便稍后懒惰地对文档应用一组更改。我希望有一些有效但不太复杂的东西。

谢谢。

4

1 回答 1

1

Pull queue. Everyone using GAE should watch this video:

http://www.youtube.com/watch?v=AM0ZPO7-lcE

When a call comes in, update memcache and do an async_add to your task pull queue. You likely could run a process that will handle thousands of updates each minute without a lot of overhead (i.e. instance issues). Still have an issue should memcache get purged prior to your updates, but that it not too hard to work around. HTH. -stevep

于 2013-07-10T01:56:27.337 回答