복붙노트

[SPRING] Spring JDBCTemplate 대 최대 절전 모드 성능 측면 [닫힘]

SPRING

Spring JDBCTemplate 대 최대 절전 모드 성능 측면 [닫힘]

우리 프로젝트에서 Spring JDBCTemplate과 Hibernate 사이를 결정해야한다.

성능과 구현 및 디자인면에서 어느 것이 더 나은지 알고 싶습니다. 그리고 어떻게?

해결법

  1. ==============================

    1.두 가지 구현 모두를 매우 빠르게 만들 수 있다면 JDBC 템플릿은 Hibernate가 가지고있는 오버 헤드를 가지지 않기 때문에 아마도 조금 더 빠를 것이다. 그러나 구현하는 데 훨씬 많은 시간과 코드가 필요합니다.

    두 가지 구현 모두를 매우 빠르게 만들 수 있다면 JDBC 템플릿은 Hibernate가 가지고있는 오버 헤드를 가지지 않기 때문에 아마도 조금 더 빠를 것이다. 그러나 구현하는 데 훨씬 많은 시간과 코드가 필요합니다.

    Hibernate는 배움의 곡선을 가지고 있습니다. 배후에서 어떤 일이 일어나는지, 언제 엔티티를 반환하는 대신 프로젝션을 사용할지를 이해해야합니다. 그렇지만 그것을 숙지한다면 JDBC를 사용하는 것보다 더 많은 시간과 청결하고 간단한 코드를 갖게 될 것입니다 기반 솔루션.

    95 %의 경우, Hibernate는 최적화되지 않은 JDBC 코드보다 충분히 빠르거나 빠르다고 말할 수 있습니다. 나머지 5 %는 Spring-JDBC와 같은 다른 것을 사용할 수 없습니다. 두 솔루션은 상호 배타적이지 않습니다.

  2. ==============================

    2.그것은 당신의 프로젝트와 Hibernate 모델이 당신의 생각에 얼마나 잘 맞는지에 달려 있습니다. 속도와 퍼포먼스는 관련성이 없다 : 당신이 Hibernate의 작동 방식에 대해 마음을 감쌀 수 없다면, 프로젝트는 발견하고 고칠 시간이 걸리는 이상한 버그로 가득 차게 될 것이다.

    그것은 당신의 프로젝트와 Hibernate 모델이 당신의 생각에 얼마나 잘 맞는지에 달려 있습니다. 속도와 퍼포먼스는 관련성이 없다 : 당신이 Hibernate의 작동 방식에 대해 마음을 감쌀 수 없다면, 프로젝트는 발견하고 고칠 시간이 걸리는 이상한 버그로 가득 차게 될 것이다.

    또한 Hibernate 내부는 모델과 DAO로 누출됩니다. 주목할만한 충돌 지점은 대개 equals () / hashCode () 및 트랜잭션 외부의 콜렉션의 지연로드입니다. Hibernate를 사용하는 예제는 매우 간단하고 단기간에 많은 것을 얻을 수 있기 때문에 Hibernate가 단순하다는 오해를 불러올 수있다. 그렇지 않아. Hibernate는 많은 가정을하고 특정한 방식으로 생각하고 코드화하도록 강요합니다.

    JdbcTemplate을 사용하는 것은 JDBC 자체를 감싸는 매우 얇은 래퍼이기 때문에 더 쉽습니다. 여기 가격은 정말로 지루한 코드의 수천 줄을 쓸 것이라는 것입니다. 또한 SQL 문자열은 유지하기가 어렵다는 것을 알 수 있습니다. 데이터 모델이 변경되면 영향을받을 수있는 모든 장소에 대해 전체 코드 기반을 검색해야합니다. 그것은 예쁘지 않을 것이다.

    우리 자신의 프로젝트에서 우리는 실제로 복잡한 데이터 구조 (수정 된 트리 구조)를 가지고 있고 런타임에 복잡한 검색 쿼리를 작성해야하기 때문에 Hibernate에 반대했다. 대신 jOOQ를 사용하여 자체 DAO 레이어를 작성했습니다. jOOQ는 Java에서 멋진 DSL을 사용하여 SQL을 작성할 수있는 JDBC 주변의 얇은 래퍼입니다.

    create.selectFrom(BOOK)
          .where(PUBLISHED_IN.equal(2011))
          .orderBy(TITLE)
    

    Hibernate와 마찬가지로, jOOQ는 당신이 따라야하는 규칙을 가지고 있거나 행복하지는 않을 것입니다. 그러나 이것은 훨씬 관대합니다.

    또 다른 옵션으로 스프링 데이터를 살펴 봐야합니다. 간단히 말해, Spring Data를 사용하면 데이터베이스와 원격으로 유사한 데이터에 데이터를 저장할 수 있습니다. 즉, Hibernate로 모델을 관리하고 NoSQL 데이터베이스를 사용하여 모델을 관리 할 수 ​​있습니다. 또는 필요에 따라 모델의 일부를 쉽게 마이그레이션 할 수 있습니다.

    주요 기능 중 하나는 DAO 구현이 다음과 같이 보입니다.

    public interface UserRepository extends Repository<User, Long> {
    
      List<User> findByEmailAddressAndLastname(String emailAddress, String lastname);
    }
    

    이제 메소드 정의가있는 인터페이스 일 뿐이므로 구현이 어디에 있는지 궁금 할 수 있습니다. 런타임시 Spring Data는이 메소드를 구현하는 코드를 생성합니다. 이것은 필요한 모든 쿼리의 99 %가 "X 열이 ... 인 모든 행에 대한 쿼리 테이블"형식이므로이 사용 사례를 최적화했습니다.

    OTOH, 런타임에 실제로 복잡한 쿼리를 작성한다는 것을 이미 알고 있다면 Spring Data는별로 도움이되지 않을 것입니다.

  3. ==============================

    3.우리 프로젝트에서는 JdbcTemplate과 Hibernate를 둘 다 사용하고 있습니다. 당신이해야 할 일은 hibernate와 jdbcTemplate 사이에서 DataSource를 공유하는 것입니다. 우리는 작업에 따라 두 가지 성능 모두를 확인할 수 있습니다. 둘 중 더 나은 것이 더 나은 것을 사용합니다. 대개 우리는 정상적인 작업을 위해 최대 절전 모드를 사용하고 있습니다. 큰 쿼리 나 과중한 작업이있을 경우, 우리는 jdbc의 성능을 검사하고 우리가 그것을 더 잘 사용할 수있는 상태로 최대 절전 모드로 전환합니다.

    우리 프로젝트에서는 JdbcTemplate과 Hibernate를 둘 다 사용하고 있습니다. 당신이해야 할 일은 hibernate와 jdbcTemplate 사이에서 DataSource를 공유하는 것입니다. 우리는 작업에 따라 두 가지 성능 모두를 확인할 수 있습니다. 둘 중 더 나은 것이 더 나은 것을 사용합니다. 대개 우리는 정상적인 작업을 위해 최대 절전 모드를 사용하고 있습니다. 큰 쿼리 나 과중한 작업이있을 경우, 우리는 jdbc의 성능을 검사하고 우리가 그것을 더 잘 사용할 수있는 상태로 최대 절전 모드로 전환합니다.

    좋은 점은 HibernateTransactionManager가 (JdbcTemplate, plain jdbc)와 최대 절전 모드 모두에서 작동한다는 것입니다.

  4. ==============================

    4.데이터베이스 설계는 최대 절전 모드입니까? 그렇다면 최대 절전 모드를 사용하십시오 ... 그렇지 않다면 피하고 싶을 수 있습니다. Jdbctemplate에는 많은 단점이 있으며 SQL 쿼리를 쉽게 유지 관리 할 수있는 방법이 있습니다. 모든 것을 보유하거나 파일 등에서 클래스를 읽는 클래스가 있어야합니다. 컬럼을 갱신해야하는 경우 표준 jdbc를 사용하여 컬럼 이름을 검색 할 수 있도록 결과 세트 메타 데이터를 얻는 방법이 있습니다. 이것은 복잡하지만 문제를 해결하는 흥미로운 방법이 될 수 있습니다. Hibernate는 훌륭한 도구이지만 복잡한 데이터 모델은 매우 까다로워진다.

    데이터베이스 설계는 최대 절전 모드입니까? 그렇다면 최대 절전 모드를 사용하십시오 ... 그렇지 않다면 피하고 싶을 수 있습니다. Jdbctemplate에는 많은 단점이 있으며 SQL 쿼리를 쉽게 유지 관리 할 수있는 방법이 있습니다. 모든 것을 보유하거나 파일 등에서 클래스를 읽는 클래스가 있어야합니다. 컬럼을 갱신해야하는 경우 표준 jdbc를 사용하여 컬럼 이름을 검색 할 수 있도록 결과 세트 메타 데이터를 얻는 방법이 있습니다. 이것은 복잡하지만 문제를 해결하는 흥미로운 방법이 될 수 있습니다. Hibernate는 훌륭한 도구이지만 복잡한 데이터 모델은 매우 까다로워진다.

  5. from https://stackoverflow.com/questions/11791145/spring-jdbctemplate-vs-hibernate-in-terms-of-performance by cc-by-sa and MIT license