【问题标题】:Most efficient way to delete thousands of entities in datastore删除数据存储区中数千个实体的最有效方法
【发布时间】:2018-07-24 05:03:46
【问题描述】:

这就是我删除数据存储区中数千个实体的方式:首先,获取第一个实体。如果存在第一个实体,则获取 500 个要删除的实体。其次,一次又一次地推迟deletealltarget,直到第一个实体不存在。

def deletealltarget(twaccount_db_key):
  target_db = model.Target.query().filter(ndb.GenericProperty('twaccount_key') == twaccount_db_key).get()
  if target_db:
    target_dbs = model.Target.query().filter(ndb.GenericProperty('twaccount_key') == twaccount_db_key).fetch(500,keys_only=True)
    ndb.delete_multi(target_dbs)
    deferred.defer(deletealltarget,twaccount_db_key)

有没有更好的办法?

【问题讨论】:

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


    【解决方案1】:

    您可以异步使用delete_multi_async,而不是使用defer,但除此之外,您使用这种方式做得很好。例如,您正在使用已经告知的其他建议,例如使用 keys_only

    Google 建议使用this Dataflow template 进行批量删除。但我不知道它是否适合您的场景。

    【讨论】:

      猜你喜欢
      • 2021-09-28
      • 2010-11-25
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多