我在我的數據存儲中有大約1200個實體。我想將它們添加到Google搜索索引中。當我有大約800個時,它沒有問題,但現在當我嘗試將它們添加到搜索索引時,我遇到了Java內存不足錯誤。最終我希望有10萬到50萬個需要進入索引的實體..所以我需要以正確的方式做到這一點..從AppEngine Objectify到Google搜索索引 - OutOfMemory
我重構了我的代碼,從數據存儲使用對象只有50個實體時間,將這些添加到索引,然後拉另一個50.這一切都是在一個for循環中完成的,一次只能處理50個,直到1200 ..但是我仍然發現內存錯誤。
有沒有更好的方法?
int entitiesPerFetch = 50;
for(int i=0;i<numTotalEntities;i=i+entitiesPerFetch){
List<MyEntity> ents = ofy().load().type(MyEntity.class).filter("year >", 200).order("-year").offset(i).limit(entitiesPerFetch).list();
for(int g=0;g<ents.size();g++){
try {
MyEntity myent = ents.get(g);
String docID = myent.getID();
Document doc = Document.newBuilder()
.setId(docID) // Setting the document identifer is optional. If omitted, the search service will create an identifier.
.addField(Field.newBuilder().setName("title").setText(myent.getTitle()))
.build();
index.put(doc);
}
catch(Exception e){
continue;
}
}
}
啊,我被指向Objectify.clear()清除本地會話緩存。我會明天嘗試,並回答這個問題,如果解決這個問題,我懷疑它會。 – 2014-09-06 12:57:24