# 自动处理示例 这个示例展示了如何使用 Pipeline Database 的自动处理功能,实现数据的自动状态流转:**Hot → Warm → Cold**。 ## 🎯 功能特性 ### 📋 自动处理流程 1. **数据插入** - 数据以 `Hot` 状态插入 2. **自动预热** - 定时将 `Hot` 数据转为 `Warm` 状态 3. **自动处理** - 定时将 `Warm` 数据转为 `Cold` 状态 4. **组完成回调** - 组内所有数据处理完成后的回调 5. **系统监控** - 实时监控 CPU 和内存使用情况 ### 🔧 自定义处理器 - **WillWarm** - Hot → Warm 转换时的处理逻辑 - **WillCold** - Warm → Cold 转换时的处理逻辑 - **OnComplete** - 组完成时的回调处理 ## 🚀 运行示例 ```bash # 在项目根目录运行 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 ============================ ``` ## ⚙️ 配置说明 ```go config := &pipelinedb.Config{ CacheSize: 50, // 页面缓存大小 WarmInterval: 2 * time.Second, // 预热间隔:每2秒检查一次Hot数据 ProcessInterval: 3 * time.Second, // 处理间隔:每3秒检查一次Warm数据 BatchSize: 5, // 批处理大小:每次最多处理5条记录 } ``` ## 🔍 关键概念 ### 数据状态流转 - **Hot** - 新插入的数据,等待预热处理 - **Warm** - 已预热的数据,等待最终处理 - **Cold** - 已完成处理的数据,可以归档或清理 ### 处理器接口 ```go 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. 清理临时文件 这确保了数据的完整性和一致性。