그래프 DB neo4j

이득규·2022년 11월 10일
0

그래프 DB와 Neo4j

그래프 DB란 데이터 간의 관계를 엔티티로 다룰 수 있도록 설계된 데이터베이스이다. 그래프 DB는 데이터 간의 관계를 저장 시점에 저장한다. 그래프 DB의 핵심 요소는 Node와 Relation이다.

노드

  • 그래프의 엔티티로서 역할에 따른 레이블을 가짐

관계

  • 두 노드 사이의 관계

Neo4J는 오픈소스 그래프 DB이며, 아래와 같은 특성을 가진다. 커뮤니티 버전은 무료이지만, 운영 관점의 주요 기능은 대체로 유료다.

  • ACID 트랜잭션 지원
  • Native 그래프 DB로서, 그래프 엔진 레벨이 아닌 스토리지 레벨까지 구현됨
  • 유연하며 강력한, 그래프 전용 쿼리 언어인 Cypher 제공

사이퍼(CYPHER)

구문 생성

CREATE (john:Person {name: 'John'})
CREATE (joe:Person {name: 'Joe'})
CREATE (steve:Person {name: 'Steve'})
CREATE (sara:Person {name: 'Sara'})
CREATE (maria:Person {name: 'Maria'})
CREATE (john)-[:FRIEND]->(joe)-[:FRIEND]->(steve)
CREATE (john)-[:FRIEND]->(sara)-[:FRIEND]->(maria)



# SQL
SELECT DISTINCT c.CompanyName
FROM customers AS c
JOIN orders AS o ON (c.CustomerID = o.CustomerID)
JOIN order_details AS od ON (o.OrderID = od.OrderID)
JOIN products AS p ON (od.ProductID = p.ProductID)
WHERE p.ProductName = 'Chocolade';

# Cypher
MATCH (p:Product {productName:"Chocolade"})<-[:PRODUCT]-(:Order)<-[:PURCHASED]-(c:Customer)
RETURN distinct c.companyName;

# SQL
SELECT e.LastName, et.Description
FROM Employee AS e
JOIN EmployeeTerritory AS et ON (et.EmployeeID = e.EmployeeID)
JOIN Territory AS t ON (et.TerritoryID = t.TerritoryID);

# Cypher
MATCH (t:Territory)<-[:IN_TERRITORY]-(e:Employee)
RETURN t.description, collect(e.lastName);

그래픽 데이터베이스로 할 수 있는 것

이상탐지

  • 그래프 데이터베이스는 정교한 이상탐지와 예방 기능 있음
  • 실시간으로 금융이나 구매 트랜잭션 처리 가능
  • 예를 들면, 하나의 개인 이메일 주소와 연결된 여러 사람들 또는 ip 주소는 같지만 실제로는 서로 다른 주소에 거주하는 사람들 간의 관계 패턴 파악에 도움

추천엔진

  • 고객, 관심분야, 친구, 구매이력과 같은 정보 카테고리들 사이의 그래프 관계를 저장할 수 있음
  • 고도의 가용성을 가진 그래프 데이터베이스를 사용하여 같은 운동을 즐기고 비슷한 구매 이력을 가진 다른 사용자가 어떤 제품을 구입했는지 파악

Neo4j Graph Platform architecture

개발자들은 Neo4j Browser와 함께 Neo4j Desktop을 사용하여 그래프를 개발하고 테스트할 뿐만 아니라 지원되는 드라이버, 도구 및 API를 사용하여 여러 언어로 애플리케이션을 구현한다. 관리자는 도구를 사용하여 Neo4j 데이터베이스 및 클러스터를 관리 및 모니터링한다. 비즈니스 사용자는 즉시 사용 가능한 그래프 시각화 도구를 사용하거나 사용자 지정 도구를 사용한다. 데이터 분석가와 과학자들은 Graph Algorithm 라이브러리의 분석 기능을 사용하거나 사용자 정의 라이브러리를 사용하여 결과를 이해하고 기업에 보고. 애플리케이션 또한 기존 데이터베이스(SQL or NOSQL)와 통합되어 그 위에 Neo4j를 계층화하여 데이터에 대한 풍부한 그래프 가능 액세스를 제공할 수 있다.

https://visjs.org/ 자바스크립트 네트워크 그래프 시각화 라이브러리
https://d3-graph-gallery.com/network.html

profile
룰의 습관화

0개의 댓글