Files
pipelinedb/examples/auto-processing/README.md
Pipeline Database 6f78cdd8a9 🚀 优化索引重建和添加系统监控
🔧 索引重建优化:
- 当数据库为空时跳过索引重建,避免频繁日志
- 只在有数据的页面时记录详细扫描日志
- 添加记录计数统计,显示重建的记录数量
- 减少 CPU 使用率,提高空数据库性能

💻 系统监控功能:
- 添加完整的 CPU 和内存监控
- 实时显示 Goroutine 数量和内存使用情况
- 垃圾回收统计和对象分配监控
- 每10秒显示系统资源状态

📊 自动处理示例增强:
- 集成系统资源监控到示例中
- 提供性能分析和资源优化指导
- 完善的监控文档和使用说明

🎯 性能提升:
- 解决空数据库时的高 CPU 使用问题
- 优化日志输出频率和级别
- 提供实时性能监控能力
2025-09-30 17:48:28 +08:00

147 lines
4.5 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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