블로그를 시작한지 얼마되지 않은 것 같은데 벌써 60번째 글을 쓰게되었습니다. 앞으로도 열심히 글을 작성하도록 하겠습니다! 이번 주제는 Geek News에 올라온 흥미로운 도구에 대한 내용입니다. SQLite를 사용하면서 그래프 데이터를 다루고 싶다면? GraphQLite가 그 해답이 될 수 있습니다. 이 오픈소스 프로젝트는 SQLite에 그래프 데이터베이스 기능을 추가하는 확장 모듈로, Cypher 쿼리 언어를 사용해 노드와 관계를 표현할 수 있게 해줍니다.
왜 GraphQLite인가?
일반적으로 그래프 데이터베이스를 사용하려면 Neo4j 같은 별도의 서버를 구축해야 합니다. 하지만 GraphQLite는 SQLite의 단순함을 그대로 유지하면서 그래프 쿼리 기능을 제공합니다. 단일 파일 데이터베이스, 별도 설정 없음, 서버 불필요 등 SQLite의 장점을 그대로 살리면서 관계형 데이터를 표현하는 Cypher의 강력함을 결합했습니다.
로컬 개발이나 학습 목적, 또는 별도의 데이터베이스 서버 없이 그래프 쿼리가 필요한 애플리케이션에 특히 유용합니다.
설치 및 시작
소스에서 빌드하려면 gcc, bison, flex가 필요합니다:
make extension
빌드가 완료되면 SQLite에서 바로 로드할 수 있습니다:
.load build/graphqlite.dylib
-- 노드 생성
SELECT cypher('CREATE (a:Person {name: "Alice", age: 30})');
SELECT cypher('CREATE (b:Person {name: "Bob", age: 25})');
-- 관계 생성
SELECT cypher('
MATCH (a:Person {name: "Alice"}), (b:Person {name: "Bob"})
CREATE (a)-[:KNOWS]->(b)
');
-- 그래프 쿼리
SELECT cypher('MATCH (a:Person)-[:KNOWS]->(b) RETURN a.name, b.name');
Python에서 사용하기
Python 바인딩이 제공되어 pip으로 간단히 설치할 수 있습니다:
pip install graphqlite
from graphqlite import Connection
conn = Connection(":memory:")
conn.cypher("CREATE (n:Person {name: 'Alice'})")
for row in conn.cypher("MATCH (n:Person) RETURN n.name"):
print(row[0])
Rust 바인딩도 제공됩니다.
Cypher 지원 범위
GraphQLite는 Cypher의 상당 부분을 지원합니다. 노드 패턴, 관계, 가변 길이 경로, 양방향 매칭 등의 패턴을 사용할 수 있고, MATCH, CREATE, MERGE, SET, DELETE, WITH, RETURN 등의 주요 절을 지원합니다. 집계 함수, 리스트 연산, CASE 표현식, 경로 함수 등도 사용 가능합니다.
내장 그래프 알고리즘
PageRank와 레이블 전파를 통한 커뮤니티 탐지 알고리즘이 내장되어 있습니다:
-- PageRank 실행
SELECT cypher('RETURN pageRank(0.85, 20)');
-- 커뮤니티 탐지
SELECT cypher('RETURN labelPropagation(10)');
-- 특정 노드의 커뮤니티 확인
SELECT cypher('MATCH (n:Person) RETURN n.name, communityOf(n)');
결과는 JSON 형태로 반환되어 SQLite의 json_each() 함수와 함께 사용할 수 있습니다.
성능
최대 50만 노드, 500만 엣지 규모의 그래프에서 테스트되었습니다. 단순 탐색은 1-2ms, 집계는 500ms 이하, 그래프 알고리즘은 반복 횟수에 따라 1-5초 정도 소요됩니다.
저장 방식
GraphQLite는 타입이 지정된 속성 그래프 모델을 사용하며, 일반 SQLite 테이블에 데이터를 저장합니다. 필요한 경우 순수 SQL로도 데이터를 조회할 수 있습니다.
마무리
GraphQLite는 SQLite의 단순함과 그래프 데이터베이스의 표현력을 결합한 흥미로운 프로젝트입니다. 소규모 그래프 데이터를 다루거나, 프로토타이핑, 학습 목적으로 활용하기 좋으며, MIT 라이선스로 공개되어 있어 자유롭게 사용할 수 있습니다.
'프로그래밍 > 코딩 공부' 카테고리의 다른 글
| [코딩공부] DFS/BFS(3) - 문제 풀이 (0) | 2025.06.29 |
|---|---|
| [코딩공부] DFS/BFS (2) - DFS/BFS (0) | 2025.06.29 |
| [코딩 공부] DFS/BFS (1) - 자료구조 기초 상식 (0) | 2025.06.29 |
| 코딩 공부 - 구현(2) 왕실 나이트 및 게임 개발 (0) | 2025.05.10 |
| 파이썬 코딩 공부 - 구현 (0) | 2025.05.10 |