从AppEngine Objectify到Google搜索索引 - OutOfMemory

时间:2014-09-06 11:13:53

标签: google-app-engine google-search objectify google-search-api

我的数据存储区中有大约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;
        }
      }
    }

1 个答案:

答案 0 :(得分:0)

在加载大量结果后调用Objectify()。clear()修复了内存问题。