ercnam
2k
2019-05-21 11:49:14
5
214

DB insert 작업시 실시간 progress를 표현하려면...


가령 DB insert할 데이터가 11798건 있다 치고 이것들을 foreach 방식으로 넣는데 총 5분 정도 걸린다면,

사용자 입장에서 5분동안 응답없는 페이지를 기다리게 하는것보단

실시간으로 몇% 진행중...내지는 n건/11798건 진행중... 이런식으로 progress 를 표시하려면

기존 ajax 통신 이런걸론 안되고 역시 socket통신을 구현해서 채팅 구현하듯 해야하나요?

환경은 스프링입니다. 혹시 스프링에서 이럴때 쓰는 기능같은게 있는지요?

1
0
  • 답변 5

  • tou
    337
    2019-05-21 12:09:32

    ajax도 가능할것같긴합니다... n건만큼 ajax를 진행하는건데... 성능에 저하가 올수도있어서..

    0
  • ercnam
    2k
    2019-05-21 13:03:23

    tou 

    AJAX로 내려가는 데이터는 쿼리에 쓰이는 날짜 데이터뿐이라 그렇게는 안될거같네요

    ...된다 쳐도 만건 넘는 ajax 통신이 발생하면 필연적으로 무지막지하게 느려질거구요

    아니면 현재 ajax 의 async가 false (ajax가 끝날때까지 기다림) 으로 되있는데 이걸 true로 해주고 통신이 끝났을때 알림만 해주는 식으로 짜는게 차선일지도 모르겠네요

    0
  • full
    693
    2019-05-21 13:53:34 작성 2019-05-21 13:53:59 수정됨

    건수를 표현하는건 과부하 문제가 보이구요.

    퍼센트는 ajax에 progress옵션 있는데 그걸로 테스트해보시면 어떨런지요.

    파일 프로그레스바는 구현해봤는데 데이터로는 어떻게 될진... ㅎ

    0
  • 183
    2019-05-21 16:13:27 작성 2019-05-21 16:22:32 수정됨

    ajax 의 강점인 async 기능을 활용할 기회네요.

    현재 상태로 5분후 결과가 오겠네요.

    서버에서 처리시 DB에 별도로 전체건수 / 처리건수 항목을 넣고 일정 건수 insert마다 처리건수를 update 합니다. 만일 11798건을 마직막에 한번만 커밋한다면 "전체건수 / 처리건수"처리 트랜잭션은 별도 처리가 필요하겠네요.

    화면에서 insert 호출시 처리건수 조회하는 기능도 서버에 만들고 함께 조회합니다. 전송건수 조회하는 기능은 스크립트에서 지연시간을 줘서 일정시간(10초) 간격으로 호출하여 진행상황을 화면 일부에 표현하고 전체건완료 조회되면 호출을 멈추고 완료메세지를 보여줍니다.

    5분 후 결과가 오는 경우 현재대로 온라인호출로 5분을 대기할지 온디맨드배치프로그램을 호출할지의 방법도 있겠네요.

    0
  • 지나가던강아지
    65
    2019-05-21 17:25:35



    insert 하기전에 데이터베이스의 총 카운트 갯수를 가져와.

    insert 해야되는 값으로 비교해서 카운트 처리를 해보는건 어떠신지요

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.