我正在使用Google App Engine和Objectify,我想每5分钟删除数据库中的一些条目。实现这一目标的最佳方法是什么?我应该使用Google App Engine的ThreadManager还是cron作业?还是有别的办法?
发布于 2013-04-13 17:05:15
Cron听起来符合这里的要求,但我担心需要删除的实体的规模。(根据评论,每五分钟就有几十万人)。删除这么多实体需要相当长的时间,很可能超过5分钟,甚至可能超过前端cron处理程序的10分钟截止时间。
一种可能的解决方案是从backend instance中删除,因为后端可以在没有任何截止日期的情况下运行。background threads可用于启动一个进程,该进程查询要删除的实体,使用仅键查询来获取它们的键,然后删除多个Crons中的实体。
由于该进程可以无限期运行,因此在线程报告删除完成后,您可以立即再次查询并删除下一组实体。您可以在后端使用全局内存中锁,以确保后续的cron请求不会启动单独的进程,而是在检测到该进程已经运行时静默退出。因此,在这里,cron仅用作删除过程的保持活动信号。
顺便说一句,请注意,在数据存储操作成本方面,如此频繁和如此规模的查询和删除实体可能非常昂贵。
发布于 2013-04-13 20:22:44
听起来你想,每隔5分钟:
数十万个实体,数十万个entities
使用map/reduce可以做到这一点。然而,这将是昂贵的(每天数百美元),而且您将会有时间问题-特别是当任务队列备份时。
您应该强烈考虑将此数据存储在GAE之外。获取Google Compute Engine帐户并在其中设置mongodb或redis实例。或者甚至将其托管在AWS上。GAE不太适合这种工作负载,但它不是“全有或全无”--您可以轻松地使用云的其他部分中的服务。
https://stackoverflow.com/questions/15985309
复制相似问题