Files
pipelinedb/examples/auto-processing
Pipeline Database db6721300a
Some checks failed
CI Pipeline / 测试和基准测试 (1.24.x) (push) Failing after 4s
CI Pipeline / 测试和基准测试 (1.25.x) (push) Failing after 4s
CI Pipeline / 构建验证 (amd64, darwin) (push) Has been skipped
CI Pipeline / 构建验证 (amd64, linux) (push) Has been skipped
CI Pipeline / 构建验证 (amd64, windows) (push) Has been skipped
CI Pipeline / 构建验证 (arm64, darwin) (push) Has been skipped
CI Pipeline / 构建验证 (arm64, linux) (push) Has been skipped
CI Pipeline / 安全扫描 (push) Failing after 4s
CI Pipeline / 代码质量检查 (push) Failing after 4s
CI Pipeline / 性能回归测试 (push) Has been skipped
CI Pipeline / 通知 (push) Failing after 1s
更新自动处理示例和忽略测试目录
- 更新 examples/auto-processing/main.go 中的示例代码
- 在 .gitignore 中添加 examples/test-empty/ 目录忽略规则
2025-09-30 18:40:19 +08:00
..
2025-09-30 17:48:28 +08:00
2025-09-30 17:48:28 +08:00
2025-09-30 17:48:28 +08:00

自动处理示例

这个示例展示了如何使用 Pipeline Database 的自动处理功能,实现数据的自动状态流转:Hot → Warm → Cold

🎯 功能特性

📋 自动处理流程

  1. 数据插入 - 数据以 Hot 状态插入
  2. 自动预热 - 定时将 Hot 数据转为 Warm 状态
  3. 自动处理 - 定时将 Warm 数据转为 Cold 状态
  4. 组完成回调 - 组内所有数据处理完成后的回调
  5. 系统监控 - 实时监控 CPU 和内存使用情况

🔧 自定义处理器

  • WillWarm - Hot → Warm 转换时的处理逻辑
  • WillCold - Warm → Cold 转换时的处理逻辑
  • OnComplete - 组完成时的回调处理

🚀 运行示例

# 在项目根目录运行
make run-auto

# 或者直接运行
cd examples/auto-processing
go run main.go

📊 示例输出

🚀 Pipeline Database - 自动处理示例
=====================================
📂 数据库文件: /tmp/auto_processing_xxx.db
⚙️ 配置: 预热间隔=2s, 处理间隔=3s, 批大小=5

🔄 启动自动处理...
📊 自动处理已启动,按 Ctrl+C 停止...
🔍 观察数据的自动状态流转: Hot → Warm → Cold

📥 插入数据 - 组: orders, ID: 1, 数据: 订单数据_1
📥 插入数据 - 组: users, ID: 1, 数据: 用户数据_2
📥 插入数据 - 组: products, ID: 1, 数据: 产品数据_3

🔥 [AutoProcessor] 预热处理 - 组: orders, 数据: 订单数据_1
✅ [AutoProcessor] 预热完成 - 组: orders, 处理后: WARM_订单数据_1

❄️ [AutoProcessor] 冷却处理 - 组: orders, 数据: WARM_订单数据_1
✅ [AutoProcessor] 冷却完成 - 组: orders, 处理后: COLD_WARM_订单数据_1

📊 ===== 当前状态 =====
📈 总记录数: 10, 总组数: 3
  📋 orders: 🔥Hot:2 🌡Warm:1 ❄Cold:1 (总:4)
  📋 users: 🔥Hot:3 🌡Warm:0 ❄Cold:0 (总:3)  
  📋 products: 🔥Hot:3 🌡Warm:0 ❄Cold:0 (总:3)
========================

💻 ===== 系统资源监控 =====
🖥️  CPU 核心数: 14
🧵 Goroutines: 8
📊 内存使用:
   💾 已分配: 2.45 MB
   🏠 堆内存: 2.45 MB
   📚 栈内存: 0.06 MB
   🌐 系统内存: 12.34 MB
🗑️  垃圾回收:
   🔄 GC 次数: 3
   ⏱️  最近暂停: 0.12 ms
   📈 GC CPU 占比: 0.01%
📦 对象统计:
   🆕 分配对象数: 15432
   🗑️  释放对象数: 12890
   📊 存活对象数: 2542
============================

⚙️ 配置说明

config := &pipelinedb.Config{
    CacheSize:       50,                    // 页面缓存大小
    WarmInterval:    2 * time.Second,       // 预热间隔每2秒检查一次Hot数据
    ProcessInterval: 3 * time.Second,       // 处理间隔每3秒检查一次Warm数据
    BatchSize:       5,                     // 批处理大小每次最多处理5条记录
}

🔍 关键概念

数据状态流转

  • Hot - 新插入的数据,等待预热处理
  • Warm - 已预热的数据,等待最终处理
  • Cold - 已完成处理的数据,可以归档或清理

处理器接口

type Handler interface {
    // Hot → Warm 转换时调用
    WillWarm(ctx context.Context, group string, data []byte) ([]byte, error)
    
    // Warm → Cold 转换时调用
    WillCold(ctx context.Context, group string, data []byte) ([]byte, error)
    
    // 组完成时调用
    OnComplete(ctx context.Context, group string) error
}

💻 系统监控功能

示例包含了完整的系统资源监控每10秒显示一次

📊 监控指标

  • 🖥️ CPU 信息 - CPU 核心数
  • 🧵 并发信息 - Goroutine 数量
  • 💾 内存使用 - 已分配、堆内存、栈内存、系统内存
  • 🗑️ 垃圾回收 - GC 次数、暂停时间、CPU 占比
  • 📦 对象统计 - 分配、释放、存活对象数

🔍 监控价值

  • 性能分析 - 观察内存使用趋势
  • 资源优化 - 识别内存泄漏和性能瓶颈
  • 并发监控 - 跟踪 Goroutine 数量变化
  • GC 调优 - 分析垃圾回收效率

🎯 使用场景

  • 数据管道处理 - ETL 流程中的数据转换
  • 批量数据处理 - 定时批处理任务
  • 数据生命周期管理 - 数据的自动归档和清理
  • 事件驱动处理 - 基于数据状态的业务逻辑触发
  • 性能监控 - 实时监控系统资源使用情况

🛑 优雅关闭

示例支持优雅关闭,按 Ctrl+C 可以安全停止处理:

  1. 停止数据生产
  2. 等待当前处理完成
  3. 关闭数据库连接
  4. 清理临时文件

这确保了数据的完整性和一致性。