jeffhajewski/latticedb

Embedded single-file knowledge graph database with vector search and full-text search for AI/RAG apps

LatticeDB – 임베디드 그래프+벡터 데이터베이스

무엇인가요 – LatticeDB는 단일 파일에 저장되는 임베디드 속성 그래프 데이터베이스이며, 밀집 벡터와 전체 텍스트 인덱스도 저장합니다. 로컬 프로그램은 하나의 Cypher 스타일 쿼리 언어를 사용해 관계 탐색, 벡터 유사성, BM25 텍스트 검색을 통해 동일한 데이터를 질의할 수 있습니다.

AI에 왜 중요한가요 – 현대의 AI 애플리케이션(RAG 파이프라인, 에이전트 메모리, 로컬 지식 기반)은 종종 다음 세 가지를 동시에 필요로 합니다:

  1. 그래프 구조 – 엔티티와 그 관계를 모델링하기 위해.
  2. 의미적 임베딩 – 유사성 검색을 위해.
  3. 키워드 검색 – 정확한 텍스트 매칭을 위해. LatticeDB는 이 세 가지를 하나의 엔진에서 제공하여 별도의 그래프 DB, 벡터 DB, 검색 서비스를 조합할 필요를 없앱니다.

주요 기능 (README에서)

  • 1파일 저장 – 전체 데이터베이스가 이동 가능한 파일에 포함되며, 서버 없이 설정 없이 사용 가능.
  • 통합 쿼리 레이어 – Cypher는 MATCH, WHERE, RETURN을 지원하며, 두 가지 새로운 연산자도 추가:
    • <=> – 벡터 속성에 대한 코사인 거리.
    • @@ – BM25 전체 텍스트 검색.
  • 네이티브 HNSW ANN – 설정 가능한 파라미터를 가진 근사 최근접 이웃 검색으로, 100만 벡터에서 10-NN 검색을 0.83ms(평균) 내에 수행하며 100% 리콜을 달성.
  • BM25 역인덱스 – 약 19µs(100개 문서)로 빠른 어휘 검색을 제공하며, 흐릿한 매칭도 지원.
  • ACID 트랜잭션 – 앞쪽 로그, 크래시 복구, 커밋/롤백.
  • 내구성 있는 이벤트 스트림 – 이름이 지정된 변경 피드는 동일한 WAL을 공유하며, 반응형 에이전트에 유용.
  • 바인딩 – Python, TypeScript/Node, Go, Java(JDK 21+)용 깔끔한 C API 래퍼.
  • 제로 설정, 싱글라이터 모델 – 단일 프로세스에서만 쓰는 로컬 우선 앱에 적합.

성능 요약 (벤치마크 제공)

작업 지연 시간 처리량
노드 검색 0.13 µs 7.9 M ops/s
10-NN 벡터 검색 (1M 벡터) 0.83 ms (평균) 1.2 k queries/s
2호프 그래프 탐색 (10만 노드) 39 µs
BM25 전체 텍스트 검색 (100개 문서) 19 µs 53 k ops/s
이 숫자들은 동일한 워크로드에서 FAISS, Weaviate, SQLite-FTS5, Neo4j와 비교해도 유사하거나 더 우수하며, 완전히 임베디드 상태를 유지합니다.

설치

  • CLIcurl …/install.sh | bash
  • Pythonpip install latticedb
  • Nodenpm install @hajewski/latticedb
  • Java – Maven/Gradle로 bindings/java 모듈 사용 (JDK 21 필요)
  • Gogo getbindings/go/README.md 참조

빠른 예제 (Python)

from latticedb import Database
from latticedb.embedding import hash_embed

with Database('knowledge.db', create=True, enable_vectors=True, vector_dimensions=128) as db:
    db.create_node_fts_index('Chunk', 'text')
    with db.write() as txn:
        alice = txn.create_node(labels=['Person'], properties={'name':'Alice'})
        doc   = txn.create_node(labels=['Document'], properties={'title':'Attention Is All You Need'})
        chunk = txn.create_node(labels=['Chunk'], properties={'text':'The transformer architecture uses self‑attention...'})
        txn.set_vector(chunk.id, 'embedding', hash_embed('transformer self‑attention', 128))
        txn.create_edge(chunk.id, doc.id, 'PART_OF')
        txn.create_edge(doc.id, alice.id, 'AUTHORED_BY')
        txn.commit()

    results = db.query(
        """MATCH (c:Chunk)-[:PART_OF]->(d:Document)-[:AUTHORED_BY]->(a:Person)
           WHERE c.embedding <=> $q < 0.5
           RETURN d.title, c.text, a.name
           ORDER BY c.embedding <=> $q LIMIT 5""",
        parameters={'q': hash_embed('attention mechanism', 128)}
    )
    for row in results:
        print(row['d.title'], 'by', row['a.name'])

동일한 패턴은 TypeScript, Go, Java에서도 언어별 바인딩을 사용해 동작합니다.

일반적인 사용 사례

  • 로컬 지식 그래프 – 노트, 연구 논문, 인용 네트워크. 세미틱 검색도 필요할 때.
  • 에이전트 메모리 / RAG – 임베딩이 포함된 텍스트 청크를 저장. 에이전트는 단일 쿼리로 관련 부분을 검색 가능.
  • 프로토타이핑 – 단일 머신에서 개발 시, 무거운 클라이언트-서버 스택(Neo4j + Weaviate)을 대체 가능.
  • 임베디드 앱 – 서버 없이 그래프 구조 데이터가 필요한 데스크톱 또는 모바일 도구.

다른 곳을 고려해야 할 경우

  • 동시 쓰기 또는 네트워크 서비스 필요 – LatticeDB는 싱글라이터만 지원.
  • 워크로드가 주로 표 형식 – 관계형 DB(SQLite, PostgreSQL)가 더 간단.
  • 다수의 머신으로 확장 필요 – LatticeDB는 단일 프로세스, 단일 머신 설계.

결론 – LatticeDB는 그래프, 벡터, 전체 텍스트 검색을 초경량 임베디드 엔진으로 통합한 진정한 오픈소스 프로젝트로, 로컬 AI 증강 애플리케이션의 편리한 빌딩 블록입니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트