2011-11-15 3 views
1

기본적으로 mysql에 데이터를 삽입하는 서비스 엔드 포인트가 있습니다. mysql에 행을 삽입하는 가장 빠른 방법을 찾고있다.Java에서 MySQL에 가장 빨리 삽입하는 방법

이 서블릿의 범위가 매우 작지만 변경 사항을 작성하는 데 시간이 오래 걸리는 경우 (이 경우에는 최대 절전 모드를 사용하는 것과 비교하여) 매우 신경 쓰지 않아도되지만 성능이 가장 중요합니다.

자바/서블릿에 익숙하지 않으므로 세부 사항을 남기지 말고 제게 많은 도움이됩니다.

답변

4

가장 빠른 방법은 JDBC 드라이버를 직접 사용하고 SQL을 직접 작성하는 것입니다. 다음은 저에게 잘 보이는 샘플 코드입니다 : http://www.roseindia.net/jdbc/jdbc-mysql/InsertValues.shtml

사람들은 여러 가지 이유로 Hibernate를 사용합니다. 클래스를 데이터베이스 테이블에 매핑하는 것이 훨씬 간단하게 만드는 것 외에도 캐싱, 연결 풀링 및 이와 유사한 작업을 처리합니다. 새 데이터베이스 연결을 여는 데는 많은 시간이 걸리기 때문에 서블릿을 잘 수행 할 수 있도록 직접 구현해야합니다.

+0

오 그래서 원시 서블릿과 JDBC를 사용하여 연결 풀링이 없습니다? – codecompleting

+0

@codecompleting : JDBC 3 데이터 소스를 사용하면되지만 JDBC 드라이버가 자체적으로 구현하는 것인지 확실하지 않습니다. –

0

는 연결 풀 또는 이와 유사한을 사용하십시오. 이것은 훨씬 큰 요인입니다.

MySQL이 매번 요청을 구문 분석하지 못하도록 실제로 서블릿 요청간에 지속되는 PrepraredStatement을 사용하면 도움이 될 수도 있습니다.

DB 연결과 PreparedStatementThreadLocal에 간단하게 유지함으로써 구현할 수 있지만 서블릿 컨테이너가 스레드 풀을 사용한다고 가정합니다.

업데이트 :c3p0은 분명히 연결 및 명령문 풀링을 구현하므로 사용하겠습니다.

2

JDBC와 다른 메소드를 사용하는 삽입 속도의 비교가 있습니다. 그것은 PostgreSQL을위한 것이지만, MySQL의 접근법과 결과는 비슷합니다 : http://rostislav-matl.blogspot.com/2011/08/fast-inserts-to-postgresql-with-jdbc.html.

간단히 말해서 : 일괄 처리 된 삽입 (JDBC 드라이버에서 지원되는) 및 사용 가능한 경우 COPY FROM을 고려하십시오. 당신은 JPA를 사용하지 않는 경우

0

, 나는 (당신이 그렇지 않으면 스프링을 사용하지 않는 경우에도() 등이 그들에게 폐쇄)

사용자는 PreparedStatements를 연결을 관리하기 위해 봄에서의 JdbcTemplate을 사용하는 것이 좋습니다.

드라이버/연결을 직접 초기화하지 마십시오. 응용 프로그램 서버에 구성된 풀링 된 데이터 소스를 사용하십시오 (@Resource로 주입 할 수 있음).

트랜잭션 관리를 위해 EJB를 사용하십시오.

0

단일 행만 삽입하는 경우, 아마도 간단한 쿼리 삽입이 가능할 가능성이 가장 높습니다. 연결 풀을 사용하면 매번 연결할 필요가 없으며 차이를 만드는 데이터베이스에 조정 매개 변수가 있습니다.

도망 갈 수 있다면 실제로 서블릿에 삽입하지 말고 다른 스레드가 데이터베이스에 삽입하는 메모리 큐에 넣는 것이 좋습니다. 서블릿 응답에 성공했는지 여부는 알 수 없습니다.

http://dev.mysql.com/doc/refman/5.0/en/innodb-tuning.html http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html

관련 문제