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

时间:2018-07-24 05:03:47

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

这是删除数据存储区中数千个实体的方法:首先,获取第一个实体。如果存在第一个实体,则提取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 个答案:

答案 0 :(得分:0)

您可以异步使用delete_multi_async,而不是defer,但是除此之外,您可以通过这种方式很好地完成工作。例如,您正在使用其他已告知的建议,例如使用keys_only

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