App Engine Datastore 上的 Golang - 使用 PutMulti 提高性能

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

使用任务队列(appengine/delay lib)我得到了相当不错的性能,但是为每个请求执行单行插入似乎仍然非常低效(即使使用任务队列延迟插入)。

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

所以我的问题是:

  1. 我可以在应用程序引擎上实现等效的方案吗?我在想 - 也许我应该将一些行写入 memecache,然后每隔几秒钟我将从那里批量加载所有行并清除缓存。

  2. 这真的需要吗?数据存储区能否处理数千个并发写入 - 我的应用程序收到的每个 http 请求写入一次?


GCT1015
浏览 154回答 1
1回答

qq_笑_17

真的取决于你的设置。您是否使用祖先查询?如果是这样,那么您的 PER 祖先(以及所有子代、孙代)每秒只能写入 1 次。数据存储有一个自然队列,所以如果你尝试写得太快,它会排队。如果你写的太多太快,它只会成为一个问题。您可以在此处阅读一些最佳实践。如果您认为您会超过该限制,请使用带有async multi puts的pull queues。您会将每个实体放入队列中。使用支持的模块(10 分钟超时),您可以分批(10-50-100...)拉入条目并分批对它们执行 put_async。它将处理以适当的速度放入它们。在它工作时,您可以排队下一批。只是要小心超时。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go