批量删除超过2天的数据存储区实体

时间:2018-01-20 20:44:57

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

我在数据存储区中有字段的实体。

  

created_date = ndb.DateTimeProperty(auto_now_add = True)

     

epoch = ndb.IntegerProperty()

     

sent_requests = ndb.JsonProperty()

我希望批量删除所有使用每日cron作业超过2天的实体。我知道ndb.delete_multi(list_of_keys)但是如何获得超过2天的密钥列表?扫描整个数据存储区是否有超过100万个实体,并获得epoch < int(time.time()) - 2*86400最佳选项的密钥列表?

1 个答案:

答案 0 :(得分:2)

是的,因为您只想删除一些需要执行的实体(keys_only)查询以获取传递给ndb.delete_multi()(或其异步版本?)的密钥。不要担心实体数量,所有查询都是基于索引的,响应时间并不取决于数据存储区中存在多少实体。

但是删除后可能需要一段时间来更新索引,因此请使用查询游标,而不是重复相同的查询(可能会返回已删除的密钥)。

此外,如果您希望删除大量实体,请将负载分散到多个请求中(例如使用任务队列或延迟库)以防止超出请求截止日期。例如,请参阅How to delete all the entries from google datastore?