2013-07-09 22 views
0

我使用App Engine,但以下问题很可能发生在任何服务器应用程序中:如何组合类似的任务以减少总工作量?

我的应用程序使用memcache缓存大型(〜50 KB)和小型(〜0.5 KB)JSON文档,从数据存储刷新是昂贵的。这些JSON文档可能会经常更改,但是文档中的更改很稀少(即,每次更改的数量可能不同)。目前,应用程序会在整个文档发生变化时使整个文档无效,然后在需要时稍后重新创建它。不过,我想转向更高效的设计,它可以直接从缓存更新JSON文档中更改的任何特定值。

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

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

谢谢。

回答

1

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

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

当有电话打进来,更新内存缓存,做一个async_add给你的任务拉入队列。您可能会运行一个进程,每分钟处理数千次更新,而没有大量开销(即实例问题)。如果在更新之前清除了memcache,仍然存在问题,但解决此问题并不困难。 HTH。 -stevep

+0

谢谢。那个视频很棒。我一直在计划做更多的大型数据集合,拉队列对此很有帮助。 – jacob