Spring Data MongoDB와 MongoDB용 Hibernate OGM의 차이점은 무엇입니까?
저는 Spring Data를 사용해 본 적은 없지만 MySQL 기반 애플리케이션에 Hibernate ORM을 여러 번 사용해 보았습니다.저는 MongoDB 기반 애플리케이션을 위해 둘 중 어떤 프레임워크를 선택해야 하는지 이해할 수 없습니다.
저는 답을 찾아봤지만 생산 환경에서 둘을 비교할 수 있는 답을 찾을 수 없습니다.이 두 프레임워크를 MongoDB와 함께 사용하는 데 문제가 있는 사람이 있습니까?
고지 사항:저는 Spring Data 프로젝트의 리더이기 때문에 여기서는 Spring Data 측면에 대해 주로 다루겠습니다.
두 프로젝트의 핵심적인 차이점은 Hibernate OGM 팀은 JPA를 중심으로 노력을 집중하기로 선택한 반면 Spring Data 팀은 분명히 그렇지 않았다는 것입니다.그 이유는 다음과 같습니다.
- JPA는 본질적으로 관계형 API입니다.스펙의 처음 두 문장은 객체 관계 매핑을 위한 API라고 명시합니다.이것은 또한 API의 핵심 테마인 테이블, 열, 조인, 트랜잭션에 대해 설명합니다.NoSQL 세계로 반드시 이전할 수 있는 것은 아닌 개념.
- 일반적으로 NoSQL 저장소를 선택하는 이유는 특별한 특성(예: MongoDB의 지리공간 쿼리, Neo4j에 대한 그래프 트래버설 실행 가능) 때문입니다.이 중 JPA에서 사용할 수 있는 것은 없으며 앞으로도 계속 사용할 것이므로, 어쨌든 독점적인 확장 기능을 제공해야 합니다.
- 더 나쁜 것은 JPA에 정의된 것처럼 NoSQL 저장소에서 작업한다고 가정할 경우 JPA에 잘못된 방향으로 사용자를 안내하는 개념이 있다는 것입니다. 트랜잭션 롤백이 MongoDB 위에서 어떻게 합리적으로 구현되어야 합니까?
Spring Data를 사용하여 지원되는 저장소에 대해 일관된 프로그래밍 모델을 제공하되 모든 것을 하나의 과도한 추상화 API로 강제하지 않기로 결정했습니다. 잘 알려진 템플릿 구현, 저장소 추상화,모든 스토어에서 동일하게 작동하지만 스토어별 기능과 개념을 활용할 수 있습니다.
고지 사항:저는 Hibernate OGM 개발자 중 한 명이기 때문에 몇 가지 이유를 설명해 보겠습니다.
최대 절전 모드 OGM은 NoSQL 솔루션에 대한 Java 지속성(JPA) 지원을 제공합니다.Hibernate ORM 엔진을 다시 사용하지만 관계형 데이터베이스 대신 NoSQL 데이터스토어에 엔티티를 유지합니다.또한 JPA가 적합하지 않을 때 특정 데이터스토어 기능에 대한 액세스를 제공하는 것을 목표로 합니다.
이러한 접근 방식은 다음과 같은 몇 가지 이유로 흥미롭습니다.
알려진 시맨틱 및 API.자바 개발자들은 이미 JPA에 익숙하며, 이것은 낮은 수준의 API를 배울 필요가 없다는 것을 의미합니다.또한 HQL 및 네이티브 백엔드 쿼리를 모두 지원합니다.
백엔드를 늦게 선택했습니다.올바른 NoSQL 데이터스토어를 선택하는 것은 사소한 일이 아닙니다.Hibernate OGM을 사용하면 특정 NoSQL 솔루션을 커밋할 필요가 없으며 다른 백엔드를 쉽게 전환하고 테스트할 수 있습니다.
기존 도구 및 라이브러리.JPA와 Hibernate ORM은 오랫동안 존재해 왔고 당신은 그것들을 밑에서 사용하는 라이브러리와 도구를 재사용할 수 있을 것입니다.
대부분의 JPA 논리적 모형이 적합합니다.적합도가 좋은 예는 다음과 같습니다.
@Embedded
,@EmbeddedCollection
그리고.@Entity
(선택한 데이터스토어에 따라 노드, 문서 또는 캐시가 될 수 있음).물론, 주석 이름이 이상할 수도 있습니다. 왜냐하면 당신은 또한 처리해야 할 것이기 때문입니다.@Table
그리고.@Column
.JPA는 객체 수준에서 지속성을 추상화하여 많은 트릭과 최적화의 여지를 남깁니다.우리는 여러 데이터 저장소에 데이터를 저장하고 특정 읽기 작업에 가장 적합한 아이디어를 사용하는 것과 같은 여러 가지 아이디어를 계획하고 있습니다.
주요 단점은 JPA의 일부 개념이 NoSQL 세계(예: 트랜잭션)에 쉽게 매핑되지 않는다는 것입니다.트랜잭션 구분 방법에 액세스할 수는 있지만 트랜잭션을 기본적으로 지원하지 않는 데이터 저장소에서는 롤백할 수 없습니다(이 경우 트랜잭션은 작업을 그룹화하고 DB에 대한 호출 수를 최적화하는 데 사용됩니다).
또한 데이터 세트가 비 도메인 모델 중심적인 경우 Hibernate OGM은 사용자에게 적합하지 않습니다.
SpringData를 사용하면 됩니다.Spring ORM 또한 Entity, Transaction과 같은 일부 JPA를 사용하고 JPA와 Hibernate APIs의 최고의 조합을 제공했다는 것을 기억한다면, Spring 커뮤니티는 JPA가 NoSQL을 위해 더 성숙해지고 있다면 향후 버전에서 주의를 기울일 것입니다.비록 그것이 주된 이유는 아니지만요.대부분의 이유는 @Oliver Drotbom에 의해 설명됩니다.SprinData에 대한 더 많은 문서를 읽고 데이터 모델, 데이터 저장소의 연속성/성장에 대한 확장성을 추가로 분석하여 솔루션에 가장 적합한 솔루션을 찾고 @Davide의 제안을 고려하십시오.SpringData는 MongoDB와 통합하면서 JPA보다 성공률이 높은 경우가 많습니다.
언급URL : https://stackoverflow.com/questions/23163853/whats-the-difference-between-spring-data-mongodb-and-hibernate-ogm-for-mongodb
'programing' 카테고리의 다른 글
varchar(max) 변수의 최대 크기 (0) | 2023.05.13 |
---|---|
PostgreSQL에서 부호 없는 정수를 사용할 수 없는 이유는 무엇입니까? (0) | 2023.05.13 |
WPF 4.0에서 SnapsToDevicePixels를 언제 사용해야 합니까? (0) | 2023.05.13 |
사전을 반환하기 위한 LINQ 쿼리 (0) | 2023.05.13 |
스토리보드에서 여러 컨트롤러와 함께 사용할 사용자 지정 셀을 만들려면 어떻게 해야 합니까? (0) | 2023.05.13 |