What is a Graph Database?
A graph database stores nodes and relationships instead of tables, or documents. Data is stored just like you might sketch ideas on a whiteboard. Your data is stored without restricting it to a pre-defined model, allowing a very flexible way of thinking about and using it.
그래프 데이터베이스는 노드와 관계를 저장한다. 데이터는 화이트보드에 아이디어를 스케치하듯이 저장되고, 이미 정의된(pre-defined) 모델(table, documents)에 구애받지 않고, 우리가 유연한 방식으로 생각하고 데이터를 사용할 수 있도록 저장된다. 이는 Neo4J 공식 사이트에 적혀있는 "What is a Graph Database?" 질문에 대한 답변이다.
RDB는 자주 바뀌지 않는 데이터의 경우 적합한 구조이다. 하지만 비즈니스적 요구사항이 많은 경우 혹은 데이터간의 관계 정의가 중요할 경우 그래프 DB가 더 나은 선택지일 수 있다.
Good Things of Using Graph Databases
Intuitiveness
Intuitiveness means a way to create and maintain your data in a logical fashion.
직관성은 논리적인 방식으로 데이터를 생성하고 유지해나갈 수 있는 방법을 의미한다. 즉, 개발자에게는 code to database 관점에서 해석될 수 있다. 또한 여기서 더 나아가, translation between business folks 즉, 개발자가 아닌 다른 직군(ex. 기획자)들과 소통함에 있어서 얼마나 그 로직이 데이터에 명확하게 드러나 있는가로 해석될 수도 있겠다.
Speed
Speed means the speed of execution, and how quickly you can deliver results to your application to enable real-time decisions.
스피드는 실시간으로 이루어지는 의사결정을 얼마나 빠르게 애플리케이션에 적용시킬 수 있을지, 즉 실행 속도를 의미한다. 그리고 애플리케이션의 개발 속도적인 측면에서의 장점은 위에서 언급한 intuitiveness의 특성에 따라 자연스럽게 따라오는 것이다.
Agility
Agility means a naturally adaptive model.
그래프 데이터베이스에서는 데이터의 무결성(데이터의 정확성과 일관성 유지)를 위해 constraints 를 두는 것도 가능하고, 필요할 때 데이터를 추가하고 삭제하는 것도 쉽게 가능하다. 제약(constraints)을 둔다는 것은 예를 들어, "No Broken Links" 같은 원칙이 있을 것 같다. 모든 관계는 노드를 가져야 한다는 것, 만일 노드를 삭제하고 싶다면 거기에 연결된 관계들도 모두 삭제해야 한다. 그리고 이것은 Cypher라는 그래프 DB의 데이터 질의 언어를 통해 가능하다.
Neo4J 공식 영상에서는 이렇게도 말하고 있다.
Cypher enables less time writing queries, giving you more time to understand the answers, and leaving time to ask next question.
멋지지 않은가? 이 문구를 보고 좀 더 neo4j에 대해 알고 싶어지기도 했다.
Use Cases For Graph Databases
처음에는 그냥 twitter, facebook 등 SNS에서만 활용되기 좋다고 생각했다. 하지만 더 찾아보니 그렇지만은 않았다. 아래와 같은 비즈니스 영역에서 유즈 케이스들을 찾을 수 있었다.
- Real Time Recommendations
- Master Data Management
- Fraud Detection
- Graph Based Search
- Network and IT Operations
- Identity and Access Management
Graph Database 구성 요소
그래프 데이터베이스는 노드, 관계, 속성 이 세가지의 개념을 통해 모든 데이터의 종류들을 저장하고 표현한다.
Node
- Entity
- Key-value 속성을 가진다.
- label을 가진다.
Label
- 1개의 Node는 1개 이상의 label을 가질 수 있다.
- 관계형 데이터베이스에서 table 같은 역할이다.
관계
- 관계는 두 개의 노드를 연결하며, 유효한 소스 노드와 대상 노드를 갖도록 설계한다.
- 두 노드 사이의 관계는 순방향과 역방향 모두 있다.
- 관계는 Type을 가질 수 있다.
- 모든 관계는 ‘No Broken Links’ 원칙에 입각해 시작노드와 종료노드를 가지고 있다.
- 관계도 (키-값)쌍으로 구성된 속성을 가진다.
- 두 노드 사이에 여러개의 관계를 가질 수 있다.
간단한 Cypher 예시
노드 생성
CREATE (n:Person {name: 'Andy', title: 'Developer'})
관계 생성
MATCH
(a:Person),
(b:Person)
WHERE a.name = 'A' AND b.name = 'B'
CREATE (a)-[r:RELTYPE]->(b)
RETURN type(r)
References
'프로그래밍, 개발' 카테고리의 다른 글
객체지향설계원칙(SOLID) ⑤ - DIP (0) | 2023.03.19 |
---|---|
객체지향설계원칙(SOLID) ① - SRP (0) | 2023.03.19 |
keycloak : id of client 와 client id 값의 차이 (0) | 2023.03.06 |
Relational Databases Lack Relationships (0) | 2023.03.05 |
DDD 개발 이해하기 : 도메인(Domain)과 애그리거트(Aggregate) (0) | 2023.02.26 |