我有一个应该能够处理数百个并发请求的GAE Golang应用程序,对于每个请求,我对输入做了一些工作,然后将其存储在数据存储区中。
使用任务队列(appengine / delay lib)我的性能非常好,但是对于每个请求执行单行插入仍然效率很低(即使使用任务队列延迟插入)。
如果这不是app引擎,我可能会在输出中附加一个文件,并且每隔一段时间我就会使用cron作业/其他类型的预定服务将文件批量加载到DB中。
所以我的问题是:
答案 0 :(得分:1)
真的取决于您的设置。你在使用祖先查询吗?如果是这样,那么你的每个PER每秒只能写一次(以及所有孩子,大孩子)。数据存储区具有自然队列,因此如果您尝试写入太快,它将对其进行排队。如果你写得太快太多,它只会成为一个问题。您可以阅读一些最佳做法here。
如果您认为自己将超过该限制,请使用pull queues和async multi puts。您可以将每个实体放入队列中。使用支持的模块(10分钟超时),您可以批量提取条目(10-50-100 ...)并批量执行put_async。它将以适当的速度处理它们。在工作时,您可以排队下一批。只是要警惕超时。