oceanbase/seekdb
oceanbase/seekdb has 3,242 GitHub stars and 1,336 forks. GitHot measured +2 stars in 24 hours and +12 in 7 days. Last checked 2026-11-12 12:09 UTC. Last push 2026-11-02.
The AI-Native Search Database. Best for agent storage, it unifies vector, text, structured, and semi-structured data into a single engine. This all-in-one database makes agents smarter, easier to run, and more stable.
实测星标增长
- 24小时
- +2
- 7天
- +12
- 15天
- 更新延迟
- 1个月
- 更新延迟
各周期内的星标净变化,周期相互重叠,并非每日新增。缺失的测量保持空白。星标代表关注度,不代表软件质量。
README_CN.md
原文写入 · 搜索 · Fork · AI Agent 的状态存储
MySQL 兼容 · 嵌入式 / 服务器双模式 · 向量 + 全文混合搜索 · COW 沙箱
⚡ 流式写入 + 搜索达 1,523 QPS(10× Milvus,3× Elasticsearch)
🌿 FORK/MERGE 沙箱,Agent 安全探索、自由回滚
🔍 向量 + 全文 + 标量,一条 SQL 搞定
🐬 完整 ACID,MySQL 协议,原生对接 LangChain / LlamaIndex / Dify
30 秒体验 · 快速开始 · 嵌入式 SDK · 为什么选择 seekdb · 生态系统 · 开发
如果你觉得 seekdb 有用,请给一个 star — 让更多人发现这个项目。
⚡ 性能一览
⏱️ 30 秒体验
pip install -U pyseekdb # pyseekdb 是 seekdb 的 Python SDK
这个 Python 演示无需手动部署服务器、定义 Schema 或配置 Embedding。使用 Python、JavaScript 或 Go 运行本地数据库 →
✨ 为什么 AI Agent 要选择 seekdb?
🔥 流式写入 + 并发搜索,P99 零毛刺
Agent 工作负载的核心特征是持续写入 + 毫秒级读取。seekdb 的异步索引流水线(Change Stream) 将 DML 与索引构建解耦,两级 HNSW(增量 + 快照)让新写入的向量立即可搜索。
写入路径提交即返回,无需等待索引构建。Change Stream 流水线异步消费 redo 日志并更新增量 HNSW。查询同时命中增量索引和快照索引,通过细粒度读锁保证隔离 — 这就是高并发下 P99 依然平稳的关键。
实测结果:1,523 QPS,并发 P99 仅 21.7 ms — QPS 达 Milvus 的 10.7 倍;并发提升时 P99 波动仅 1.1 倍(同等负载下 ES / Milvus 约为 10 倍)。
源码: src/observer/change_stream/ · src/observer/vector_index/
🌿 写时复制沙箱,Agent 自由探索
FORK DATABASE 秒级完成整库快照 — 零数据拷贝。Agent 在沙箱中自由实验(写入、查询、甚至破坏表结构均可);随后 MERGE TABLE 将成果合并回主线,或 DROP DATABASE 一键丢弃。内核级 COW 实现,而非应用层的保存/恢复。
-- 秒级快照,无数据拷贝
FORK DATABASE agent_state TO agent_sandbox_42;
-- Agent 在沙箱中自由读写...
USE agent_sandbox_42;
INSERT INTO memory (session_id, embedding, content) VALUES (...);
-- 将成果合并回主线(策略:FAIL / THEIRS / OURS)
MERGE TABLE agent_sandbox_42.memory INTO agent_state.memory STRATEGY THEIRS;
-- ...或直接丢弃:
DROP DATABASE agent_sandbox_42;
源码: tools/deploy/mysql_test/test_suite/fork_table/
🔍 一条 SQL 完成混合搜索
向量 + 全文 + 标量过滤统一下推至同一执行计划。告别客户端 N+1 合并,告别胶水代码拼接结果。
SELECT id, title, l2_distance(emb, '[0.12,0.34,...]') AS dist
FROM docs
WHERE MATCH(content) AGAINST('quarterly report')
AND author_id = 42
AND created_at > '2026-01-01'
ORDER BY dist APPROXIMATE LIMIT 10;
🐬 MySQL 兼容、ACID、可嵌入
基于成熟的 OceanBase SQL 引擎构建。可作为嵌入式库、单节点服务器或 OceanBase 分布式集群运行。完整 ACID,实时写入,开箱即用的 MySQL 生态。
🎬 快速开始
嵌入式使用
通过 Python、Node.js 或 Go 在应用中使用本地 seekdb,无需手动部署数据库服务。数据保存在指定的本地目录中,再次打开即可继续使用。
🐍 Python
使用 pylibseekdb 启动本地 seekdb,再通过 PyMySQL 执行 SQL。需要 Python 3.11 或更高版本。
python3 -m pip install -U pylibseekdb pymysql
将下面的示例保存为 example.py。它通过 connection_options() 获取连接参数并传给 PyMySQL。上下文管理器会先关闭游标和 SQL 连接,再释放运行时句柄:
from contextlib import closing
import pylibseekdb
import pymysql
with closing(pylibseekdb.open("./seekdb.db")) as db:
options = db.connection_options()
with pymysql.connect(
database="test",
autocommit=True,
cursorclass=pymysql.cursors.DictCursor,
**options,
) as connection:
with connection.cursor() as cursor:
cursor.execute("SELECT 1 AS value")
print(cursor.fetchall())
运行后输出 [{'value': 1}]:
python3 example.py
如需更高层的 Collection API、文本 Embedding 和混合检索,可参考 pyseekdb。
🟨 JavaScript / TypeScript (Node.js)
使用 @oceanbase/seekdb-node 启动本地 seekdb,再通过 mysql2 执行 SQL。需要 Node.js 22 或更高版本,同时支持 JavaScript 和 TypeScript。
npm install @oceanbase/seekdb-node mysql2
请启用 npm 可选依赖,以自动安装匹配的原生运行时。该绑定管理独立的本地 seekdb 进程;释放运行时句柄前,先关闭 SQL 连接。
将下面的示例保存为 example.mjs(使用 ES modules,同时提供 TypeScript 类型声明):
import { seekdb } from "@oceanbase/seekdb-node";
import mysql from "mysql2/promise";
const db = await seekdb.open("./seekdb.db");
let connection;
try {
const endpoint = db.connectionOptions();
const location = endpoint.transport === "tcp"
? { host: endpoint.host, port: endpoint.port }
: { socketPath: endpoint.transport === "unix_socket"
? endpoint.unixSocket : endpoint.namedPipe };
connection = await mysql.createConnection({
...location,
user: endpoint.user,
password: "",
database: "test",
});
const [rows] = await connection.query("SELECT 1 AS value");
console.log(rows);
} finally {
try {
if (connection) await connection.end();
} finally {
db.close();
}
}
运行后输出 [ { value: 1 } ]:
node example.mjs
如需更高层的 JavaScript Collection API,可参考 seekdb-js。
🐹 Go
使用 seekdb-go 启动本地 seekdb,再通过 go-sql-driver/mysql 执行 SQL。本示例需要 Go 1.24 或更高版本、CGO_ENABLED=1 和 C 编译器。
mkdir seekdb-go-example
cd seekdb-go-example
go mod init example.com/seekdb-demo
将下面的示例保存为 main.go。示例使用 ConnectionOptions 返回的端点,并在释放运行时句柄前关闭 SQL 连接:
package main
import (
"database/sql"
"fmt"
"log"
"net"
"github.com/go-sql-driver/mysql"
seekdb "github.com/oceanbase/seekdb-go"
)
func main() {
if err := run(); err != nil {
log.Fatal(err)
}
}
func run() error {
db, err := seekdb.Open("./seekdb.db")
if err != nil {
return err
}
defer db.Close()
endpoint, err := db.ConnectionOptions()
if err != nil {
return err
}
cfg := mysql.NewConfig()
cfg.User, cfg.DBName = endpoint.User, "test"
switch endpoint.Transport {
case "unix_socket":
cfg.Net, cfg.Addr = "unix", endpoint.UnixSocket
case "tcp":
cfg.Net, cfg.Addr = "tcp", net.JoinHostPort(endpoint.Host, fmt.Sprint(endpoint.Port))
default:
return fmt.Errorf("unsupported transport %q", endpoint.Transport)
}
connection, err := sql.Open("mysql", cfg.FormatDSN())
if err != nil {
return err
}
defer connection.Close()
var value int
if err := connection.QueryRow("SELECT 1 AS value").Scan(&value); err != nil {
return err
}
fmt.Println(value)
return nil
}
运行时 Go 会自动解析依赖,并下载当前平台的原生包,输出 1:
go run -mod=mod .
常规的 seekdb-go go get 或 go mod tidy 可能下载所有支持平台的原生包。
这些示例均将数据保存在 ./seekdb.db,可以重复运行。该路径是数据库目录。首次初始化新目录通常比后续打开耗时更长。
部署服务器
☁️ 云服务(零安装)
一条 curl 命令,即刻获得运行中的数据库 — 无需注册,无需信用卡。
curl -X POST https://d0.seekdb.ai/api/v1/instances
免费使用 7 天。了解更多 →
🐳 Docker(快速测试)
docker run -d \
--name seekdb \
-p 2881:2881 \
-p 2886:2886 \
-v ./data:/var/lib/oceanbase \
oceanbase/seekdb:latest
请参考此 Docker 镜像的文档获取详细信息。
📦 二进制文件(独立安装)
# Linux(一键安装,可能需要 sudo)
curl -fsSL https://obportal.s3.ap-southeast-1.amazonaws.com/download-center/opensource/seekdb/seekdb_install.sh | bash
# macOS(Homebrew)
brew tap oceanbase/seekdb
brew install seekdb
DEB/RPM 离线安装和配置详情请参见部署文档。
📝 更多示例
首次使用请先运行上面的 Python、JavaScript 和 Go 示例。下面的应用模式假设你已有 Agent 实现。
🤖 Agent 记忆模式(持续写入 + 即时检索)
Agent 的经典循环:写入一条观察,毫秒后检索相关上下文,周而复始。seekdb 的异步索引流水线确保在持续并发下读写两端均保持高吞吐。
import pyseekdb
client = pyseekdb.Client(path="./agent_state.db")
memory = client.get_or_create_collection(name="episodic")
for step in agent.run():
# 持久化观察结果
memory.upsert(ids=[step.id], documents=[step.observation])
# 检索相关上下文 — 写入后毫秒级返回,
# 由增量 HNSW 提供服务(无需等待后台重建)
relevant = memory.query(query_texts=step.next_query, n_results=5)
agent.act(relevant)
🗄️ SQL — Schema + 混合搜索
-- 包含向量列、全文索引和 HNSW 向量索引的表
CREATE TABLE articles (
id INT PRIMARY KEY,
title TEXT,
content TEXT,
embedding VECTOR(384),
FULLTEXT INDEX idx_fts (content) WITH PARSER ik,
VECTOR INDEX idx_vec (embedding) WITH (DISTANCE=l2, TYPE=hnsw, LIB=vsag)
) ORGANIZATION = HEAP;
-- 混合搜索:向量相似度 + 全文匹配在一条查询中完成
SELECT id, title,
l2_distance(embedding, '[0.12, 0.34, ...]') AS dist
FROM articles
WHERE MATCH(content) AGAINST('quarterly report')
ORDER BY dist APPROXIMATE
LIMIT 10;
Python 开发者可通过 SQLAlchemy 或任何 MySQL 驱动来访问。
📚 使用场景
🎯 Agent AI — 记忆、沙箱与状态
Agent 需要一个能够支撑持续写入记忆、毫秒级检索、分支探索以及出错即回滚的状态存储。seekdb 正是为此而生:
- 流式友好 — 写入即可查,毫秒级可见
- COW 沙箱 —
FORK DATABASE安全实验,MERGE接受成果,DROP一键回滚 - 混合检索 — 向量 + 全文 + 结构化,一条 SQL 搞定
- MySQL 协议 — 原生兼容 LangChain、LlamaIndex、Dify
个人助手 · 企业自动化 · 垂直领域 Agent · Agent 平台
🧩 其他使用场景
seekdb 的混合检索 + 多模引擎同样适用于经典 AI 工作负载:
- 📖 RAG 与知识检索 — 向量 + 全文 + 标量过滤,支持多级访问控制。企业问答、客服、行业洞察、个人知识库。
- 🔍 语义搜索 — 基于嵌入向量的文本、图像及多模态搜索。商品搜索、以文搜图、以图搜商品。
- 💻 AI 辅助编程 — 语义代码搜索、多项目隔离、时间旅行查询,适用于 IDE 插件和代码 Agent。本地 IDE、Web IDE、设计转代码。
- ⬆️ 企业应用智能化 — MySQL 兼容的 AI 层,适用于遗留系统,支持行列混合存储。文档智能、业务洞察、金融系统。
- 📱 端侧与边缘 AI — 嵌入式/微服务器模式,适用于资源受限设备。车载系统、AI 教育、伴侣机器人、医疗设备。
🌟 生态系统与集成
+ Camel-AI · DB-GPT · FastGPT · Firecrawl · Spring-AI-Alibaba · Cloudflare Workers AI · Jina AI · Ragas · Instructor · Baseten — 完整列表请参见用户指南。
🌐 下一步与社区
- 📖 阅读文档 → — 快速开始、API 参考、集成指南
- 📝 发布博客 → — Milvus 10.7 倍 QPS 背后的架构
- 🐛 提交 Issue → — 报告 Bug、请求功能
- 🤝 参与贡献 → — 共建 Agent 时代的状态存储
🛠️ 开发
从源码构建
构建之前,请先根据操作系统安装所需的工具链和依赖。详见安装工具链。
# 克隆仓库
git clone https://github.com/oceanbase/seekdb.git
cd seekdb
./build.py init
./build.py build seekdb
mkdir -p ~/seekdb/bin
cp build/bin/src/observer/seekdb ~/seekdb/bin
cd ~/seekdb
./bin/seekdb
本例中工作目录为 $HOME/seekdb,请使用一个全新的空目录进行测试。详细说明请参见开发者指南。
贡献
我们欢迎贡献!请查看贡献指南开始。
📈 Star 历史
如果 seekdb 对你有帮助,点个 star 帮助更多人发现它。 ⭐
📄 许可证
seekdb 由 OceanBase 团队打造 — 与支付宝、淘宝、滴滴、小米等生产环境中运行的数据库同源同核。完全开源,采用 Apache License, Version 2.0 许可证。
探索相关项目
Asabeneh/30-Days-Of-Python
30 Days of Python 编程挑战是一份循序渐进的指南,用于在 30 天内学习 Python 编程语言。这项挑战可能需要超过 100 天。请按自己的节奏进行。这些视频或许也有帮助:https://www.youtube.com/channel/UC7PNRuno1rzYPb1xLa4yktw
78,618 星标grafana/grafana
开放且可组合的可观测性与数据可视化平台。可对来自 Prometheus、Loki、Elasticsearch、InfluxDB、Postgres 等众多数据源的指标、日志和追踪进行可视化。
77,859 星标redis/redis
对于正在构建实时数据驱动应用的开发者而言,Redis 是首选、速度最快且功能最丰富的缓存、数据结构服务器和文档与向量查询引擎。
77,472 星标apache/superset
Apache Superset 是一个数据可视化与数据探索平台
75,495 星标