2014-11-24 2 views
0

Java 응용 프로그램에는 SQL- 쿼리 실행의 결과로 생성되는 ResultSet이 있습니다. 이제 특정 열의 내용을 분석하고 데이터를 기반으로 특정 매개 변수 값을 계산하여 UI의 데이터를 나타냅니다. (이 두 가지 모두 : 메모리와 성능 모두)을이 데이터와 함께 저장해야합니다. 데이터 수집.변환 Java SQL 결과 집합을 객체 또는 구조 집합으로 변환

내 질문은 : 요구에 더 적합한 데이터 수집이

  1. 위에서 설명한는 ArrayList의에 결과 집합 행을 저장하는 좋은 아이디어인가, 또는?

  2. 각 ResultSet 행을 개체로 변환하거나 일반 구조로 저장해야합니까? ResultSet 행렬의 크기가 약 5000 x 10이라고 가정합니다. 확실치 않습니다. 루프 5000 Java 객체에서 생성을 시작하는 것이 좋습니다.

  3. 내가 이해하는 한, 객체 생성은 꽤 무거운 작업이므로이 작업을 피할 수 있다면 수행해야합니다. 그러나 LINQ는 기본적으로 객체 세트를 반환하지만 일반 구조가 아닙니다. 따라서 ResultSet을 구조가 아닌 객체의 컬렉션으로 변환 할 가치가 있습니까?

  4. ResultSet 행을 객체로 변환하는 Java 내장 메소드가 있습니까? 아니면 수동으로 작성해야합니까? 알다시피, 그렇게 열심히 일하지는 않지만 몇 가지 해결책이있을 수 있습니다.

감사합니다. 결과 레코드의 수가 매우 클 수, 당신은 단위의 수준에 관심이 없을 수 있기 때문에

답변

1
  1. 아니오, 나는 결과를 통해 스트리밍하는 것이 좋습니다 (예 : 전진 전용 커서) 및 집계 된 데이터를 저장 (예 : 다수의 목록 /지도). 또한 SQL 엔진을 사용하여 Java로 코딩하는 대신 값을 생성하고 계산하는 것을 고려할 수도 있습니다.

  2. 결과를 스칼라 대신 개체를 사용하여 여러 (집계 된) 맵에 저장하는 것이 좋습니다. Google Guava에는 유용 ​​할 수있는 몇 가지 컬렉션 클래스가 있습니다.

  3. 개체 생성이 많지는 않지만 결과 레코드 수가 잠재적으로 커질 수 있으므로 메모리 사용 공간을 고려해야합니다. 루프에 값을 집계하고 하나 이상의 맵에 집계 값을 채우는 것이 좋습니다. 레코드 레벨에 세분성이 정말로 필요합니까? 아마도 그렇지 않습니다.

  4. 사용할 수있는 많은 ORM (Object Relational Mapping) 도구가 있습니다. 최대 절전 모드. 또한 Java는 완전한 ResultSet을 로컬에 저장하기위한 'RowSet'클래스를 가지고 있지만주의해서 사용하십시오 (메모리 풋 프린트)

+0

감사합니다. 이러한 수준의 데이터 세분성을 유지하는 주된 이유는 Stanford CoreNLP가 각 행에 대해 특정 열 내용에 대한 NLP 분석을 수행해야한다는 것입니다. 즉, 일부 값을 계산하는 메소드를 호출하는 것입니다. –