【问题标题】:Golang on App Engine Datastore - Using PutMulti to Improve PerformanceApp Engine Datastore 上的 Golang - 使用 PutMulti 提高性能
【发布时间】:2014-10-29 05:12:04
【问题描述】:

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

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

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

所以我的问题是:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-06
      • 2014-03-02
      • 2015-07-25
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多