docDB/README.md

73 lines
1.8 KiB
Markdown
Raw Normal View History

# @go/docDB
`docDB` 是一个独立的高级文档存储引擎,基于 `@go/tableDB` 构建,提供版本管理、流式上传及生命周期钩子。
## 📦 安装
```bash
go get apigo.cc/go/docDB
```
## 🛠 核心功能
1. **权限隔离**:完全继承 `tableDB` 的用户隔离体系。
2. **版本管控**:通过 `SetDoc` 强制提升文档版本,`SetMeta` 仅更新属性而不影响版本。
3. **流式上传**:支持 `io.Reader` 接口,低内存占用处理大文件落盘。
4. **事件驱动**:提供 `OnCreatedDoc`, `OnUpdatedDoc`, `OnRemoved` 钩子,方便集成搜索索引、异步处理等。
5. **结构化目录**:自动提取 Markdown 文档的目录树 (ToC)。
## 🚀 快速开始
### 初始化
```go
import (
"apigo.cc/go/docDB"
"apigo.cc/go/tableDB"
)
// 创建 DocDB 实例
db := tableDB.GetDB("sqlite://docs.db", logger)
docStore := docDB.New(db, "./storage")
// 授权并获取 App
app := docStore.Auth("user_123")
```
### 存储文档
```go
doc := &docDB.Document{
Path: "/projects/readme.md",
Title: "Getting Started",
TextContent: "# Hello World\n...",
BinaryContent: fileReader, // 可选,流式上传
}
// 保存文档 (版本提升)
err := app.SetDoc(doc)
```
### 更新元数据
```go
// 仅更新标签,不提升版本
err := app.SetMeta(docID, map[string]any{
"Tags": "tutorial,go",
})
```
### 监听事件
```go
docStore.OnCreatedDoc(func(doc *docDB.Document) {
fmt.Println("New doc created:", doc.ID)
// 可以在这里触发异步摘要生成或向量化
})
```
## 📝 注意事项
- **数据对齐**:内部强制将 `Document.ID` 对齐为 `tableDB` 约定的 `id` 字段。
- **无状态性**:不包含具体业务逻辑,如摘要生成、全文搜索等,推荐通过事件钩子实现。