2016-10-03 2 views
0

CSV 파일을 읽고 모든 행에서 개체를 만든 다음이 개체를 데이터베이스에 저장하고 싶습니다. 내 파일에서 모든 행을 읽고 ArrayList 안에 모든 객체를 저장하면 Java 힙 공간 오류가 발생합니다. 읽기 직후 모든 레코드를 저장하려고 시도했지만, 하이버 네이트 메소드 save()로 레코드를 저장하는 것은 많은 시간이 걸린다.대용량 파일 읽기 (Java 힙 공간)

또한이 크기가 100k (코드의 주석 부분) 일 때도 내 arrayList의 크기를 확인하고 데이터를 저장하려고했습니다.

질문 : Java로 데이터를 저장하는 부분적으로 또는 더 나은 방법으로 파일을 읽을 수있는 방법이 있습니까? 당신이 정말로 큰 파일을 처리 할 경우 최대 힙 크기의

String[] colNames; 
String[] values; 
String line; 
Map<Object1, Object1> newObject1Objects = new HashMap<Object1, Object1>(); 
Map<Object1, Integer> objIdMap = objDao.createObjIdMap(); 

    StringBuilder raportBuilder = new StringBuilder(); 
    Long lineCounter = 1L; 
     BufferedReader reader = new BufferedReader(new InputStreamReader(
       new FileInputStream(filename), "UTF-8")); 
     colNames = reader.readLine().split(";"); 
     int columnLength = colNames.length; 

     while ((line = reader.readLine()) != null) { 
      lineCounter++; 
      line = line.replace("\"", "").replace("=", ""); 
      values = line.split(";", columnLength); 

      // Object1 
      Object1 object1 = createObject1Object(values); 
      if (objIdMap.containsKey(object1)) { 
       object1.setObjId(objIdMap.get(object1)); 
      } else if (newObject1Objects.containsKey(object1)) { 
       object1 = newObject1Objects.get(object1); 
      } else { 
       newObject1Objects.put(object1, object1); 
      } 

      // ============================================== 
      // Object2 
      Object2 object2 = createObject2Object(values, object1, 
        lineCounter, raportBuilder); 
      listOfObject2.add(object2); 
      /* 
      logger.error("listOfObject2.size():"+listOfObject2.size()); 
      if(listOfObject2.size() % 100000 == 0){ 
       object2Dao.performImportOperation(listOfObject2); 
       listOfObject2.clear(); 
      } 
      */ 
     } 
     object2Dao.performImportOperation(listOfObject2); 
+1

아마 0-50 개체의 버퍼를 사용하고 하나의 쿼리에서 데이터베이스에 저장합니까? (Im은 최대 절전 모드에 익숙하지 않지만 가능성이 높다) 올바른 버퍼 크기를 찾는 것에 관한 것이고, 아마도 int 버퍼를 받아들이고 그것을 동적으로 사용하는 메소드를 작성하는 것이다. 그런 다음 사용에 따라 다른 버퍼 크기로 재생하고 최적의 버퍼 크기를 찾을 수 있습니다. RAM은 각 컴퓨터마다 가변적이므로 데이터를 데이터베이스에 최적으로 삽입하기위한 고정 된 이상적인 버퍼 크기가 없습니다. 이러한 데이터 양을 사용하는 경우 어떤 서버를 사용하고 있습니까? – engineercoding

+0

은 빠르지 않습니까? 최대 힙 크기를 늘려야합니다. –

답변

관련 문제