2017-10-25 10 views
1

Java에서 4Millions 레코드를 처리해야합니다. AS400에서 Oracle로 복사해야합니다. 내가 뭘하고있는 건지 일괄 적으로 레코드 배치를 커밋하고있다. 배치 크기는 사용자 정의입니다. 그게 100이라고 가정합시다.Java에서 Connection 객체를 삭제할 때?

나는 연결 개체를 만들고 100 개의 레코드를 배치하고 커밋하고 있습니다. 2000 년 커밋을 완료하면 기존 연결 개체를 닫음으로써 새로운 연결 개체를 만듭니다.

그래서, 나는 아래의 의심을 가지고 있습니다.

내가 배치를 커밋하면 100 개의 레코드가 커밋 된 데이터가 메모리에 저장됩니까? 연결 개체에서? 나는 그것을 닫지 않았기 때문에?

  1. 무언가 새로운 연결 개체를 한 번 작성하면 100 개의 레코드가 커밋됩니다. 그래서이 경우에 나는 100 개 이상의 연결 객체를 생성하고 그것을 적절하게 닫을 것입니다. 성능에 미치는 영향이 있습니까?
+2

여전히 필요한 연결을 닫을만한 이유가 있는지 알 수 없습니다. 사실, 이러한 연결은 일반적으로 풀링되어 독립적 인 요청간에 유지됩니다. – chrylis

답변

1

대부분의 경우 JDBC 연결을 만드는 것이 비용이 많이 듭니다. 따라서 normaly 연결 풀을 사용하여 재사용을 위해 연결을 유지하는 DataSource 개념이 만들어졌습니다. How to establish a connection pool in JDBC?

연결하면 실행 문의 일부 쿼리의 데이터를 보유하지 않습니다 여기에

그것에 대해 몇 가지 아이디어입니다. 기본적으로 연결을 만들고 해제하는 것은 메모리에 아무런 영향을 미치지 않습니다. 그러나 당신은 관련성이있는 성과에 대해 옳습니다.

문은 또한 닫을 수 있으므로 그 후에도 리소스를 해제합니다.

0

1) 그렇습니다. 일단 레코드를 커밋하면 메모리에 속합니다. Connection 객체를 닫기 전에 항상 커밋하십시오.

2) 어쩌면. 열기 연결을 위해 필요한 시간을 측정하기 위해 프로세스를 기록해야합니다. 일반적으로이 프로세스는 시간이 많이 걸리지 만, 귀하의 경우 영업 개시를위한 추가 시간이 귀하의 실적에 큰 영향을 미치지 않을 수도 있습니다. 먼저 측정하여 최상의 솔루션을 결정해야합니다.