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

Bulk delete datastore entity older than 2 days

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

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 是可用的最佳选项?

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

但索引在删除后可能需要一些时间才能更新,因此请使用查询游标,不要重复相同的查询(可能 return 键已被删除)。

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