如何组合类似的任务以减少总工作量?

时间:2013-07-09 13:06:06

标签: google-app-engine

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

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

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

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

感谢。

1 个答案:

答案 0 :(得分:1)

拉队列。使用GAE的每个人都应该观看此视频:

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

当有来电时,请更新内存缓存并对任务提取队列执行async_add。您可能会运行一个每分钟处理数千个更新的进程,而不会产生大量开销(即实例问题)。如果memcache在您的更新之前被清除,仍然有一个问题,但它不是很难解决。 HTH。 -stevep

相关问题