1

我在我的數據存儲中有大約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; 
     } 
     } 
    } 
+0

啊,我被指向Objectify.clear()清除本地會話緩存。我會明天嘗試,並回答這個問題,如果解決這個問題,我懷疑它會。 – 2014-09-06 12:57:24

回答

0

調用Objectify()。clear()在加載大量結果後修復了內存問題。

+0

你應該接受你的答案。如果答案能夠幫助下一個人,那誰寫出答案並不重要。如果你這樣做,你會把你的代碼放在哪裏,你最終調用'clear()'嗎? – 2015-08-29 20:33:28