我正在尝试在一个请求中检索数据存储区中的100万个实体,但是通过分批处理来避免数据存储区超时。
这是我的代码。
substitutions:
,它将返回错误。
java.lang.OutOfMemoryError:com.google.storage.onestore.v3.OnestoreEntity $ EntityProto的com.google.storage.onestore.v3.OnestoreEntity $ Property。(OnestoreEntity.java:4356)超出了GC开销限制。 com.google.storage.onestore.v3的addRawProperty(OnestoreEntity.java:9834)com.google.apphosting.api.DatastorePb $ QueryResult.merge(DatastoreV3Pb.java: 28421),网址为com.google.appengine.repackaged.com.google.io.protocol.ProtocolMessage.mergeFrom(ProtocolMessage.java:453),网址为com.google.appengine.repackaged.com.google.io.protocol.ProtocolMessage.mergeFrom( com.google.appengine.repackaged.com.google.io.protocol.ProtocolMessage.parseFrom(ProtocolMessage.java:579)上的ProtocolMessage.java:470)com.google.appengine.api.datastore.DatastoreApiHelper $ 1.wrap(DatastoreApiHelper .java:120)com.google.appengine.api.datastore.DatastoreApiHelper $ 1.wrap(DatastoreApiHelper.java:113)com.google.appengine.api.utils.FutureWrapper.wrapAndCache (com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:101)上的(FutureWrapper.java:60),com.google.appengine.api.datastore.FutureHelper.getInternal(FutureHelper.java:69)上的com.google.appengine.api.datastore.com.google.appengine.api.datastore.BaseQueryResultsSource.loadMoreEntities(BaseQueryResultsSource.java:243)上的com.google.appengine.api.datastore.FutureHelper.quietGet(FutureHelper.java:33)。 com.google.appengine.api.datastore.LazyList.forceResolveToIndex(LazyList.com)的datastore.QueryResultIteratorImpl.ensureLoaded(QueryResultIteratorImpl.java:187)。 com.google.appengine.api.datastore.LazyList.getCursor(LazyList.java:325)上的com.kustom360.lib.client.DatastoreController.listByLimitation(DatastoreController.java:132)
对于这种类型的请求,我有一个数据流作业,但我只是试图通过不使用任何其他服务或API来处理检索大型数据。
我不认为内存错误不在我身边。该错误在其LazyList实现的getCursor方法中指出。
是否可以使用游标但可以在单个请求中批量查询数百万个实体?
谢谢!