FalkorDB/FalkorDB
요약
FalkorDB는 LLM 시대에 맞춰 설계된 고성능 속성 그래프 데이터베이스입니다. 희소 행렬과 선형 대수학을 활용하여 인접 행렬을 표현하고 쿼리 효율성을 극대화했습니다. OpenCypher를 지원하며, Docker 및 Python 클라이언트 등을 통해 쉽게 사용 가능합니다.
핵심 포인트
- 희소 행렬 기반의 고성능 그래프 저장 구조 채택
- 선형 대수학 활용으로 쿼리 계산 효율성 증대
- 속성 그래프 모델(Property Graph Model) 준수
- OpenCypher 호환성을 제공하는 쿼리 가능한 DB
저희의 목표는 대규모 언어 모델(LLMs)에 맞춰진 고성능 지식 그래프를 구축하는 것이며, 이를 위해 그래프 데이터베이스를 통해 빠르고 효율적인 정보 전달을 보장하도록 매우 낮은 지연 시간(low latency)을 우선시합니다.
🆕 FalkorDB는 **희소 행렬(sparse matrices)**을 활용하여 그래프의 인접 행렬을 표현하고 쿼리 시 선형 대수학(linear algebra)을 사용하는 최초의 쿼리 가능한 속성 그래프 데이터베이스입니다.
- 희소 행렬 표현: 희소 행렬을 사용하여 인접 행렬을 표현함으로써 저장 공간과 성능을 최적화합니다. -
- 선형 대수 쿼리: 선형 대수학을 쿼리 실행에 활용하여 계산 효율성을 높입니다. -
- 속성 그래프 모델 준수: 속성이 있는 노드와 관계를 지원하며, 속성 그래프 모델(Property Graph Model)을 따릅니다. -
- OpenCypher 지원: 고급 쿼리 기능을 위한 독점 확장 기능(proprietary extensions)을 포함하여 OpenCypher 쿼리 언어와 호환됩니다.
Demos에서 FalkorDB의 작동 모습을 확인해 보세요.
FalkorDB를 빠르게 사용해 보려면 docker를 사용하여 인스턴스를 실행하세요:
docker run -p 6379:6379 -p 3000:3000 -it --rm -v ./data:/var/lib/falkordb/data falkordb/falkordb
그런 다음 브라우저를 열고 http://localhost:3000으로 이동하세요.
.
지원되는 클라이언트 라이브러리를 사용하여 FalkorDB와 상호 작용할 수도 있습니다.
이 예제에서는 MotoGP 리그에 참가하는 오토바이 라이더와 팀의 일부를 나타내는 작은 그래프를 생성하기 위해 FalkorDB Python 클라이언트를 사용할 것입니다. 그래프를 생성한 후, 데이터 구조와 관계를 탐색하기 위해 데이터를 쿼리합니다.
from falkordb import FalkorDB
# FalkorDB에 연결
db = FalkorDB(host='localhost', port=6379)
...
모든 Redis 클라이언트에서 FalkorDB의 명령을 호출할 수 있습니다. 몇 가지 방법은 다음과 같습니다:
$ redis-cli
127.0.0.1:6379> GRAPH.QUERY social "CREATE (:person {name: 'roi', age: 33, gender: 'male', status: 'married'})"
클라이언트가 원시 Redis 명령을 전송하는 기능을 사용하여 FalkorDB와 상호 작용할 수 있습니다.
참고: 선택하는 클라이언트에 따라 정확한 방법은 다를 수 있습니다.
이 코드 스니펫은 Python에서 falkordb-py를 사용하여 FalkorDB와 상호 작용하는 방법을 보여줍니다:
from falkordb import FalkorDB
# FalkorDB에 연결
db = FalkorDB(host='localhost', port=6379)
...
참고: 일부 언어에는 FalkorDB의 명령을 지원하는 클라이언트 라이브러리가 있습니다:
| 프로젝트 | 언어 | 라이선스 | 작성자 | 별점 | 패키지 | 설명 |
|---|---|---|---|---|---|---|
| jfalkordb | Java | BSD | FalkorDB | Maven | ||
| ... | ||||||
| 프로젝트 | 언어 | 라이선스 | 작성자 | 별점 | 패키지 | 설명 |
| --- | --- | --- | --- | --- | --- | --- |
| nredisstack | .NET | MIT | Redis | nuget | ||
| ... | ||||||
| 공식 문서 | 클라이언트 | 명령 | 📊 최신 성능 벤치마크 |
토론: GitHub Discussions에서 커뮤니티 토론에 참여하여 질문하고, 아이디어를 공유하며, 다른 사용자와 연결하세요. -
기여: 기여를 환영합니다! 아래 개발자 가이드를 참조하여 FalkorDB를 소스에서 빌드하고 테스트 스위트를 실행해 보세요. -
라이선스: 이 프로젝트는 Server Side Public License v1 (SSPLv1)에 따라 라이선스가 부여되었습니다. 자세한 내용은 LICENSE 파일을 참조하세요.
이 저장소는 FalkorDB의 Rust 구현체입니다. 그래프 저장 및 순회(traversal)를 위해 GraphBLAS 희소 행렬을 사용하여 falkordb Redis 모듈(libfalkordb.{so,dylib})을 Rust로 빌드합니다.
가장 쉽게 시작하는 방법은 모든 종속성이 미리 설치된 개발 컨테이너를 사용하는 것입니다:
- Docker 및 VS Code 설치
- Dev Containers 확장 설치
- 이 프로젝트를 VS Code에서 열기
- 프롬프트가 나타나면
| Host | Compiler | OpenMP runtime |
|---|---|---|
| macOS | brew install llvm (OpenMP 지원을 제공하는 clang 설치) | brew install libomp |
| Linux | clang-23 (예: apt.llvm.org에서) | apt install libomp-23-dev |
로컬 빌드는 시스템에 있는 OpenMP 패키지를 사용합니다 — build/libomp.sh는 로컬 개발에 필수적이지 않습니다. 이는 Docker 툴체인 이미지(build/Dockerfile)에서만 호출되어 /opt/libomp/lib/libomp.a를 생성하며, 이를 통해 배포된 libfalkordb.{so,dylib}가 libomp를 정적으로 임베드하고 libomp.so.5 / libgomp.so.1 / libomp.dylib 런타임 종속성이 없게 만듭니다. 로컬에서 빌드된 아티팩트는 대신 시스템의 libomp에 동적 링크됩니다 — 개발에는 괜찮지만, CI/Docker가 자체 포함 이미지의 진실 공급원(source of truth)입니다.
만약 자체 포함형 로컬 아티팩트(예: Docker 빌드를 미러링하기 위해)를 원한다면, 쓰기 가능한 PREFIX와 함께 build/libomp.sh를 실행하고 graph/build.rs에 LIBOMP_PREFIX로 지정하십시오:
CC=$(brew --prefix llvm)/bin/clang PREFIX=$HOME/libomp ./build/libomp.sh
LIBOMP_PREFIX=$HOME/libomp cargo build
이 스크립트는 ${CC:-clang} --version으로부터 libomp 소스 릴리스를 자동 감지하므로, 수동 버전 인자 없이 컴파일러에 ABI가 일치합니다. Docker에서는 동일한 자동 감지가 clang-${CLANG_MAJOR}에 대해 실행되어, apt로 설치된 clang과 수동으로 고정된 LLVMORG_VERSION 사이의 이전 드리프트 위험을 제거합니다.
GraphBLAS, LAGraph 및 RediSearch는 deps/ 아래의 git 서브모듈이며, native-deps 크레이트가 빌드합니다. git이 해당 체크아웃을 소유하므로, 먼저 이를 채우십시오.
macOS에서는 빌드를 Homebrew clang에 먼저 지정하십시오: 시스템 clang에는 OpenMP가 없으며, GraphBLAS는 그렇게 알리지 않고 단일 스레드로 빌드될 것입니다.
export CC=$(brew --prefix llvm)/bin/clang
export CXX=$(brew --prefix llvm)/bin/clang++
git submodule update --init --recursive
cargo build # graph/build.rs가 native-deps를 호출합니다; 실행할 다른 것은 없습니다
(git clone --recurse-submodules
첫 번째 단계에서 자동으로 수행합니다.)
cargo build
누락된 종속성을 자동으로 빌드하므로, 아래의 명시적인 단계는 미리 빌드하거나 결과를 검사하고 싶을 때만 필요합니다:
cargo run --manifest-path native-deps/Cargo.toml
결과는 다음 위치에 캐싱됩니다:
${XDG_CACHE_HOME:-$HOME/.cache}/falkordb/native-deps/<dep>/<key>/
($FALKORDB_DEPS_CACHE는 루트를 덮어씁니다). 이 키는 아티팩트가 ABI(Application Binary Interface)에 종속되는 모든 것을 포함합니다: 서브모듈 리비전, GB_control 패치, 번들된 PreJIT 커널, 레시피 소스, $CC/$CXX --version, 대상 트리플 및 OpenMP/sanitizer 플레이버. 따라서 작업 트리는 아카이브를 공유하며, 컴파일러 버전 변경만으로는 오래된 ABI 캐시 히트를 만들 수 없습니다.
$FALKORDB_NATIVE_DEPS_PREBUILT는 검색할 추가 읽기 전용 루트 이름을 지정하며, Docker 이미지는 이를 사용하여 종속성 스테이지에서 빌드한 아티팩트를 노출합니다.
gitlink를 일반적인 방식으로 이동한 다음, 잠금 파일(lock file)을 재생성하세요:
git -C deps/RediSearch checkout <sha>
git add deps/RediSearch
cargo run --manifest-path native-deps/Cargo.toml -- lock
deps/native-deps.lock은 종속성 스테이지가 읽을 수 없기 때문에 평문 파일로 gitlink를 미러링합니다. CI는 lock --check를 통해 두 파일이 일치하는지 강제합니다.
- pytest - 가상 환경(virtualenv)을 생성하고 tests/requirements.txt에 있는 테스트를 설치합니다.
테스트를 실행하기 전에 가상 환경을 활성화해야 합니다.
python3 -m venv venv
source venv/bin/activate
pip install -r tests/requirements.txt
cargo test -p graph로 단위 테스트(unit tests)를 실행합니다.pytest tests/test_e2e.py tests/test_functions.py -vv로 E2E 및 함수 테스트(function tests)를 실행합니다.pytest tests/test_mvcc.py tests/test_concurrency.py -vv로 MVCC 및 동시성 테스트(concurrency tests)를 실행합니다../flow.sh로 플로우 테스트(flow tests)를 실행합니다.pytest tests/tck/test_tck.py -s로 TCK 테스트(tck tests)를 실행합니다.
TCK 테스트의 일부만 실행하고 첫 실패 시 중지하는 옵션이 있습니다.
TCK_INCLUDE=tests/tck/features/expressions/list pytest tests/tck/test_tck.py -s
모든 성공하는 TCK 테스트를 실행하려면 다음을 사용하세요:
TCK_DONE=tck_done.txt pytest tests/tck/test_tck.py -s
Server Side Public License v1 (SSPLv1)에 따라 라이선스 부여됩니다. LICENSE 파일을 참조하세요.
⭐️ 이 저장소가 도움이 되었다면, 별점(star)을 눌러주세요!
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Trending Rust (weekly)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기