그래프 쿼리 언어는 노드(Node)와 엣지(Edge)로 구성된 그래프 데이터를 탐색하고 분석하는 특화 언어다. 소셜 네트워크, 추천 시스템, 지식 그래프, 사기 탐지에 활용된다.
Cypher (Neo4j)
cypher
// 노드와 관계 생성
CREATE (alice:Person {name: 'Alice', age: 30})
CREATE (bob:Person {name: 'Bob', age: 25})
CREATE (neo4j:Technology {name: 'Neo4j'})
CREATE (alice)-[:KNOWS {since: 2020}]->(bob)
CREATE (alice)-[:USES]->(neo4j)
CREATE (bob)-[:USES]->(neo4j)
// 패턴 매칭: Alice의 지인이 사용하는 기술
MATCH (alice:Person {name: 'Alice'})
-[:KNOWS]->(friend:Person)
-[:USES]->(tech:Technology)
RETURN friend.name, tech.name
// 최단 경로
MATCH path = shortestPath(
(alice:Person {name: 'Alice'})-[*]-(carol:Person {name: 'Carol'})
)
RETURN path, length(path)
// 추천: Alice와 비슷한 관심사를 가진 사람
MATCH (alice:Person {name: 'Alice'})-[:LIKES]->(item)
<-[:LIKES]-(other:Person)
WHERE NOT (alice)-[:KNOWS]->(other)
WITH other, COUNT(item) AS common
ORDER BY common DESC
LIMIT 5
RETURN other.name, common AS commonInterests
SPARQL (RDF 그래프)
sparql
# SPARQL: Semantic Web / Linked Data 쿼리
# RDF 삼중항: 주어 - 서술어 - 목적어
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
# 프로그래밍 언어와 그 창시자 조회
SELECT ?language ?creator ?birthYear
WHERE {
?language a dbo:ProgrammingLanguage ;
dbo:designer ?person ;
foaf:name ?creator .
OPTIONAL {
?person dbo:birthYear ?birthYear
}
FILTER(LANG(?creator) = "en")
}
ORDER BY ?language
LIMIT 20
그래프 DB 비교
| DB | 쿼리 언어 | 특징 | 용도 |
|---|
| Neo4j | Cypher | 직관적 ASCII 아트 | 소셜, 추천 |
| Amazon Neptune | Cypher, SPARQL, Gremlin | 완전관리형 | 클라우드 |
| JanusGraph | Gremlin | 분산, Cassandra/HBase | 대규모 |
| TigerGraph | GSQL | OLAP, 병렬 | 실시간 분석 |
| ArangoDB | AQL | 멀티모델 | 범용 |
관련 문서