Ian Chou's Blog

GraphRAG 資料庫新勢力:Lance-graph vs HelixDB vs FalkorDB 完整評測

GraphRAG 資料庫新勢力:Lance-graph vs HelixDB vs FalkorDB 完整評測

2025 年底到 2026 年初,圖資料庫生態爆發了一波新選手。如果你像我一樣用 LanceDB + NetworkX 跑個人知識圖譜,這三個名字你一定會遇到:Lance-graphHelixDBFalkorDB。這篇文章把它們攤開來比。

前情提要:我的現有架構

knowledge_graph.py  →  NetworkX (in-memory DiGraph)
                       ↕ 讀寫
                    skill-graph.json (磁碟持久化)

hybrid_retrieval.py →  vector search (LanceDB) + graph expansion (NetworkX)

核心訴求:嵌入式、無伺服器、零 Docker。一個 uv run 就跑起來。

上一篇我評估了 Memgraph 和 HelixDB,結論是:200 nodes 不需要升級資料庫,用 Entity Embedding + kNN Graph 就夠了。

但讀者會問:那 Lance-graph 呢?它直接在 LanceDB 上跑 Cypher,不就是最完美的整合? 還有 FalkorDB 的矩陣加速呢? 這篇來完整回答。


三大候選人介紹

Lance-graph — LanceDB 原生的 Cypher 引擎

Lance-graph 是 LanceDB 團隊在 2025 年 10 月推出的開源專案(GitHub: lance-format/lance-graph),直接在 Lance tables 上執行 Cypher-like queries。

核心賣點

現狀(2026 Q1)

# Lance-graph 概念用法(基於目前公開 API)
import lance_graph

db = lance_graph.connect("lancedb://skills_table")
results = db.cypher("""
MATCH (s:Skill {name: 'Kubernetes'})-[]->(m:Skill)
RETURN m.name AS neighbor
""").to_pandas()

# Shortest path
path = db.cypher("""
MATCH p = shortestPath(
  (a:Skill {name: 'Docker'})-[*]-(b:Skill {name: 'Kubernetes'})
)
RETURN nodes(p)
""").to_pandas()

HelixDB — Rust 圖向量融合資料庫

HelixDB 是 YC 支持的新創專案,用 Rust 從頭寫的 graph + vector 融合資料庫。

核心賣點

現狀(2026 Q1)

# HelixDB 概念用法(基於 helix-py SDK)
import helix

client = helix.Client(local=True)

# 插入 entity(自動 embed)
client.query("upsert_skill", {
    "name": "Kubernetes",
    "description": "Container orchestration platform"
})

# Vector search
results = client.query("skill_search", {
    "query": "container management", "top_k": 5
})

# Graph traversal
neighbors = client.query("skill_neighbors", {
    "name": "Kubernetes", "depth": 2
})

FalkorDB — GraphBLAS 矩陣加速圖資料庫

FalkorDB(前身 RedisGraph)是基於 Redis 的高效能圖資料庫,用 GraphBLAS 稀疏矩陣做圖遍歷加速。

核心賣點

現狀(2026 Q1)

# FalkorDB 概念用法
from falkordb import FalkorDB

db = FalkorDB()
graph = db.select_graph("skills")

# 建立 entity
graph.query("""
CREATE (k:Skill {name: 'Kubernetes', embedding: $vec})
""", params={"vec": kubernetes_embedding})

# 鄰居查詢
result = graph.query("""
MATCH (s:Skill {name: 'Kubernetes'})-[r]->(t:Skill)
RETURN t.name, type(r)
""")

# Shortest path
result = graph.query("""
MATCH p = shortestPath(
  (a:Skill {name: 'Docker'})-[*]-(b:Skill {name: 'Kubernetes'})
)
RETURN [n IN nodes(p) | n.name] AS path
""")

全面比較

架構與部署

面向 Lance-graph HelixDB FalkorDB
底層 LanceDB columnar tables Rust + LMDB Redis module + GraphBLAS
部署方式 Embedded(pip install) Docker / local server Redis cluster / Docker
零 Docker
查詢語言 Cypher(subset) HelixQL(自創) openCypher(完整)
成熟度 新(2025.10) 早期(YC funded) Production ready

效能與規模

面向 Lance-graph HelixDB FalkorDB
Graph 效能 Columnar scan,大資料強 宣稱 1000x Neo4j GraphBLAS 矩陣,60k cmd/s
Vector 效能 LanceDB native(IVF_PQ/HNSW) 內建,媲美 Pinecone 需 Redis vector search
適合規模 億級 OK 中大型 中大型,低延遲最優
200 nodes 大材小用 大材小用 大材小用

Entity Embedding 支援

這是最關鍵的比較——我的 Entity Embedding Graph 方案 需要 skill nodes 自動 embed + 建邊:

面向 Lance-graph HelixDB FalkorDB
如何 embed LanceDB EmbeddingGenerator 內建 Embed(text) 外部 embedder
自動化 ✅ OpenAI/HF auto ✅ OpenAI/Gemini ❌ 手動處理
存放位置 Lance table 欄位 Node 屬性 Node 屬性
Similarity query Cypher + vector search SearchV(Embed(query)) 需額外 fulltext index

LightRAG 整合可行性

如果走 LightRAG 框架路線,這三個 DB 的整合難度差異很大。

LightRAG 的 Storage 架構

LightRAG 需要 4 種 storage:

各 DB 整合方式

Lance-graph + LightRAG

最順——因為 LanceDB 已經能當 VectorStorage,Lance-graph 直接當 GraphStorage:

