27

이전에 Spring 데이터를 사용하지 않았지만 MySQL 기반 애플리케이션에 대해 Hibernate ORM을 여러 번 사용했습니다. MongoDB 기반 응용 프로그램에서 두 프레임 워크 중에서 선택할 프레임 워크를 이해하지 못합니다.MongoDB 용 Spring 데이터 MongoDB와 Hibernate OGM의 차이점은 무엇입니까?

나는 대답을 찾으려고했지만 프로덕션 환경에서 두 가지를 비교하는 대답을 찾을 수 없습니다. 누구든지 MongoDB로이 두 프레임 워크에서 작동하는 데 문제가 있음을 발견 했습니까?

답변

39

면책 조항 : 나는 봄 데이터 프로젝트의 리드입니다, 그래서 대부분 여기에 사물의 봄 데이터 측 다룰 것이다 : 나는 두 프로젝트의 핵심 구분이 최대 절전 모드 OGM 팀 선택했다고 인도 표준시 생각

을 스프링 데이터 팀이 명시 적으로하지 않은 동안 JPA를 중심으로 그들의 노력을 집중시키는 것. 이유는 다음과 같습니다.

  • JPA는 본질적으로 관계형 API입니다. spec 상태의 처음 두 문장은 객체 - 관계형 매핑을위한 API입니다. 이는 API의 핵심 주제 인 테이블, 열, 조인, 트랜잭션에 대해서도 구현됩니다. NoSQL 세계로 이전 할 수있는 개념은 아닙니다.
  • 일반적으로 NoSQL 저장소는 특별한 특성 (예 : MongoDB의 지형 공간 쿼리, Neo4j의 그래프 통과를 실행할 수 있음) 때문에 선택합니다. JPA에서 사용할 수있는 것은 없으며 따라서 JPA에서 독점 확장을 제공해야합니다.
  • JPA에는 JPA에서 정의 된 것처럼 NoSQL 저장소에서 작업하는 것으로 가정하면 사용자를 잘못된 방향으로 안내하는 개념이 있습니다. MongoDB를 기반으로 트랜잭션 롤백을 어떻게 합리적으로 구현해야합니까? 당신은 잘 알려진 템플릿 구현을 얻을, 당신이 얻을 :

그래서 봄 데이터와 함께 우리는 오히려 하나의 오버 추출 API로 모든 것을 억지로 지원되는 저장을위한 일관된 프로그래밍 모델을 제공하지만하기로 결정했습니다 모든 저장소에 대해 동일하게 작동하지만 저장소 관련 기능과 개념을 활용하도록하는 저장소 추상화입니다.

+3

봄 데이터입니다 :) ... 일반적으로 봄과 일하는 사랑 ... 내 질문에 답해 주셔서 감사합니다. – hajime

13

면책 조항 : 저는 Hibernate OGM 개발자 중 한 명입니다. 그래서 나는 그 이유를 설명하려고 노력할 것입니다.

Hibernate OGM은 NoSQL 솔루션에 대한 Java Persistence (JPA) 지원을 제공합니다. Hibernate ORM의 엔진을 재사용하지만 엔티티는 관계형 데이터베이스 대신 NoSQL 데이터 스토어에 유지됩니다. 또한 JPA가 적합하지 않을 때 특정 데이터 저장소 기능에 대한 액세스를 제공하는 것을 목표로합니다.

이 방법은 여러 가지 이유로 흥미 롭다 : 의미와 API

  • 알려진. Java 개발자는 이미 JPA에 익숙합니다. 즉, 저수준 API를 배울 필요가 없습니다. 또한 HQL 및 네이티브 백엔드 쿼리를 모두 지원합니다.

  • 늦은 백엔드 선택. 올바른 NoSQL 데이터 저장소를 선택하는 것은 쉬운 일이 아닙니다. Hibernate OGM을 사용하면 특정 NoSQL 솔루션을 사용할 필요가 없으며 다른 백엔드를 쉽게 전환하고 테스트 할 수 있습니다.

  • 기존 도구 및 라이브러리. JPA와 Hibernate ORM은 잠시 동안 있었고, 당신은 그것들을 사용하는 라이브러리와 도구를 재사용 할 수있을 것입니다.

  • 대부분의 JPA 논리적 모델이 적합합니다. 올바른 적합성의 예로는 @Embedded, @EmbeddedCollection@Entity (선택하는 데이터 저장소를 기반으로하는 노드, 문서 또는 캐시가 될 수 있음)입니다. 사용자가 @Table@Column을 처리해야하기 때문에 특수 효과 이름이 이상하게 보일 수도 있습니다.

  • JPA는 객체 수준에서 지속성을 추상화하여 많은 트릭과 최적화를위한 공간을 제공합니다. 몇 가지 데이터 저장소에 데이터를 저장하고 특정 읽기 작업에 가장 적합한 데이터를 사용하는 등 여러 가지 아이디어가 있습니다.

JPA의 개념 중 일부는 트랜잭션과 같은 NoSQL 세계로 쉽게 매핑되지 않습니다. 트랜잭션 구분 방법에 액세스 할 수는 있지만 기본적으로 트랜잭션을 지원하지 않는 데이터 저장소는 롤백 할 수 없습니다 (이 경우 트랜잭션은 그룹 작업 및 호출 수 최적화를 위해 사용됩니다). db).

또한 데이터 세트가 본질적으로 비 도메인 모델 중심 인 경우 Hibernate OGM은 사용자를위한 것이 아닙니다.

관련 문제