2010-02-19 2 views
3

데이터 묶음 (한 번에 약 500k 개의 레코드)을 삽입해야하는 데이터베이스가 있습니다. 나는 더비로 테스트를하고 있었고,이 많은 레코드들에 대해 약 10-15 분의 삽입 시간을 보았습니다 (나는 자바에서 배치 삽입을하고있었습니다).자바 대형 데이터베이스 삽입

이 시간이 느린 것으로 보입니까 (평균 노트북에서 작동합니까?)? 그리고 속도를 높이기위한 접근법이 있습니까?

덕분에,

제프

답변

5

이번에는 매우 합리적인 것처럼 보였으며, 나는 관찰 한 시간과 일치합니다. 는 DBMS에

  • 를 사용하여 대량로드 옵션을 하나의 트랜잭션이어야하지 않는

    • 사용자는 PreparedStatements 5,000 만에 기록을 배치 : 당신이 더 빨리 가고 싶은 경우에, 당신은 안전 기능을 대량 삽입 옵션을 사용하지 않도록 설정해야합니다
    • 안 무결성
    • 안 인덱스 일시적으로 삽입을위한 임시 검사 또는 인덱스를 삭제하고 그들을
    • 안 트랜잭션 기록을 후 삽입하고 이후에 다시 사용 가능으로 다시 만들어야합니다.

    EDIT : 데이터베이스 트랜잭션은 디스크 I/O에 의해 제한되며, 랩톱 및 대부분의 하드 드라이브에서 중요한 번호는 디스크의 검색 시간입니다.

    랩톱은 5400 rpm으로 느린 디스크를 사용하는 경향이 있습니다. 이 속도에서 탐색 시간은 약 5ms입니다. 레코드 당 하나의 검색 (대부분의 경우 과다 추정)을 가정하면 모든 행을 삽입하는 데 40 분 (500000 * 5 ms)이 걸릴 것입니다. 이제 캐싱 메커니즘과 시퀀싱 메커니즘을 사용하면 다소 줄어들지 만 문제가 어디서 발생하는지 확인할 수 있습니다.

    나는 당연히 문제를 극도로 단순화하고 있지만, 내가 어디로 갈 것인지를 알 수있다; 데이터베이스가 순차 벌크 I/O와 동일한 속도로 수행 될 것으로 기대하는 것은 무리입니다. 레코드에 일종의 인덱싱을 적용해야하는데 시간이 오래 걸립니다.

  • +0

    그건 의미가 있습니다. 감사. –

    0

    이 테이블을 수행 인덱스를 많이 있나요? 이러한 인덱스를 업데이트하는 데 많은 시간을 소비 할 수 있습니다.

    +1

    "코멘트"로 배치하는 경우 더 적합합니다. – Joset

    +0

    색인이 2 개뿐입니다. –

    관련 문제