为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
GCT1015 2021-08-16 15:45:57
我有一个 GAE Golang 应用程序,它应该能够处理数百个并发请求,对于每个请求,我对输入做一些工作,然后将其存储在数据存储中。使用任务队列(appengine/delay lib)我得到了相当不错的性能,但是为每个请求执行单行插入似乎仍然非常低效(即使使用任务队列延迟插入)。如果这不是应用程序引擎,我可能会在输出中附加一个文件,并且每隔一段时间我会使用 cron 作业/某种其他类型的计划服务将文件批量加载到数据库中。所以我的问题是:我可以在应用程序引擎上实现等效的方案吗?我在想 - 也许我应该将一些行写入 memecache,然后每隔几秒钟我将从那里批量加载所有行并清除缓存。这真的需要吗?数据存储区能否处理数千个并发写入 - 我的应用程序收到的每个 http 请求写入一次?
查看完整描述

1 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

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

如果您认为您会超过该限制,请使用带有async multi putspull queues。您会将每个实体放入队列中。使用支持的模块(10 分钟超时),您可以分批(10-50-100...)拉入条目并分批对它们执行 put_async。它将处理以适当的速度放入它们。在它工作时,您可以排队下一批。只是要小心超时。


查看完整回答
反对 回复 2021-08-16
  • 1 回答
  • 0 关注
  • 149 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信