Google app engine 在长时间运行的后台任务中使用Objectify
我计划使用Objectify从GAE Flex与云数据存储进行对话。该应用程序将运行相当多的后台线程与数据存储对话,对此我有几个问题Google app engine 在长时间运行的后台任务中使用Objectify,google-app-engine,google-cloud-datastore,objectify,Google App Engine,Google Cloud Datastore,Objectify,我计划使用Objectify从GAE Flex与云数据存储进行对话。该应用程序将运行相当多的后台线程与数据存储对话,对此我有几个问题 我不打算使用任何memcache设置,因为这些线程将运行很长时间,我也不希望会话缓存填满。我找不到一种方法将y()的ofy设置为从不在本地缓存,唯一的选择似乎是定期运行clear()操作。有没有更好的方法避免这些缓存 在我看来,我们需要在run()块中包装对ofy()的任何此类调用,以执行清理。我想确认这是在请求范围之外使用它的唯一方法,并且没有对这些较长上下文
- 我不打算使用任何memcache设置,因为这些线程将运行很长时间,我也不希望会话缓存填满。我找不到一种方法将y()的
设置为从不在本地缓存,唯一的选择似乎是定期运行ofy
操作。有没有更好的方法避免这些缓存clear()
- 在我看来,我们需要在
块中包装对run()
的任何此类调用,以执行清理。我想确认这是在请求范围之外使用它的唯一方法,并且没有对这些较长上下文的内置支持ofy()
谢谢你说得对
ObjectifyService.run()
是在ObjectifyFilter
之外运行请求的方法
目前没有任何方法禁用会话缓存。会话缓存非常深入地编织到Objectify的结构中,以获得@Load
操作的正常行为。这不是不可能的,只是还没有上升到优先级队列的顶端
在不影响内存问题的情况下迭代大量数据存储的最佳方法是迭代指定一个显式的
chunk()
大小,然后在处理该数量的项后执行clear()
。如果您使用Guava的迭代器.partition()
,这几乎是一行程序。如果您不打算使用任何缓存,为什么担心会话缓存已满?无论如何,这是一个尽力而为、免费的服务级别。有一个特别提到的问题是,这个缓存已满,导致内存问题——它在内部是一个键值映射,这意味着如果在整个生命周期中维护同一个映射,它确实会导致问题。我可以周期性地运行clear(),但这似乎是一个黑客和不必要的工作要做,因此我的问题是,鉴于我不打算使用它,如何首先避免它。