我在数据存储区中有字段的实体。
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
最佳选项的密钥列表?
答案 0 :(得分:2)
是的,因为您只想删除一些需要执行的实体(keys_only)查询以获取传递给ndb.delete_multi()
(或其异步版本?)的密钥。不要担心实体数量,所有查询都是基于索引的,响应时间并不取决于数据存储区中存在多少实体。
但是删除后可能需要一段时间来更新索引,因此请使用查询游标,而不是重复相同的查询(可能会返回已删除的密钥)。
此外,如果您希望删除大量实体,请将负载分散到多个请求中(例如使用任务队列或延迟库)以防止超出请求截止日期。例如,请参阅How to delete all the entries from google datastore?