Java LSM Tree 学习之第一天完成总结
Java LSM Tree 学习之第一天完成总结
项目地址:https://github.com/ForceInjection/java-lsm-tree
1. 任务完成情况
✅ 所有第一天任务已成功完成!
1.1 构建系统设置
1.1.1 build.sh 脚本功能
• build.sh- 构建脚本(位于项目根目录)• build/logs/- 构建日志目录• target/- Maven 标准构建产物输出目录
1.1.2 构建脚本功能
• ✅ 使用 Maven Docker 镜像 ( maven:3.8.6-openjdk-8) 构建项目• ✅ 支持 Java 8+ 兼容性(项目配置支持 Java 8,实际运行环境 Java 17) • ✅ 提供多种构建选项: • ./build.sh build- 构建项目• ./build.sh test- 运行测试• ./build.sh clean- 清理项目• ✅ 自动处理构建产物到 Maven 标准目录 • ✅ 详细的日志记录和错误处理
1.2 测试套件系统
1.2.1 创建的文件和目录
• test-suite/ - 测试套件目录 • test-suite/test-suite.sh - 测试套件主脚本 • test-suite/README.md - 详细使用说明 • test-suite/lib/- 模块化库文件目录• common.sh - 公共函数库 • session.sh - 会话管理模块 • tests.sh - 测试执行模块 • reports.sh - 报告生成模块 • test-suite/results/ - 测试结果目录
1.2.2 测试套件功能
• ✅ 功能测试 (functional): • JUnit 测试套件执行 • 基本功能示例验证 • 数据一致性检查 • ✅ 性能测试 (performance): • 顺序写入性能测试 • 随机写入性能测试 • 读取性能测试 • 混合工作负载测试 • 写入延迟分布分析 • MemTable 刷盘影响测试 • ✅ 内存测试 (memory): • 内存使用情况监控 • 内存泄漏检测 • GC 性能分析 • ✅ 压力测试 (stress): • 多线程并发测试 • 大数据量稳定性测试 • ✅ 会话管理系统: • 智能会话管理和复用 • 测试会话历史记录 • 会话归档和清理功能 • ✅ 测试报告生成: • HTML 格式的详细测试报告 • 性能指标统计 • 测试结果可视化
1.2.3 测试脚本使用方法
# 运行所有测试
./test-suite/test-suite.sh all
# 运行特定测试
./test-suite/test-suite.sh functional # 功能测试
./test-suite/test-suite.sh performance # 性能测试
./test-suite/test-suite.sh memory # 内存测试
./test-suite/test-suite.sh stress # 压力测试
# 会话管理
./test-suite/test-suite.sh list # 列出所有测试会话
./test-suite/test-suite.sh show [会话ID] # 显示会话详情
./test-suite/test-suite.sh delete [会话ID] # 删除指定会话
./test-suite/test-suite.sh report [会话ID] # 重新生成报告
# 清理和归档
./test-suite/test-suite.sh clean # 清理当前测试环境
./test-suite/test-suite.sh clean-all # 清理所有测试数据
./test-suite/test-suite.sh archive [天数] # 归档旧会话2. 测试报告解读
2.1 测试机器规格
2.1.1 硬件配置
• 处理器:Apple M1 Pro (8 核心,8 物理核心,8 逻辑核心) • 架构:ARM64 (Apple Silicon) • 操作系统:macOS 15.6.1 (Build 24G90) • 内核版本:Darwin 24.6.0 • 内存:16 GB 统一内存架构,测试分配 2GB 堆内存 • 存储:Apple Fabric SSD 固态硬盘,确保 I/O 性能稳定
2.1.2 软件环境
• Java 版本:OpenJDK 17.0.16 (Homebrew) • JVM 实现:OpenJDK 64-Bit Server VM • JVM 构建:17.0.16+0, mixed mode, sharing • 垃圾收集器:G1GC (低延迟垃圾收集器) • 构建环境:Docker Maven 3.8.6 + OpenJDK 8 (构建环境)
2.1.3 测试环境特点
• macOS 优势: • 优秀的内存管理和进程调度 • 稳定的文件系统性能 • 低系统噪声,测试结果更稳定 • 性能基线说明: • 测试结果基于 macOS 环境 • 在 Linux/Windows 环境下性能可能有所差异 • 建议在目标部署环境中重新建立性能基线
2.2 测试报告结构说明
测试套件生成的报告包含以下几个层次:
2.2.1 报告文件组织
test-suite/results/sessions/[会话ID]/
├── summary.json # 测试会话元数据
├── test_results.json # 详细测试结果数据
├── test_summary.txt # 简要文本摘要
├── reports/ # HTML和JSON格式报告
│ ├── test_report_[会话ID].html
│ └── test_report_[会话ID].json
├── functional/ # 功能测试详细结果
├── performance/ # 性能测试详细结果
│ ├── performance_summary.txt
│ ├── performance_results_[会话ID].txt
│ └── benchmark_data_round_[1-3]/
├── memory/ # 内存测试详细结果
└── stress/ # 压力测试详细结果2.2.2 会话管理系统
• 会话 ID 格式: YYYYMMDD_HHMMSS(如:20251026_192613)• latest 符号链接:始终指向最新的测试会话 • 会话归档:自动归档超过指定天数的旧会话
2.3 报告使用指南
2.3.1 查看测试报告
# 查看最新测试会话
./test-suite/test-suite.sh show latest
# 查看特定会话
./test-suite/test-suite.sh show 20251026_192613
# 重新生成HTML报告
./test-suite/test-suite.sh report latest2.3.2 性能基线建立
当前测试结果可作为性能基线:
• 写入基线:随机写入 ~170,000 ops/sec • 读取基线:~2,500 ops/sec • 混合负载基线:~4,200 ops/sec • 延迟基线:平均 3.1μs,P99 < 7μs
2.3.3 性能回归检测
通过对比历史测试会话,可以检测:
• 性能回归问题 • 优化效果验证 • 不同配置的性能差异
2.4 性能测试报告深度解读
2.4.1 测试环境信息
{
"environment": {
"java_version": "17.0.16",
"os": "Darwin 24.6.0",
"java_opts": "-Xmx2g -Xms1g -XX:+UseG1GC"
}
}• JVM 配置:2GB 最大堆内存,1GB 初始堆内存,使用 G1 垃圾收集器 • 测试轮数:每个性能测试执行 3 轮,确保结果稳定性
2.4.2 写入性能分析
顺序写入性能:
• 1,000 条记录:~20,000 ops/sec • 5,000 条记录:~97,000 ops/sec • 10,000 条记录:~91,000 ops/sec • 20,000 条记录:~109,000 ops/sec
随机写入性能:
• 1,000 条记录:~167,000 ops/sec • 5,000 条记录:~165,000 ops/sec • 10,000 条记录:~162,000 ops/sec • 20,000 条记录:~190,000 ops/sec
关键观察:
• 随机写入性能优于顺序写入,这符合 LSM-Tree 的设计特点 • 随着数据量增加,性能趋于稳定,显示良好的扩展性 • 小批量写入存在启动开销,大批量写入效率更高
2.4.3 读取性能分析
读取性能指标:
• 1,000 次读取:~2,000 ops/sec,命中率 100% • 5,000 次读取:~2,500 ops/sec,命中率 100% • 10,000 次读取:~3,000 ops/sec,命中率 100%
性能特征:
• 读取性能相对写入较低,这是 LSM-Tree 的典型特征 • 100%命中率表明测试数据完全可读取 • 随着读取量增加,吞吐量有所提升(缓存预热效应)
2.4.4 混合工作负载分析
测试配置:70%读操作 + 30%写操作
• 总操作数:15,000 • 读操作:10,559 次 • 写操作:4,441 次 • 整体吞吐量:~4,200 ops/sec
系统状态:
LSMTreeStats{
activeMemTable=4441,
immutableMemTables=0,
ssTables=1
}2.4.5 延迟分布分析
写入延迟统计(微秒):
• 最小值:2.5μs • 最大值:30-108μs • 平均值:3.1μs • 中位数:3.0μs • P95:3.7μs • P99:6.8μs
延迟特征:
• 极低的平均延迟(3.1 微秒) • 良好的延迟一致性(P95 和 P99 差距较小) • 偶发的高延迟可能与 GC 或系统调度相关
2.4.6 MemTable 刷盘影响分析
频繁刷盘测试:
• 数据量:2,000 条记录 • 吞吐量:~147,000 ops/sec • 结果状态:20 个 SSTable 文件
关键发现:
• 频繁刷盘对写入性能影响相对较小 • 系统能够有效处理 MemTable 到 SSTable 的转换 • 多个 SSTable 的存在验证了分层存储机制
2.5 内存测试报告解读
2.5.1 内存使用监控
• 内存泄漏检测:PASS • 内存使用效率:良好,无异常内存增长 • 内存使用模式:符合 LSM-Tree 的内存管理预期
2.5.2 内存优化建议
基于测试结果的内存优化方向:
• MemTable 大小调优 • 缓存策略优化 • 压缩策略调整
2.6 压力测试报告解读
2.6.1 并发测试结果
• 多线程并发:PASS • 数据一致性:在并发环境下保持数据完整性 • 系统稳定性:长时间运行无崩溃
2.6.2 大数据量稳定性
• 大批量数据处理:系统能够处理大量数据而不出现性能急剧下降 • 资源管理:内存和文件句柄管理良好
3. 总结
第一天的学习目标已经完全达成:
3.1 技术理解深度
1. ✅ 构建系统:完整的 Maven 构建环境,支持多种构建选项 2. ✅ 测试套件系统:全面的测试框架,包含功能、性能、内存、压力测试,以及智能会话管理 3. ✅ 项目验证:所有测试通过,构建成功,系统运行正常 4. ✅ 性能基线:建立了完整的性能基线和测试报告解读体系
系统特色:
• 模块化设计,易于维护和扩展 • 智能会话管理,支持测试复用和历史追踪 • 全面的测试覆盖,从功能到性能到内存分析 • 详细的 HTML 报告生成和可视化 • 深度的性能分析和基线建立
测试报告价值:
• 提供了 LSM-Tree 实现的性能基线 • 建立了完整的性能监控体系 • 为后续优化提供了数据支撑 • 验证了系统的稳定性和可靠性
下一步计划:
• 深入分析 LSM-Tree 的核心算法实现 • 基于性能报告识别和优化性能瓶颈 • 扩展更多测试场景和性能指标 • 建立持续性能监控机制