게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
multi thread와 mysql을 mybatis 질문있습니다
게시물ID : programmer_22392짧은주소 복사하기
작성자 : 그럴수도있징
추천 : 0
조회수 : 642회
댓글수 : 3개
등록시간 : 2018/05/14 18:45:31
옵션
  • 본인삭제금지
  • 외부펌금지
제가 약 0.1기가정도 되는 text파일을 split하여 mysql에 multi thread로 넣습니다.
대충 순서가 
BufferedReader로 라인별로 읽고 =>  ArrayBlockingQueue에 넣고 (multi thread로 여러파일을 읽으면서 이 queue에 다 넣습니다.) queue의 사이즈가
일정량이되면 => StringBuilder에 append하고 => splite작업을 거치고 Service=> DAO로 가서 insert하는 중에
Deadlock found when trying to get lock; try restarting transaction 에러에 걸립니다.
service의 insert메서드에 synchronized를 적용했는데도 에러가 걸리네요 db에 넣는데 시간이 오래 걸려서 속도도 안나올 뿐 더러
Batch모드로 돌리면 빠르다고 하는데 
 Mapper에서 useGeneratedKeys="true" keyProperty="contents_seq" 이것을 쓰고 있어서 사용도 불가능 합니다.
혹시 조언 좀 해주실 수 있으신가요?? 작은 것이라도 괜찮습니다.

//lbqueue는 arrayBlockingQueue입니다.

@Override
public void run(){
String line = "";
try {
while ((line = in.readLine()) != null) {
lbqueue.offer(line + "\r\n");
if (lbqueue.size() > 0) {
if (line.indexOf("\r\n|\r|\n|\n\r") != -1) {
lbqueue.offer("\r\n");
}
}
if(lbqueue.size()>2500){
String s="";
StringBuilder builder= new StringBuilder();
try {
while(lbqueue.size()>0){
s=lbqueue.take();
if(s.equals(""))continue;
builder.append(s);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
finally {
//service에 synchronized insertMassURL(ArrayList<HashMap<String, String>> arrayList) 이런 식으로 선 언해놓았습니다
service.insertMassURL(csvTypeSpliter(builder.toString()));
}
}
}
//latch.countDown();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
finally {
}
//service.insertMassURL(htmlFileReader(builder.toString()));
}
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호