docDB/README.md

1.8 KiB

@go/docDB

docDB 是一个独立的高级文档存储引擎,基于 @go/tableDB 构建,提供版本管理、流式上传及生命周期钩子。

📦 安装

go get apigo.cc/go/docDB

🛠 核心功能

  1. 权限隔离:完全继承 tableDB 的用户隔离体系。
  2. 版本管控:通过 SetDoc 强制提升文档版本,SetMeta 仅更新属性而不影响版本。
  3. 流式上传:支持 io.Reader 接口,低内存占用处理大文件落盘。
  4. 事件驱动:提供 OnCreatedDoc, OnUpdatedDoc, OnRemoved 钩子,方便集成搜索索引、异步处理等。
  5. 结构化目录:自动提取 Markdown 文档的目录树 (ToC)。

🚀 快速开始

初始化

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")

存储文档

doc := &docDB.Document{
    Path: "/projects/readme.md",
    Title: "Getting Started",
    TextContent: "# Hello World\n...",
    BinaryContent: fileReader, // 可选,流式上传
}

// 保存文档 (版本提升)
err := app.SetDoc(doc)

更新元数据

// 仅更新标签,不提升版本
err := app.SetMeta(docID, map[string]any{
    "Tags": "tutorial,go",
})

监听事件

docStore.OnCreatedDoc(func(doc *docDB.Document) {
    fmt.Println("New doc created:", doc.ID)
    // 可以在这里触发异步摘要生成或向量化
})

📝 注意事项

  • 数据对齐:内部强制将 Document.ID 对齐为 tableDB 约定的 id 字段。
  • 无状态性:不包含具体业务逻辑,如摘要生成、全文搜索等,推荐通过事件钩子实现。