🔧 索引重建优化: - 当数据库为空时跳过索引重建,避免频繁日志 - 只在有数据的页面时记录详细扫描日志 - 添加记录计数统计,显示重建的记录数量 - 减少 CPU 使用率,提高空数据库性能 💻 系统监控功能: - 添加完整的 CPU 和内存监控 - 实时显示 Goroutine 数量和内存使用情况 - 垃圾回收统计和对象分配监控 - 每10秒显示系统资源状态 📊 自动处理示例增强: - 集成系统资源监控到示例中 - 提供性能分析和资源优化指导 - 完善的监控文档和使用说明 🎯 性能提升: - 解决空数据库时的高 CPU 使用问题 - 优化日志输出频率和级别 - 提供实时性能监控能力
自动处理示例
这个示例展示了如何使用 Pipeline Database 的自动处理功能,实现数据的自动状态流转:Hot → Warm → Cold。
🎯 功能特性
📋 自动处理流程
- 数据插入 - 数据以
Hot状态插入 - 自动预热 - 定时将
Hot数据转为Warm状态 - 自动处理 - 定时将
Warm数据转为Cold状态 - 组完成回调 - 组内所有数据处理完成后的回调
- 系统监控 - 实时监控 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 可以安全停止处理:
- 停止数据生产
- 等待当前处理完成
- 关闭数据库连接
- 清理临时文件
这确保了数据的完整性和一致性。