HelixDB:基于对象存储的图数据库
用对象存储构建的图数据库新方案。针对特定场景有用,但适用面有限。
用对象存储构建的图数据库新方案。针对特定场景有用,但适用面有限。
HelixDB:面向知识图谱和 AI memory 的图向量数据库,使用 Rust 从零构建。
网站 | 文档 | Discord | X/Twitter
HelixDB 是一个数据库平台,让你可以轻松构建 AI 应用所需的全部组件。
你不再需要单独部署应用数据库、关系型数据库、向量数据库、图数据库,也不需要通过应用层管理多个存储位置。HelixDB 让你的 Agent 能够统一访问公司数据,用于实现 memory、企业大脑和各种应用。
Helix 主要采用图 + 向量数据模型,同时也支持 KV、文档和关系型数据。
Helix CLI 用于运行和管理本地实例,并与 Helix Cloud 通信。
curl -sSL "https://install.helix-db.com" | bash
已经安装?运行 helix update 即可更新到最新版本。
helix chef 是一个交互式的一次性引导工具。它会安装 HelixDB 查询 skills 和文档 MCP、创建项目脚手架、启动本地实例、写入一些示例数据,并生成一个 HELIX_CHEF_PROMPT.md 文件。如果检测到可用的 coding agent(Claude Code、Codex 或 OpenCode),它还能将任务交给 Agent,仅根据你用一句话描述的需求,构建出一个可以正常运行的完整应用——包括前端在内。
helix chef
就这么简单——不需要任何 flags。回答“你想构建什么?”,然后按照提示操作即可。
如果你更愿意自行完成配置:
初始化一个项目。该命令会创建 helix.toml、.helix/ 工作目录,以及一个可以直接运行的 examples/request.json。
mkdir my-helix-app && cd my-helix-app
helix init
启动本地实例。该命令会在端口 6969 上运行一个后台容器,并等待实例能够接收查询。
helix start dev
⚠️ 默认存储模式为内存存储——停止实例后,其中的数据会被清空。使用 helix start dev --disk 可以让数据在实例重启后继续保留;也可以使用 --foreground 实时输出日志。
helix query dev --file examples/request.json
使用完毕后停止实例。
helix stop dev
查询可以通过 Rust、TypeScript、Go 或 Python DSL 编写,并作为动态请求直接发送到运行中的实例,对 POST /v1/query 发起调用——不需要构建或部署步骤。所有 SDK 都会生成相同的 JSON AST。下面的示例连接到 http://localhost:6969 上的本地实例,这是运行 helix start dev 时使用的默认端口。完整的 builder 列表和动态查询传输格式,请参阅《查询指南》。
安装 crate(发布名称为 helix-db,导入名称为 helix_db):
cargo init && cargo add helix-db tokio sonic-rs
将查询定义为带有 #[register] 的函数,然后通过 client 直接运行:
use helix_db::Client;
use helix_db::dsl::prelude::*;
#[register]
pub fn add_user(name: String) {
write_batch()
.var_as(
"user",
g().add_n("User", vec![("name", name)])
.value_map(None::<Vec<String>>),
)
.returning(["user"])
}
#[register]
pub fn get_user(name: String) {
read_batch()
.var_as(
"user",
g().n_with_label("User")
.where_(Predicate::eq("name", name))
.value_map(None::<Vec<String>>),
)
.returning(["user"])
}
#[tokio::main]
async fn main() {
let client = Client::new(None).unwrap(); // defaults to http://localhost:6969
// add user
let new_user = client
.query::<sonic_rs::Value>()
.dynamic(add_user("John Doe".to_string()))
.send()
.await
.unwrap();
println!("new user: {:#}", sonic_rs::to_string_pretty(&new_user).unwrap());
// get user
let user = client
.query::<sonic_rs::Value>()
.dynamic(get_user("John Doe".to_string()))
.send()
.await
.unwrap();
println!("user: {:#}", sonic_rs::to_string_pretty(&user).unwrap());
}
安装 package(需要 Node.js 20+):
npm init -y && npm install @helix-db/helix-db
将查询定义为函数,然后通过 POST 请求发送到运行中的实例:
import {
Predicate, PropertyInput, PropertyProjection,
defineParams, g, param, readBatch, writeBatch,
} from "@helix-db/helix-db";
const addUserParams = defineParams({ name: param.string() });
function addUser(p = addUserParams) {
return writeBatch()
.varAs("user",
g().addN("User", { name: PropertyInput.param("name") })
.project([PropertyProjection.new("name")]),
)
.returning(["user"]);
}
const getUserParams = defineParams({ name: param.string() });
function getUser(p = getUserParams) {
return readBatch()
.varAs("user",
g().nWithLabel("User")
.where(Predicate.eqParam("name", "name"))
.project([PropertyProjection.new("name")]),
)
.returning(["user"]);
}
const HELIX_URL = "http://localhost:6969/v1/query";
// add user
const newUser = await fetch(HELIX_URL, {
method: "POST",
headers: { "content-type": "application/json" },
body: addUser().toDynamicJson(addUserParams, { name: "John Doe" }),
}).then((r) => r.json());
console.log("new user:", newUser);
// get user
const user = await fetch(HELIX_URL, {
method: "POST",
headers: { "content-type": "application/json" },
body: getUser().toDynamicJson(getUserParams, { name: "John Doe" }),
}).then((r) => r.json());
console.log("user:", user);
从该代码仓库安装 package:
pip install -e sdks/python
使用 snake_case builder 构建动态请求,然后通过 client 发送:
from helixdb import Client, Predicate, g, param, define_params, read_batch, write_batch
add_user_params = define_params({"name": param.string()})
add_user = (
write_batch()
.var_as("user", g().add_n("User", {"name": add_user_params.name}))
.returning(["user"])
)
get_user_params = define_params({"name": param.string()})
get_user = (
read_batch()
.var_as(
"user",
g()
.n_with_label("User")
.where(Predicate.eq("name", get_user_params.name))
.value_map(["name"]),
)
.returning(["user"])
)
client = Client("http://localhost:6969")
new_user = client.query().dynamic(
add_user.to_dynamic_request(add_user_params, {"name": "John Doe"})
).send()
print("new user:", new_user)
user = client.query().dynamic(
get_user.to_dynamic_request(get_user_params, {"name": "John Doe"})
).send()
print("user:", user)
HelixDB Cloud 是一种以对象存储为基础的部署方案,集成了向量搜索和全文搜索,支持完整的 ACID 事务,采用单 writer 与自动扩缩容 reader 节点的架构,并提供高可用能力(3 个以上的 gateway 和 DB 节点)。Cloud cluster 与本地实例使用不同的部署流程:
helix auth login # authenticate
helix workspace switch <workspace> # select workspace + project
helix project switch <project>
helix init cloud --cluster-id <cluster-id> # or: helix add cloud --name production --cluster-id <id>
helix sync production # pull gateway URL + auth contract into helix.toml
helix query production --file examples/request.json
HelixDB 提供分布式、高可用的托管服务。如果你有兴趣使用 Helix 托管服务,可以前往我们的网站开始使用,也可以联系我们,与创始人交流。
📚 文档 · 查询指南