在长期运行的后台任务中使用Objectify

时间:2018-04-12 21:36:07

标签: google-app-engine google-cloud-datastore objectify

我计划使用Objectify与GAE Flex的Cloud Datastore对话。该应用程序将运行相当多的后台线程与Datastore交谈,我有几个问题。

  • 我不打算使用任何memcache设置,因为这些线程将会运行很长时间,我不希望会话缓存填满。我找不到将ofy()设置为永远不会在本地缓存的方法,唯一的选择似乎是定期运行clear()操作。有没有更好的方法来避免这些缓存?

  • 在我看来,我们需要在ofy()块中包装run()的任何此类调用来执行清理。我想确认这是在请求范围之外使用它的唯一方法,并且没有内置支持这些更长的上下文。

由于

1 个答案:

答案 0 :(得分:1)

你是对的。 ObjectifyService.run()是在ObjectifyFilter之外运行请求的方式。

目前没有任何方法可以禁用会话缓存。会话缓存非常深入到Objectify的结构中,以便为@Load操作获得理智的行为。这并非不可能,它只是没有上升到优先级队列的顶部。

在不遇到内存问题的情况下迭代大量数据存储区的最佳方法是迭代指定显式chunk()大小,然后在处理该项目数后再clear()。如果你使用Guava的Iterators.partition(),这几乎是一个单行。