class LanceGraphStorage(BaseGraphStorage):
    def __init__(self, uri):
        self.db = lance_graph.connect(uri)
    
    def add_triplets(self, entities, relations):
        for src, rel, dst in relations:
            self.db.cypher(f"""
            MERGE (a:Entity {{id: '{src}'}})
            MERGE (b:Entity {{id: '{dst}'}})
            MERGE (a)-[:{rel}]->(b)
            """)
    
    def query_neighbors(self, entity_id, depth=2):
        return self.db.cypher(f"""
        MATCH (n:Entity {{id: '{entity_id}'}})-[*1..{depth}]-(m)
        RETURN m.id, type(r) AS rel_type
        """).to_pandas()

優點:零資料遷移,vector + graph 同一個 Lance 格式。
風險:Cypher subset 可能不夠 LightRAG 的 complex traversal。

HelixDB + LightRAG

需要同時實作 Vector + Graph Storage(~100-200 行):

class HelixVectorStorage(BaseVectorStorage):
    def __init__(self, db_url="http://localhost:6969"):
        self.client = helix.Client(api_endpoint=db_url)
    
    async def upsert(self, data: dict[str, dict]):
        for id_, item in data.items():
            emb = await self.embedding_func([item["content"]])
            self.client.query("upsert_vector", {
                "id": id_, "vector": emb[0].tolist()
            })

    async def query(self, query: str, top_k: int):
        q_emb = await self.embedding_func([query])
        return self.client.query("knn_search", {
            "query": q_emb[0].tolist(), "top_k": top_k
        })

優點:一個 DB 搞定全部 storage,概念最乾淨。
風險:SDK 早期,HelixQL 學習成本,需定義 .hx schema。

FalkorDB + LightRAG

整合度最高——LightRAG 社群已有 PR 支援:

優點:幾乎開箱即用,Cypher 支援完整,LangChain 整合成熟。
風險:需要 Redis infrastructure,不是 embedded。

LightRAG 整合難度排名

DB 整合難度 程式碼量 現成支援
FalkorDB ~20 行配置 PR 已 merge
Lance-graph ~80 行 需自己寫
HelixDB 中高 ~150 行 需自己寫 + HelixQL schema

哪個取代 NetworkX 最無痛?

本質上,三個都能取代 NetworkX 的 neighbors()shortest_path()subgraph() 等操作:

NetworkX 操作 Lance-graph HelixDB FalkorDB
G.neighbors("K8s") MATCH (n)-[]->(m) HelixQL traversal MATCH (n)-[]->(m)
nx.shortest_path(G, a, b) shortestPath((a)-[*]-(b)) HelixQL path query shortestPath((a)-[*]-(b))
G.subgraph(nodes) WHERE n.name IN [...] HelixQL filter WHERE n.name IN [...]
json_graph.node_link_data(G) Lance table 自動持久化 LMDB 自動持久化 Redis 持久化

但真正的問題是:你需要取代嗎?

現在:                              取代後:
──────────────────────────────────  ──────────────────────────────────
10 行 Python code                  學 Cypher/HelixQL + 設定 DB
nx.neighbors("K8s")                db.cypher("MATCH...")
零依賴、零伺服器                    加一個 DB layer
JSON 檔案、git 追蹤                 DB binary 格式

遷移成本 vs 收益矩陣

條件 建議
200 nodes + 個人專案 ❌ 不值得換。NetworkX + LanceDB 夠了
1000+ nodes + 需要 Cypher ✅ Lance-graph(零資料遷移)
需要 vector + graph 一體查詢 ✅ HelixDB(等它穩定之後)
需要最低延遲 + production ✅ FalkorDB(成本是 Redis infra)
LightRAG pipeline + 已有 LanceDB ✅ Lance-graph(最順)
LightRAG + 最快上線 ✅ FalkorDB(已有 PR 支援)

我的選擇與路線圖

現在(2026 Q1)

保持:NetworkX + LanceDB + Entity Embedding kNN Graph
原因:200 nodes、零依賴、已經跑得好好的

觀望中(2026 Q2-Q3)

首選:Lance-graph
原因:
  1. 我已經用 LanceDB,零資料遷移
  2. Cypher 是標準語言,不是自創語法
  3. embedded 架構,不用 Docker
  4. scale up 時直接受益於 Lance columnar 效能

等什麼:
  - Python API 文件完善
  - Cypher 支援更完整(complex patterns)
  - 更多 production 案例(Uber 之外)

備選方案

HelixDB:概念最前衛(graph+vector 融合),但 HelixQL 學習成本高,
         等 production release 再評估。API 穩定度是最大風險。

FalkorDB:效能最強(GraphBLAS 矩陣運算),但需要 Redis cluster,
          不符合我的「零伺服器」原則。適合有 infra 團隊的企業場景。

給不同讀者的建議

🏠 個人知識庫(< 500 nodes)

別折騰資料庫。用 NetworkX + embedding kNN graph,改動 40 行 Python 就有 semantic graph。把時間花在優化 embedding 品質tuning similarity threshold 上,ROI 更高。

🚀 準備 scale 的 side project(1,000~10,000 nodes)

Lance-graph 是你的菜。如果已經用 LanceDB,加 graph schema 幾乎是免費的。Cypher 語法夠用,而且 columnar 格式讓你在 scale up 時不用擔心效能。

🏢 企業級 RAG pipeline

看你的 infra


延伸閱讀

參考資料


Career Knowledge Base 是一個本地優先的履歷知識庫系統,使用 Python + LanceDB + NetworkX + LangChain 建構。