2012-12-28 1 views
0

큰 데이터베이스의 결과 집합에 관한 문제가 있습니다. (MySQLDB, Java 1.7)검색 결과 열별로

이 작업은 한 열의 모든 항목을 다른 데이터베이스로 변환하는 작업입니다. (예 : 3을 모든 숫자로 나누어 다른 데이터베이스에 쓰십시오.)

데이터베이스에 약 70 개의 열과 수백만 개의 행이 있으므로 첫 번째 방법은 SELECT *를 얻고 열로 Resultset을 구문 분석하는 것입니다.

유감스럽게도 지정된 방법으로 행 (행 (rs.next()) {} 등)을 거치므로이 방법으로 구문 분석 할 방법이 없습니다.

나는 70 개의 큰 배열을 만들 것이므로 이렇게하면 좋지 않다. 시간당 메모리 사용량을 줄이면된다.

그래서 여기 내 주요 질문은 다음과 같습니다

  1. 방법이 있나요?
  2. 모든 열에 대한 쿼리를 작성하고 (한 번에 하나의 배열이지만 70 개의 쿼리) 또는
  3. 전체 결과 집합을 가져 와서 행별로 구문 분석하여 70 개 배열로 작성해야합니까?

안녕하세요. 미리 감사드립니다.

+0

당신이 정말 _other database_하거나 _other table_을 의미합니까? – jlordo

+0

이 적합합니까? 하지만 맞습니다. 사실 다른 테이블입니다. – Maltram

+0

다른 테이블 일 경우 데이터베이스를 사용하여 작업을 수행 할 수 있기 때문에 매우 적합합니다. 그것은 매우 효율적이며 java 코드를 전혀 필요로하지 않습니다 (java에서 SQL 문을 실행하려는 경우 제외). – jlordo

답변

0

mysql 만 사용하면 어떨까요?

사용이 쿼리 :

create table <table_name> as select <column_name_on_which_you_want_transformation>/3 from <table name>; 
+0

"/ 3"은 예제 일 뿐이며 변환은 훨씬 더 복잡하기 때문에 ... 나는 그것에 대해 생각했지만 나는 그것이 가능한지 확실하지 않다. 그래도 다시 시도해 보겠습니다. – Maltram

+0

좋아요. 문제가 계속되면 알려주세요. –

2

page your queries이 아니겠습니까? 한 번에 'n'개의 행을 가져 와서 변환을 수행 한 다음 새 데이터베이스에 씁니다.

이것은 하나의 쿼리/반복에서 모든 것을 가져온 다음 한 번에 전체를 많이 쓰지 않고 행 단위로 작업하는 것이 비효율적이지 않다는 것을 의미합니다.

다른 의견은 아마도 조숙 한 최적화 일 것입니다. 전체 데이터 세트를로드하고 얼마만큼의 메모리가 필요한지 확인해 보았습니다. 그것이 10 또는 100의 megs의 순서라면, 나는 JVM이 그것을 쉽게 처리 할 것으로 기대한다.

변환을 Java로 수행해야한다고 가정합니다. 당신이 SQL에서 그것을 할 수 있다면, 전적으로 데이터베이스 내에서 그것을하는 것이 훨씬 더 효율적 일 것입니다.

+0

결과 집합의 크기가 아니라 결과 집합보다 작아야하는 70 개 배열의 크기에 대해 걱정하지 않았습니다. 그러나 귀하의 접근 방식은 더 많은 트래픽을 발생시키는 많은 쿼리를 제안합니다. 현재 병 목 (트래픽 또는 메모리)이 어떤 자원인지는 확실하지 않습니다. – Maltram

+0

내 접근 방식은 조정 가능한 수의 쿼리를 제안합니다. 페이지를 방문하면 페이지의 크기 (예 : 500 행)를 선택하여 일정량의 데이터를로드 한 다음 각 집합을 일괄 처리로 다시 쓸 수 있습니다.페이지 크기를 변경하면 a) 쿼리 당 소비되는 메모리 양 b) db에 다시 기록되는 횟수 –