我的数据存储区中有大约1200个实体。我想将它们添加到Google搜索索引中。当我有大约800时,这没问题,但是现在我在尝试将它们添加到搜索索引时遇到了Java Out Of Memory错误。最终我希望有100,000到500,000个实体需要进入索引..所以我需要以正确的方式做到这一点..
我重构了我的代码,使用objectify一次只有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;
}
}
}
答案 0 :(得分:0)
在加载大量结果后调用Objectify()。clear()修复了内存问题。