startBatch 사용 답변보충
- 작성자 :
- 김*환
- 작성일 :
- 2013-10-30 20:34:16
- 조회수 :
- 1,108
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
startBatch 사용시에 대해 예전 답변글 대로
SqlMapClient client = getSqlMapClient();
을 사용하게 되면, batch를 사용하지 않을때나 속도차이가 나지 않습니다.
아래와 같은 형태로 사용해야 성능 향상을 볼수있습니다.
10만건 insert하는데 100000 msec 걸렸는데, 아래와 같이 바꾸면
2000 msec 걸립니다.
public int insertList(final String queryId, final DataList datalistObject) {
return getSqlMapClientTemplate().execute(new SqlMapClientCallback() {
public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {
int result = 0;
executor.startBatch();
for (int i = 0; i < datalistObject.size(); i++) {
HashMap row = (HashMap) datalistObject.get(i);
executor.insert(queryId, row);
result++;
if (i % 1000 == 0) {
executor.executeBatch();
executor.startBatch();
}
}
executor.executeBatch();
return result;
}
});
}
SqlMapClient client = getSqlMapClient();
을 사용하게 되면, batch를 사용하지 않을때나 속도차이가 나지 않습니다.
아래와 같은 형태로 사용해야 성능 향상을 볼수있습니다.
10만건 insert하는데 100000 msec 걸렸는데, 아래와 같이 바꾸면
2000 msec 걸립니다.
public int insertList(final String queryId, final DataList datalistObject) {
return getSqlMapClientTemplate().execute(new SqlMapClientCallback() {
public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {
int result = 0;
executor.startBatch();
for (int i = 0; i < datalistObject.size(); i++) {
HashMap row = (HashMap) datalistObject.get(i);
executor.insert(queryId, row);
result++;
if (i % 1000 == 0) {
executor.executeBatch();
executor.startBatch();
}
}
executor.executeBatch();
return result;
}
});
}
A
안녕하세요. 김동환님.
좋으신 정보 감사합니다.
그럼, 즐거운 하루되십시오.
감사합니다.
좋으신 정보 감사합니다.
그럼, 즐거운 하루되십시오.
감사합니다.