Fluree DB(GitHub 仓库)
摘要
Fluree DB 是一个开源的时间图数据库,具有类似 Git 的分支、集成的向量/文本/地理搜索、细粒度的访问控制,并支持 SPARQL、JSON-LD 和 Open Cypher。它针对 AI 代理记忆进行了优化,在十亿级图上实现了高性能。
查看缓存全文
缓存时间: 2026/06/24 13:43
fluree/db 来源:https://github.com/fluree/db
Fluree DB - 为重要数据而生的图数据库。具备时序性、可验证性、符合标准、类 Git 的分支与合并,并为 AI 智能体优化。集成向量、文本和地理空间搜索,且无需外部依赖即可实现细粒度访问控制。支持 RDF 1.1 / 1.2、Open Cypher 预览版(https://github.com/fluree/db/pull/1361)、SPARQL 和 JSON-LD 查询(包括历史查询及其他 Fluree 特性扩展)。在普通硬件上可处理数十亿条图事实。批量导入速度超过 200 万条事实/秒。基准测试领先(https://labs.flur.ee),比第二名数据库快 10.4 倍。在完整的 215 亿三元组 Wikidata 数据集上,所有 850/850 个 WGPB 图模式查询均完成,几何平均时间为 43 毫秒。
[!注意] Fluree Memory — 是 Fluree DB CLI 的一部分。 为 AI 编码助手提供持久化、可搜索的记忆。为 Claude Code、Cursor 及其他 AI 工具提供长期项目记忆:事实、决策和偏好可在会话间持久化于您控制的 Fluree 账本中——按仓库或用户限定范围,并可通过 git 共享。 Fluree Memory 文档 → (https://labs.flur.ee/docs)
安装
云/无服务器 — 在 flur.ee 上以免费的无服务器堆栈运行(https://flur.ee/solo)(有限制使用量),根据需要按需启动独立服务器。与本地 fluree CLI 无缝交互(安装说明见下文)。
Docker — 预配置的 HTTP 服务器,准备好在 8090 端口接受查询。适用于试用 API 或将 Fluree 作为服务运行。
docker run -p 8090:8090 fluree/server:latest
Homebrew、Shell 安装器或 Windows PowerShell — 安装 fluree 二进制文件,它同时包含 CLI 和嵌入式服务器(fluree server run)。
# Homebrew (macOS / Linux)
brew install fluree/tap/fluree
# Shell 安装器 (macOS / Linux)
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/fluree/db/releases/latest/download/fluree-db-cli-installer.sh | sh
# Windows (PowerShell)
irm https://github.com/fluree/db/releases/latest/download/fluree-db-cli-installer.ps1 | iex
预构建二进制文件和每个版本的变更日志位于 GitHub Releases 页面(https://github.com/fluree/db/releases)。
60 秒内从零到图
fluree init
fluree create movies
fluree insert '
@prefix schema: <http://schema.org/> .
@prefix ex: <http://example.org/> .
ex:blade-runner a schema:Movie ;
schema:name "Blade Runner" ;
schema:dateCreated "1982-06-25"^^<http://www.w3.org/2001/XMLSchema#date> ;
schema:director ex:ridley-scott .
ex:ridley-scott a schema:Person ;
schema:name "Ridley Scott" .
ex:alien a schema:Movie ;
schema:name "Alien" ;
schema:dateCreated "1979-05-25"^^<http://www.w3.org/2001/XMLSchema#date> ;
schema:director ex:ridley-scott .
'
fluree query --format table 'SELECT ?title ?date WHERE { ?movie a <http://schema.org/Movie> ; <http://schema.org/name> ?title ; <http://schema.org/dateCreated> ?date . } ORDER BY ?date'
┌──────────────┬────────────┐
│ title │ date │
├──────────────┼────────────┤
│ Alien │ 1979-05-25 │
│ Blade Runner │ 1982-06-25 │
└──────────────┴────────────┘
这是一条 SPARQL 查询。相同的查询用 JSON-LD 表示:
fluree query --jsonld '{
"@context": {
"schema": "http://schema.org/"
},
"select": ["?title", "?date"],
"where": [
{ "@id": "?movie", "@type": "schema:Movie", "schema:name": "?title", "schema:dateCreated": "?date" }
],
"orderBy": "?date"
}'
两种语言访问相同的引擎——相同的功能,相同的性能。
现在更新数据并查询过去:
# 给所有雷德利·斯科特的电影添加类型
fluree update '
PREFIX schema: <http://schema.org/>
PREFIX ex: <http://example.org/>
INSERT { ?movie schema:genre "sci-fi" }
WHERE { ?movie schema:director ex:ridley-scott }
'
# 那次更新之前的数据是怎样的?
fluree query --at 1 'SELECT ?title ?genre WHERE { ?movie a <http://schema.org/Movie> ; <http://schema.org/name> ?title . OPTIONAL { ?movie <http://schema.org/genre> ?genre } }'
# → Blade Runner (无类型), Alien (无类型)
# 现在呢?
fluree query 'SELECT ?title ?genre WHERE { ?movie a <http://schema.org/Movie> ; <http://schema.org/name> ?title . OPTIONAL { ?movie <http://schema.org/genre> ?genre } }'
# → Blade Runner "sci-fi", Alien "sci-fi"
每次更改都被保留。通过交易编号、ISO 时间戳或内容寻址的提交 ID,可以查询历史中的任意时间点。
Fluree 的与众不同之处
时间旅行
每次交易都是不可变的。查询数据在任何时间点的状态——通过交易编号、ISO-8601 时间戳或内容寻址的提交 ID。无需特殊表,无需缓慢变化的维度。这一切都内置在存储模型中。
fluree query --at 2024-06-15T00:00:00Z 'SELECT * WHERE { ?s ?p ?o }'
属性图与边注释
将属性附加到关系而不仅仅是节点——在 worksFor 边上附加 role 和 since 日期,在声明上附加 source 和 confidence。Fluree 实现了 RDF 1.2 / SPARQL 1.2 注释语法,因此您可以获得带标签的属性图边、同一对节点之间的并行关系,以及单表面上的 RDF-star 语句级溯源。普通三元组查询保持不变——注释仅在您请求时才改变基数。
# 将元数据附加到边本身,而不是 Alice 或 Acme
INSERT DATA {
ex:alice ex:worksFor ex:acme {| ex:role "Engineer" ; ex:since 2024 |} .
}
# 同时匹配边及其元数据
SELECT ?role ?since WHERE {
ex:alice ex:worksFor ex:acme {| ex:role ?role ; ex:since ?since |} .
}
同样的结构也可通过 JSON-LD 的 @annotation 使用,包括在命名图中的边上。了解更多:边注释概念、边注释食谱。
集成搜索
BM25 全文搜索和 HNSW 向量相似度内置于查询引擎中——而不是外部附加的服务。搜索结果像其他任何图模式一样参与连接、过滤和聚合。
{
"@context": { "ex": "http://example.org/" },
"from": "mydb:main",
"where": [
{ "@id": "?doc", "ex:title": "?title" },
["bind", "?score", "(fulltext ?title \"knowledge graph\")"]
],
"select": ["?doc", "?title", "?score"],
"orderBy": [["desc", "?score"]],
"limit": 10
}
对于专用的 BM25 / HNSW 图源,同一查询引擎驱动 f:graphSource / f:searchText / f:queryVector 模式,并可由嵌入式索引或远程 fluree-search-httpd 服务支持。了解更多:BM25 全文、向量搜索、搜索食谱。
类 Git 的数据管理
分支、变基、合并、推送、拉取——与开发者已用于代码的相同工作流程,应用于数据。分叉数据集以进行实验,不影响生产环境。准备就绪时合并。变基以跟上上游更改。每个分支都有独立的提交历史。
fluree branch create experiment
fluree use mydb:experiment
# ... 安全地进行更改 ...
fluree branch rebase experiment # 跟上主分支
fluree branch merge experiment # 快进合并到主分支
fluree branch drop experiment # 清理
三元组级访问控制
策略是账本中的数据,在查询和交易时强制执行。用户只能看到他们被授权看到的内容——不是行,不是表,而是单个事实。无需应用层过滤。请参阅策略执行了解模型,策略食谱查看实际示例,以及策略模型与输入查看参考。
推理与推断
RDFS 子类/子属性推理、OWL 2 RL 前向链接以及用户定义的 Datalog 规则。数据库可以推断出您未显式存储的事实。了解更多:推理与推断、OWL & RDFS 支持参考、Datalog 规则。
标准优先
完全支持 SPARQL 1.1,在 W3C 测试套件中零合规失败。原生 JSON-LD 用于惯用的 JSON API。两种查询语言访问相同的引擎,具有相同的能力——时间旅行、策略、图源等。了解更多:SPARQL 参考、JSON-LD 查询参考、标准与功能标志。
值得了解的其它内容
- SHACL 验证 — 在交易时强制执行的声明式形状约束,按目标、按属性报告违规。
- OWL 本体导入 — 通过
f:schemaSource+owl:imports将外部词汇表拉入账本,在提交时实例化。 - Apache Iceberg / R2RML — 将 Parquet 数据仓库和关系存储作为一级图源进行查询,与原生 Fluree 数据并行。
按您的方式使用
CLI — 在终端中探索数据、编写脚本管道、管理账本。
fluree query -f report.rq --format csv > output.csv
HTTP 服务器 — 运行 fluree server 以获得带有 OIDC 认证、内容协商和 OpenTelemetry 的生产级 API。
fluree server run
curl -X POST http://localhost:8090/v1/fluree/query?ledger=mydb:main \
-H "Content-Type: application/sparql-query" \
-d 'SELECT ?s ?p ?o WHERE { ?s ?p ?o } LIMIT 10'
Rust 库 — 直接将 Fluree 嵌入您的应用程序。无需服务器进程。
let fluree = FlureeBuilder::memory().build_memory();
fluree.create_ledger("mydb").await?;
let result = fluree.graph("mydb:main")
.query()
.sparql("SELECT ?s WHERE { ?s a <http://schema.org/Movie> }")
.execute()
.await?;
MCP 服务器 — 通过模型上下文协议将 Fluree 暴露给 AI 助手。
fluree mcp serve
# stdio 传输,适用于 Claude Desktop、Cursor 等。
能力
| 查询语言 | SPARQL 1.1、JSON-LD 查询 |
| 数据格式 | JSON-LD、Turtle、TriG、N-Triples、N-Quads |
| 边注释 | 属性图边与语句级元数据(RDF 1.2 / SPARQL 1.2) |
| 时间旅行 | 交易编号、ISO 时间戳、提交 ID |
| 全文搜索 | 集成 BM25 与 Block-Max WAND |
| 向量搜索 | 嵌入式 HNSW 或远程服务 |
| 推理 | RDFS、OWL 2 QL、OWL 2 RL、Datalog 规则 |
| 访问控制 | 三元组级策略执行 |
| 地理空间 | GeoSPARQL、S2 单元格索引 |
| 可验证性 | JWS 签名的交易、可验证凭证 |
| 数据源 | Apache Iceberg、R2RML 关系映射 |
| 存储后端 | 内存、文件、AWS S3 + DynamoDB、IPFS |
| 复制 | 实例间克隆、推送、拉取 |
| 分支 | 分叉账本、独立提交历史 |
| 可观测性 | OpenTelemetry 追踪、结构化日志 |
| 验证 | SHACL 形状约束 |
文档
有关文档和更多信息,请访问 labs.flur.ee/docs(https://labs.flur.ee/docs)。完整文档也位于 docs/ 目录:
- 入门 — 安装、创建账本、写入和查询数据
- 面向 SQL 开发者的 Fluree — 来自关系型数据库?从这里开始
- 端到端教程 — 使用搜索、时间旅行、分支和策略构建知识库
- 概念 — 时间旅行、图源、策略、可验证数据
- 指南 — 搜索、时间旅行、分支、策略和SHACL 验证的实用食谱
- 查询语言 — SPARQL 和 JSON-LD 查询参考
- 交易 — 插入、更新、更新模式
- CLI 参考 — 所有命令和选项
- HTTP API — 服务器端点和认证
- 操作 — 配置、部署、遥测
- 贡献指南 — 从源码构建、运行测试、PR 工作流程
- 基准测试 — 运行、理解和添加性能基准
许可证
根据 Business Source License 1.1 许可,其更改日期为该文件中指定的 Apache License 2.0。
相似文章
Show HN: HelixDB – 基于对象存储的图数据库
HelixDB 是一个用 Rust 构建的图-向量数据库,专为知识图谱和 AI 记忆设计,提供统一平台支持图、向量、键值、文档和关系型数据模型,并配有便于本地和云端部署的工具。
用于分析的纯 Clojure 列式数据库
Flatiron 是一个纯 Clojure 的列式分析库,用于内存表,具有类似 SQL 的 DSL,专为使用原始数组和批处理的高性能而设计。
@daleverett: https://x.com/daleverett/status/2055332581659566288
pgGraph 是一个高性能、开源图遍历扩展,专为 PostgreSQL 设计,使用 Rust 编写,旨在让 AI 代理能够快速执行关系查询,而无需将数据迁移到单独的图数据库中。
我不再与AI记忆问题对抗,而是开始对其建模
作者详细讲述了从平面向量存储转向图数据库(FalkorDB)以构建AI记忆的过程,在其LocalClaw项目中实现了多跳推理、时间查询和溯源追踪。
如果AI记忆像人脑而非向量数据库那样工作会怎样?
介绍FERNme,这是一个面向AI智能体的开源记忆层,使用模糊Hebbian图模拟联想记忆,支持零LLM写入、持久化、遗忘及用户所有权等功能。