일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- HTML Code
- Can't load AMD 64-bit .dll on a IA 32-bit platform
- BRIN
- Spring Cloud
- orioledb
- graph database
- STS
- Windows 10
- tomcat
- NextJs
- tortoise SVN
- Maven Project
- PG-Strom
- OGM
- HTML Special Entity
- MariaDB
- maven
- Spring Boot
- JSP
- Spring
- Eclipse
- exit code = -805306369
- PostgreSQL
- NestJS
- Java
- springboot
- 서브라임 텍스트
- typeorm
- Next.js
- loadcomplete
- Today
- Total
Undergoing
OGM(Object Gpath Mapper) 본문
ORM이나 ODM은 보편화되어 찾으면 잘 나오는데, OGM에 대한 개념은 2021년 8월 현재 Neo4j 외에는 찾아볼 수가 없었다. 그 외에는 hibernate-OGM(NoSQL based) 정도고..
결국 작성함에 있어 Neo4j-OGM의 내용을 의역할 수밖에 없었는데, Neo4j 외의 GDBMS 시장이 커지면 보편화 될지도..?
그러다가 ORM 및 ODM에 대해서도 재확인이 필요했고, 세 가지 기법에 대해(주로 Neo4j OGM) 간단하게 정리해보았다.
● ORM(Object Relational Mapping)
- Object와 RDBMS간의 Mapping
- DB와 객체지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 기법
- JDBC, JPA, hibernate, MyBatis가 ORM의 한 종류
- Object oriented code이다 보니 제대로 설정하면 직관적이고 business logic에 더 시간을 할애할 수 있음
- 재사용 및 유지보수가 편함
- 프레임워크의 복잡도가 높아질수록(프로시저가 많은 시스템일수록) 유지보수 및 구현 수준이 높아짐. 순수 ORM으로 구현하기 어려움
● ODM(Object Data Mapping)
- NoSQL에서 Document Database를 지원하기 위해 데이터를 변환하는 기법
- join이 없기 때문에 join이 필요없는 데이터 구조화 필요
- 쿼리문 지원의 유연성
- shcemaless한 db 개발에 용이
- mongoose가 ODM의 한 종류
* ODM, ORM
● OGM(Object Graph Mapping)
- 그래프의 노드 및 관계를 도메인 모델의 개체 및 참조를 위해 매핑
- 개체 인스턴스는 노드에 매핑되는 반면 개체 참조는 관계를 사용하여 매핑되거나 속성에 직렬화됨
- JVM 기본 요소는 노드 또는 관계 속성에 매핑
- OGM은 데이터베이스를 추상화하고 그래프에서 도메인 모델을 유지하고 낮은 수준의 드라이버를 사용하지 않고 쿼리하는 편리한 방법을 제공
- 개발자에게 Neo4j-OGM에서 생성된 쿼리가 불충분할 경우 제대로 구성된 커스텀 쿼리를 제공할 수 있는 유연성을 제공함
- Neo4j OGM은 Spring Data Neo4j의 기반 역할도 하는 Java전용 독립 실행이 가능한 simple 그래프 매퍼로 개발됨
- 내부적으로 일관된 방식으로 cypher를 사용, 볼트, http 및 임베디드와 같은 여러 전송 프로토콜을 통해 통신할 수 있음
● 이점
- 주석이 달린 노드 및 관계 엔터티의 개체 그래프 매핑
- Neo4j와의 직접적인 상호작용을 위한 Neo4jSession
- 빠른 클래스 메타데이터 스캔
- 최소한의 데이터 전송을 위한 데이터 로드 및 변경 추적의 최적화된 관리
- 다중 전송: 바이너리(볼트), HTTP 및 임베디드
- 지속성 수명 주기 이벤트
- DTO에 대한 쿼리 결과 프로젝션
코드 예시
@NodeEntity(label="Film")
public class Movie {
@GraphId Long id;
@Property(name="title")
private String name;
}
@NodeEntity
public class Actor extends DomainObject {
@Id @GeneratedValue
private Long id;
@Property(name="name")
private String fullName;
@Relationship(type="ACTED_IN", direction=Relationship.OUTGOING)
private List<Role> filmography;
}
@RelationshipEntity(type="ACTED_IN")
public class Role {
@Id @GeneratedValue private Long relationshipId;
@Property private String title;
@StartNode private Actor actor;
@EndNode private Movie movie;
}
'개발 > DB' 카테고리의 다른 글
PostgreSQL - GiST (0) | 2021.12.08 |
---|---|
PostgreSQL - GIN (0) | 2021.12.06 |
PostgreSQL - BRIN (0) | 2021.11.30 |
springboot에 slf4j 설정 시 느릴 경우 (0) | 2018.02.20 |
[MariaDB] CSV 파일 import (0) | 2017.09.08 |