2014-09-04 20 views
0

我有一个GAE Golang应用程序,它应该能够处理数百个并发请求,并且对于每个请求,我都会对输入做一些处理,然后将其存储在数据存储区中。Golang on App Engine Datastore - 使用PutMulti提高性能

使用任务队列(appengine/delay lib)我获得了相当不错的性能,但对于每个请求执行单行插入(即使使用任务队列延迟插入)仍然效率很低。

如果这不是应用程序引擎,我可能会追加输出文件,并且每隔一段时间我会批量使用cron作业/某种其他类型的定时服务将文件加载到数据库中。

所以我的问题是:

  1. 有没有我可以在App Engine上实现等效方案?我想 想 - 也许我应该写一些memecache的行,然后 然后每隔几秒我将批量加载从 那里的所有行并清除缓存。
  2. 这真的需要吗?数据存储区 可以处理数千个并发写入 - 每个http请求写入我的 应用程序正在获取?

回答

1

取决于您的设置。你在使用祖先查询吗?如果是这样,那么你的PER祖先(以及所有的孩子,大孩子)每秒只能写入1次。数据存储有一个自然队列,所以如果你尝试写太快,它会排队。如果你写得太快,这只会成为一个问题。您可以阅读一些最佳做法here

如果您认为您将超过该限制,请使用pull queuesasync multi puts。你会把每个实体放入队列中。使用支持的模块(10分钟超时),您可以批量提取条目(10-50-100 ...),然后批量执行put_async。它会处理它们以适当的速度。在工作时,您可以排队下一批。只是要警惕超时。