1

我将 Google App Engine 与 Objectify 一起使用,并希望每 5 分钟删除一次数据库中的一些条目。实现这一目标的最佳方法是什么?我应该使用 Google App Engine 的 ThreadManager 还是 cron 作业?还是有其他方法?

4

2 回答 2

1

听起来您希望每 5 分钟执行一次:

  • 编写数十万个实体
  • 聚合数十万个实体
  • 删除数十万个实体

使用 map/reduce 可以做到这一点。但是,它会很昂贵(每天数百美元),并且您将遇到时间问题 - 尤其是当任务队列备份时。

您应该强烈考虑将这些数据存储在 GAE 之外。获取一个 Google Compute Engine 帐户并在那里设置一个 mongodb 或 redis 实例。甚至将其托管在 AWS 上。GAE 不太适合这种工作负载,但它不是“全有或全无”——您可以轻松地使用云中其他部分的服务。

于 2013-04-13T12:22:43.677 回答
0

Cron听起来很符合这里的要求,但我担心需要删除的实体的规模。(根据评论,每五分钟最多几十万)。删除这么多实体需要相当长的时间,很可能超过五分钟,甚至可能超过前端 cron 处理程序的 10 分钟最后期限。

一种可能的解决方案是从后端实例中删除,因为后端可以在没有任何截止日期的情况下运行。Cron 可用于启动查询待删除实体的进程,使用仅键查询获取其键,然后在多个后台线程中删除实体。

由于进程可以无限期运行,在线程报告删除完成后,您可以立即再次查询并删除下一组实体。您可以在后端使用全局内存锁来确保后续的 cron 请求不会启动单独的进程,但如果它检测到该进程已经运行,则静默退出。所以这里 cron 仅用作删除过程的保持活动信号。

作为旁注,请注意,如此频繁地以这种规模查询和删除实体在数据存储操作成本方面可能会非常昂贵。

于 2013-04-13T09:05:14.590 回答