147 lines
4.5 KiB
Markdown
147 lines
4.5 KiB
Markdown
|
|
# 自动处理示例
|
|||
|
|
|
|||
|
|
这个示例展示了如何使用 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. 清理临时文件
|
|||
|
|
|
|||
|
|
这确保了数据的完整性和一致性。
|