Fluree DB(GitHub 仓库)

TLDR AI 工具

摘要

Fluree DB 是一个开源的时间图数据库,具有类似 Git 的分支、集成的向量/文本/地理搜索、细粒度的访问控制,并支持 SPARQL、JSON-LD 和 Open Cypher。它针对 AI 代理记忆进行了优化,在十亿级图上实现了高性能。

Fluree DB 是一个为数据提供集成向量、文本和地理搜索的图数据库。
查看原文
查看缓存全文

缓存时间: 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 边上附加 rolesince 日期,在声明上附加 sourceconfidence。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.1JSON-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 IcebergR2RML 关系映射
存储后端内存、文件、AWS S3 + DynamoDB、IPFS
复制实例间克隆、推送、拉取
分支分叉账本、独立提交历史
可观测性OpenTelemetry 追踪、结构化日志
验证SHACL 形状约束

文档

有关文档和更多信息,请访问 labs.flur.ee/docs(https://labs.flur.ee/docs)。完整文档也位于 docs/ 目录:

许可证

根据 Business Source License 1.1 许可,其更改日期为该文件中指定的 Apache License 2.0。

相似文章

Show HN: HelixDB – 基于对象存储的图数据库

Hacker News Top

HelixDB 是一个用 Rust 构建的图-向量数据库,专为知识图谱和 AI 记忆设计,提供统一平台支持图、向量、键值、文档和关系型数据模型,并配有便于本地和云端部署的工具。

用于分析的纯 Clojure 列式数据库

Lobsters Hottest

Flatiron 是一个纯 Clojure 的列式分析库,用于内存表,具有类似 SQL 的 DSL,专为使用原始数组和批处理的高性能而设计。