App引擎数据存储上的Golang - 使用PutMulti提高性能

时间:2014-09-04 12:35:46

标签: google-app-engine go google-cloud-datastore

我有一个应该能够处理数百个并发请求的GAE Golang应用程序,对于每个请求,我对输入做了一些工作,然后将其存储在数据存储区中。

使用任务队列(appengine / delay lib)我的性能非常好,但是对于每个请求执行单行插入仍然效率很低(即使使用任务队列延迟插入)。

如果这不是app引擎,我可能会在输出中附加一个文件,并且每隔一段时间我就会使用cron作业/其他类型的预定服务将文件批量加载到DB中。

所以我的问题是:

  1. 我是否可以在app引擎上实施等效方案?我曾是 思考 - 也许我应该把一些行写到memecache,和 然后我会每隔几秒钟批量加载所有行 那里并清除缓存。
  2. 这真的需要吗?可以数据存储区     处理数千个并发写入 - 每个http请求写入我的     应用程序正在增加?

1 个答案:

答案 0 :(得分:1)

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

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