Back to Projects
Project Detail

Lynxes: Graph Analytics Engine

A high-performance graph analytics engine that combines Arrow columnar memory with graph-native traversal structures for Python users.

Type Graph Systems Engine Project
Year 2026
Primary Role ML Engineer
Roles ML Engineer, Library Developer
Data Systems Specialist with Graph-native Depth Built project Graph AnalyticsApache ArrowCSRRustLazy ExecutionPyO3

Shows system design and implementation depth for treating graph data as a first-class execution model.

structuredgraphhybrid
dataexperimentevaluation
그래프 엔진 아키텍처 설계CSR 탐색 구조 구현Python 연동 레이어 구축
Problem

Existing Python graph libraries and generic dataframe wrappers often struggle to combine memory efficiency, traversal performance, and lazy query optimization for large graph analytics.

Approach

Designed GraphFrame to own Arrow RecordBatches directly.

Outcome

Established the foundation for a graph analytics engine with Arrow columnar memory, CSR-based traversal, and lazy collect execution.

Architecture

A graph analytics engine combining Arrow RecordBatch storage, CSR indexing, lazy logical plans, Rust algorithms, and Python bindings.

Arrow RecordBatch

Columnar memory for nodes and edges

GraphFrame

Core graph object owning graph data

CSR Index

Adjacency structure for O(degree) neighbor traversal

LogicalPlan

Lazy query pipeline

Python Bindings

PyO3-based user surface

Outcome Metrics
O(degree) CSR adjacency index
Arrow RecordBatch-based columnar storage
Lazy collect LogicalPlan-centered execution flow

배경

Lynxes는 대규모 그래프 데이터를 더 빠르고 구조적으로 다루기 위해 직접 설계한 그래프 분석 엔진 프로젝트입니다. 저는 이 프로젝트에서 단순히 기존 라이브러리를 감싸는 방식이 아니라, Apache Arrow 기반 컬럼 저장과 그래프 전용 인덱스를 처음부터 결합한 엔진을 Rust로 구현하는 데 집중했습니다.

문제

기존 그래프 도구들은 사용성은 좋지만 내부적으로 범용 자료구조나 래퍼 계층에 의존하는 경우가 많아, 그래프 탐색 성능과 메모리 효율, 그리고 분석 파이프라인의 지연 실행을 동시에 만족시키기 어려웠습니다. 특히 이웃 탐색이 그래프 구조의 핵심인데도 선형 스캔이나 느슨한 추상화에 기대는 경우가 많아, 그래프를 진짜 1급 구조로 다루는 엔진이 필요했습니다.

구현

저는 Lynxes의 핵심 데이터 레이아웃부터 직접 설계했습니다. 노드와 엣지는 Arrow RecordBatch 기반으로 보관하고, EdgeFrame에는 CSR 기반 인접성 인덱스를 결합해 이웃 조회가 O(degree)로 이뤄지도록 구성했습니다. 실행 모델 역시 eager 방식이 아니라 lazy execution을 기본으로 두어, 사용자가 질의를 연결해 LogicalPlan을 만들고 실제 계산은 .collect() 시점에만 수행되도록 설계했습니다. 여기에 Rust로 그래프 알고리즘과 실행 엔진을 구현하고, Python 사용성을 위해 PyO3 바인딩과 입출력 계층까지 함께 구축했습니다.

결과

Lynxes는 Arrow의 zero-copy 지향 메모리 구조와 CSR 기반 그래프 탐색을 결합한 그래프 네이티브 엔진으로 발전했습니다. 이를 통해 단순 데이터프레임 래핑이 아닌, 그래프 구조 자체를 중심에 둔 분석 환경의 기반을 마련했고, 고성능 Rust 엔진과 Python 인터페이스를 함께 설계하며 제품형 그래프 시스템을 끝단까지 만드는 경험을 축적했습니다.