我正在使用带有Objectify的Google App Engine,并希望每隔5分钟删除数据库中的一些条目。实现这一目标的最佳方法是什么?我应该使用Google App Engine的ThreadManager还是cron作业?或者还有另一种方式吗?
答案 0 :(得分:1)
听起来你想要每5分钟:
可以使用map / reduce执行此操作。但是,它会很昂贵(每天数百美元),而且你会遇到计时问题 - 特别是当任务队列备份时。
您应该强烈考虑将此数据存储在GAE之外。获取Google Compute Engine帐户并在那里设置mongodb或redis实例。甚至可以在AWS上托管它。 GAE并不适合这种工作负载,但它不是“全有或全无” - 您可以轻松地在云的其他部分使用服务。
答案 1 :(得分:0)
Cron听起来像这里符合要求,但我担心需要删除的实体的规模。 (根据评论,每五分钟高达几十万)。删除那么多实体需要相当长的时间,最多可能超过五分钟时间,甚至可能超过前端cron处理程序的10分钟截止日期。
一种可能的解决方案是从backend instance进行删除,因为后端可以在没有任何截止日期的情况下运行。可以使用Crons启动查询待删除实体的进程,使用仅键查询获取其密钥,然后删除多个background threads中的实体。
由于进程可以无限期运行,在线程报告删除完成后,您可以立即再次查询并删除下一组实体。您可以在后端使用全局内存中锁定,以确保后续的cron请求不会启动单独的进程,但如果检测到进程已经运行,则以静默方式退出。所以这里cron仅用作删除过程的保持活动信号。
作为旁注,请注意,在数据存储区运营成本方面,经常以这种规模查询和删除实体可能会非常昂贵。