2011-01-07 2 views
3

웹 사이트/응용 프로그램을 빌드하려고합니다. 클래스 모델은 약 100 개의 객체이며 특별히 복잡하지는 않습니다.확장 성과 낮은 오버 헤드, 고성능 Java 지속성 프레임 워크

웹 사이트는 약 30,000 명의 동시 사용자를 처리 할 수 ​​있어야하지만 잠재적으로 더 많은 것을 처리 할 수 ​​있어야합니다.

데이터베이스에 액세스하기 위해 jdbc를 직접 작성하는 대신 준비된 지속성 프레임 워크를 사용하고 싶습니다.

나는 관계형 데이터베이스를 사용할 수밖에 없다.

필자는 캐싱의 일부 형태가 구운 채 선호되고 성능 튜닝에 종종 필요하기 때문에 SQL을 사용자 정의 할 수 있어야합니다.

내가 사용해야하는 지속성 프레임 워크에 대한 제안 사항은 무엇입니까?

업데이트 : 감사합니다. 이 코드에서는 SQL 코드를 수작업으로 처리 할 수 ​​있다고 생각합니다. 당신이 그것에 접근 할 수 있다면 당신은 약간의 동시성 조정을 할 수 있습니다. 내가 동의하는 동안, 당신은 최대 절전 모드/jpa에서도 액세스 할 수있다. 예외는 아니다. myBatis는 가벼운 무게와 덜 매직 (magic) 한 종류의 지속성 프레임 워크이기도합니다. 게다가, 퍼포먼스와 스케일링의 이유로, 퍼시스턴스 프레임 워크가 콜렉션을 관리하는 곳에서 너무 많은 외래 키를 사용하는 것이 현명하지 않으므로 어쨌든 하이버 네이트에서 그 능력을 사용하지 않을 것입니다. 필요한 경우 db를 파쇄 할 수 있습니다. 나는 또한 myBatis가 아마 처음으로 마스터하기 쉬운 지속성 프레임 워크라고 생각한다. AFAIK, 예를 들어 투명한 지속성이 없습니다. 당신의 대답은 이러한 요구 사항에보다 적합한 다른 퍼시스턴스 프레임 워크가 없다는 것을 확인했습니다.

+0

"클래스 모델은 약 100 개체입니다"... 그게 무슨 뜻 이죠? 100 클래스를 의미 했습니까? – skaffman

+0

예, 100 클래스 :-) –

답변

3

손으로 최적화 한 SQL이 원하는 경우 myBatis (이전에는 iBatis라고 함)을 제안합니다. 그것은 당신에게 그것을 제공하는 손으로 쓰는 SQL을 사용하여 당신을위한 JDBC 메카닉과 객체 - 칼럼 매핑을 처리합니다.

이 아닙니다. 개체 관계 매핑 (즉, 연결 및 컬렉션 자동 처리)입니다. 이것이 더 중요하다면, EclipseLink 나 Hibernate와 같은 JPA 구현이 확실한 선택입니다. 이들은 또한 사용자 정의 SQL을 처리 할 수 ​​있지만 myBatis보다 더 까다로운 작업입니다.

둘 다 문제없이 부하 요구 사항을 처리 할 수 ​​있어야합니다. 문제는 데이터베이스에서 처리 할 수 ​​있는지 여부입니다.

+0

예. 정확히 어떤 쿼리가 실행되고 있는지 알기 때문에 JPA 구현에 비해 MyBatis를 좋아합니다. – Nishant

+1

데이터베이스 문제에 동의합니다. 관계형 데이터베이스를 사용하지 않는 것이 좋습니다. –

0

첫 번째 확실한 선택은 JPA 또는 Hibernate이며,이 중에서 파생 된 것입니다.

+0

"낮은 오버 헤드"와 "고성능"의 의미는 ... –

2

인프라에 대해 걱정하고 프레임 워크가 아닌 병목 현상을 피하십시오.

많은 동시 사용자를 처리하려면 하드웨어로 확장하도록 설계하십시오. 앱에서 데이터를 캐싱하는 것에 대해 너무 신경 쓰지 마라. 대부분의 데이터베이스는 충분한 메모리를 거기에 둔다면 좋은 일을한다.

+0

JPA/Hibernate 사용자 (DBA와 동일한 언어를 사용하지 않는 사람)가 종종 무시하거나 무시하는 우수한 RDBMS 내부 캐시를 언급 한 경우 +1 –

0

rdbms가 필요하지 않은 persistence는 Collections 클래스 모델의 전용 고속 저장소, 높은 안정성 및 높은 동시성의 영구 저장소입니까? 오라클의 (sleepycat) Berkeley DB는 매우 가깝지 만 슬프게도 높은 동시성 (concurrency)과 함께 막대한 문제를 일으키고 있습니다.

+2

동의합니다. 비 RDBMS가 더 나은 옵션이었습니다. 이 사건은 선택 사항이 아니 었습니다. 제거 할 수없는 RDBMS가 이미 존재했습니다. –

2

결정에 조금 늦을 수 있지만 향후 고려해야 할 사항 일 수 있습니다.데이터 추상화 레이어 (ORM 또는 다른 프레임 워크)에 의한 캐싱이 과대 평가된다는 Qwerky의 의견에 동의합니다. 대부분의 최신 RDBMS는 자체 내부 캐시로 매우 빠르므로 일반적으로 성능 조정은 개발자보다 DBA 작업에 가깝습니다. 게다가 잘못 구성된 캐시는 빠르게 성능 악몽으로 변하게됩니다.

유창한 API로 작성된 객체 지향 타입 안전성이 보장 된 쿼리 외에도 JDBC 위에 훨씬 추상화를 두지 않고 SQL 자체에 매우 가까이 머물러있는 데이터베이스 추상화 프레임 워크로 jOOQ을 만들었습니다. jOOQ는 Java 코드에서 관계형 사실을 숨기지 않으므로 사용 된 SQL을 완전히 제어 할 수 있습니다. 이 Hibernate tutorial (140 기사)를 읽을 경우

http://www.jooq.org

0

, 당신은 최대 절전 모드도 this sample chapter of High-Performance Java Persistence에 설명되어 다음과 같은 이유로, 고성능 데이터 액세스 라이브러리로 사용될 수 있다는 것을 알 수 있습니다 :

  • 확장 된 식별자 생성기 (HI/LO 풀링,-LO 풀링)
  • 투명 준비된 문 일괄
  • 엔티티 레벨 캐시 consitent 높은 동시성 전략
  • 무 버전 낙관적 잠금 (예 : OptimisticLockType.ALL, OptimisticLockType.DIRTY) 다중 테넌트에 대한
  • 지원