【问题标题】:Google App Engine - Saving User Records Quickly to Datastore, Transactions, Entity GroupsGoogle App Engine - 将用户记录快速保存到数据存储区、事务、实体组
【发布时间】:2014-08-04 00:33:32
【问题描述】:

我们有成千上万的用户,每个用户都有 1000 条记录。在我们的应用程序中,用户和记录都由模型表示。

为每个用户单独保存 1000 条记录需要很长时间(30 多秒)。但是,考虑到所有这些记录都属于同一个用户,可以一次性保存吗?

据我了解,使用实体组可以在一个事务中完成所有操作,但找不到任何关于如何执行此操作的明确文档。

有什么建议吗?

【问题讨论】:

  • 你想要那个,因为你已经用完了每个请求 30 秒的硬限制?或者你只是想加快整个过程?
  • 用TaskQueue来做就行了。
  • @DmitrySadovnychyi 我们正在研究任务,但从根本上来说似乎没有意义,例如,300KB 的数据需要 30 秒才能保存,然后使用任务作为解决方法解决原始问题(缓慢保存)。它可以在几分之一秒内在 SQL 框上完成。这是 NoSQL 限制吗?

标签: python google-app-engine google-cloud-datastore entity-group-transactions nosql


【解决方案1】:

事务不会使处理速度更快。如果有的话,它们会更慢。

您可以通过将实体保存在 batches 中来加快处理速度(每次调用最多 1,000 个实体)。

【讨论】:

  • NDB 是否有等价物?我试过multi_put,还是很慢。
  • 使用 .put_async(),您的应用不必等待 put 完成。 developers.google.com/appengine/docs/python/ndb/async#using
  • @Bruyere 除了无法检索结果之外,这种方法还有其他限制吗?
  • 到目前为止我还没有找到。即使在正常的看跌期权通过之后,数据也需要时间,因此您实际上不会看到数据可用所需的时间有任何差异。
  • 感谢@Bruyere,感谢您的洞察力。
猜你喜欢
  • 2010-12-03
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 2012-12-31
  • 2016-08-03
  • 1970-01-01
  • 2013-04-29
  • 2010-11-21
相关资源
最近更新 更多