代码之家  ›  专栏  ›  技术社区  ›  John

删除数据存储中数千个实体的最有效方法

  •  0
  • John  · 技术社区  · 7 年前

    这就是我如何删除数据存储中的数千个实体:首先,获取第一个实体如果存在第一个实体,则取出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)
    

    有更好的办法吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Mangu Dan Cornilescu    7 年前

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

    谷歌建议使用 this Dataflow template 对于批量删除,但我不知道它是否适合您的场景。