| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298 |
- # TsDB2 Makefile
- # 时序数据库构建、测试与开发工具
- .PHONY: all build test clean run help \
- test-unit test-full test-commit test-dirty test-integrity test-mem \
- test-migrate build-migrate \
- test-demos test-demos-heavy test-all \
- build-analyzer build-migrate-web demo-analyzer fmt lint deps tree
- # =============================================================================
- # 默认目标
- # =============================================================================
- all: build
- # =============================================================================
- # 构建
- # =============================================================================
- build:
- @echo "=== 构建 TsDB2 ==="
- go build ./...
- @echo "✅ 构建完成"
- # =============================================================================
- # 测试
- # =============================================================================
- # 运行所有核心测试
- test: test-unit test-full test-commit test-dirty test-integrity test-mem
- # 单元测试: 并发/事务/迁移往返等回归正确性的主要测试网。
- # 之前只跑 demo, 这批单测不在日常流程里 —— 现在并入默认 test。
- test-unit:
- @echo ""
- @echo "=========================================="
- @echo " 单元测试 (DB / DB/core / migrate)"
- @echo "=========================================="
- go test ./DB/... ./migrate/ -count=1
- # 完整功能测试 (28 项测试)
- test-full:
- @echo ""
- @echo "=========================================="
- @echo " 完整功能测试 (28 项)"
- @echo "=========================================="
- cd demo/full_test && go run main.go
- # 自动提交机制测试 (5 场景)
- test-commit:
- @echo ""
- @echo "=========================================="
- @echo " 自动提交机制测试 (5 场景)"
- @echo "=========================================="
- cd demo/no_commit_test && go run main.go
- # 脏页阈值性能测试
- test-dirty:
- @echo ""
- @echo "=========================================="
- @echo " 脏页阈值性能对比测试"
- @echo "=========================================="
- cd demo/dirty_threshold_test && go run main.go
- # 数据完整性测试
- test-integrity:
- @echo ""
- @echo "=========================================="
- @echo " 数据完整性测试"
- @echo "=========================================="
- cd demo/integrity_test && go run main.go
- # 内存使用测试
- test-mem:
- @echo ""
- @echo "=========================================="
- @echo " 内存使用测试"
- @echo "=========================================="
- cd demo/mem_test && go run main.go
- # =============================================================================
- # 跨库迁移 (VRTX ↔ MySQL ↔ SQLite)
- # =============================================================================
- # 往返一致性测试 (结构 / 数据 / 索引 / 主键 / 边界值 / 时序表)
- test-migrate:
- @echo ""
- @echo "=========================================="
- @echo " 跨库迁移往返测试 (VRTX ↔ SQLite)"
- @echo "=========================================="
- go test ./migrate/ -count=1
- # 构建跨库迁移命令行工具
- build-migrate:
- @echo "=== 构建 vrtxsql ==="
- go build -o vrtxsql ./cmd/vrtxsql
- @echo "✅ 构建完成: ./vrtxsql"
- # 构建跨库迁移的 Web 界面 (和 vrtxsql 同一套 migrate 能力, 只是把 flag 换成表单)
- build-migrate-web:
- @echo "=== 构建 vrtxsqlweb ==="
- go build -o vrtxsqlweb ./cmd/vrtxsqlweb
- @echo "✅ 构建完成: ./vrtxsqlweb (启动后打开 http://127.0.0.1:8099)"
- # 构建 Analyzer 可执行文件
- #
- # analyzer 是独立的 module (自带 go.mod), 所以 `go build ./...` 扫不到它 ——
- # 想拿到能直接跑、能挂调试器的二进制, 得进它自己的目录编。
- # 加 -gcflags="all=-N -l" 可关掉优化与内联 (断点更稳、变量能看全), 排查疑难时用:
- # cd analyzer && go build -gcflags="all=-N -l" -o analyzer .
- build-analyzer:
- @echo "=== 构建 analyzer ==="
- cd analyzer && go build -o analyzer .
- @echo "✅ 构建完成: ./analyzer/analyzer (启动后打开 http://localhost:8081)"
- # =============================================================================
- # Demo 程序
- # =============================================================================
- # demo 清单直接取自磁盘 (含 main.go 的目录), 不在这里手抄一份:
- # 手抄的清单一定会漏 —— 新加的 demo 没人想起来往 Makefile 里补一行, 于是它
- # 再也没被跑过, 而且"清单看起来是全的"这件事本身还会让人放心地不去检查。
- DEMO_DIRS := $(patsubst demo/%/main.go,%,$(wildcard demo/*/main.go))
- # 重型 demo: 跑得久或吃资源 (千万行压测 / 极端配置), 不进默认的 test-demos。
- # 它们同样必须能跑通, 只是要在需要时显式点名: make test-demos-heavy
- # 顺序从轻到重, 先看到多数结果, 最慢的 bench_10m 放最后。
- HEAVY_DEMOS := hash_bench stress_small_config stress_test stress_extreme_config bench_10m
- # 单独跑一个 demo: make demo-unique_index_test
- demo-%:
- @echo "===== demo/$* ====="
- cd demo/$* && go run main.go
- # 跑一遍全部 demo (排除重型)。
- #
- # 刻意不在第一个失败处退出: 跑一遍只看到第一个坏掉的 demo, 修完再跑又冒出下一个,
- # 全量验证要的是"一次拿到所有坏消息"。日志留在 /tmp, 失败时能直接查。
- test-demos:
- @echo ""
- @echo "=========================================="
- @echo " Demo 全量验证 (共 $(words $(filter-out $(HEAVY_DEMOS),$(DEMO_DIRS))) 个)"
- @echo "=========================================="
- @ok=0; fail=0; \
- for d in $(filter-out $(HEAVY_DEMOS),$(DEMO_DIRS)); do \
- printf " %-26s" "$$d"; \
- if ( cd demo/$$d && go run main.go ) > /tmp/tsdb2_demo_$$d.log 2>&1; then \
- echo "✅ 通过"; ok=$$((ok+1)); \
- else \
- echo "❌ 失败 (日志: /tmp/tsdb2_demo_$$d.log)"; fail=$$((fail+1)); \
- fi; \
- done; \
- echo ""; \
- echo " 结果: 通过 $$ok, 失败 $$fail"; \
- test $$fail -eq 0
- # 重型 demo (单独跑)
- test-demos-heavy:
- @echo ""
- @echo "=========================================="
- @echo " 重型 Demo (共 $(words $(HEAVY_DEMOS)) 个)"
- @echo "=========================================="
- @ok=0; fail=0; \
- for d in $(HEAVY_DEMOS); do \
- printf " %-26s" "$$d"; \
- if ( cd demo/$$d && go run main.go ) > /tmp/tsdb2_demo_$$d.log 2>&1; then \
- echo "✅ 通过"; ok=$$((ok+1)); \
- else \
- echo "❌ 失败 (日志: /tmp/tsdb2_demo_$$d.log)"; fail=$$((fail+1)); \
- fi; \
- done; \
- echo ""; \
- echo " 结果: 通过 $$ok, 失败 $$fail"; \
- test $$fail -eq 0
- # 一键全量: 构建 + 迁移往返 + 单元测试 + 全部 demo
- test-all: build test-migrate test-unit test-demos
- @echo ""
- @echo "✅ 全量验证完成 (重型 demo 另跑: make test-demos-heavy)"
- # 运行 Analyzer (数据库可视化工具)
- #
- # 用 `go run .` 而不是 `go run main.go`: analyzer 是多文件包 (store/pagemap/
- # audit/indexcheck...), 只喂一个文件会报一片 undefined。
- demo-analyzer:
- @echo "=== 启动 TsDB2 Analyzer ==="
- cd analyzer && go run .
- # =============================================================================
- # 开发工具
- # =============================================================================
- # 运行主程序
- run:
- @echo "=== 运行主程序 ==="
- go run main.go
- # 代码格式化
- fmt:
- @echo "=== 格式化代码 ==="
- go fmt ./...
- @echo "✅ 格式化完成"
- # 代码静态检查
- lint:
- @echo "=== 代码静态检查 ==="
- go vet ./...
- @echo "✅ 检查完成"
- # 依赖管理
- deps:
- @echo "=== 整理依赖 ==="
- go mod tidy
- @echo "=== 验证依赖 ==="
- go mod verify
- @echo "✅ 依赖检查完成"
- # 显示项目结构
- tree:
- @echo "=== TsDB2 项目结构 ==="
- @echo ""
- @echo "TsDB2/"
- @echo "├── DB/ # 数据库核心层"
- @echo "│ ├── core/ # 底层引擎 (页式存储、B+树、WAL)"
- @echo "│ ├── db.go # DB 层封装"
- @echo "│ ├── table.go # 泛型表操作"
- @echo "│ ├── query.go # 查询构建器"
- @echo "│ └── model.go # 模型解析"
- @echo "├── analyzer/ # 数据库可视化工具"
- @echo "├── demo/ # 测试程序"
- @echo "│ ├── full_test/ # 完整功能测试"
- @echo "│ ├── no_commit_test/ # 自动提交测试"
- @echo "│ ├── dirty_threshold_test/ # 脏页阈值测试"
- @echo "│ ├── integrity_test/ # 数据完整性测试"
- @echo "│ └── mem_test/ # 内存使用测试"
- @echo "├── docs/ # 文档"
- @echo "└── Makefile # 构建脚本"
- @echo ""
- # 清理临时文件
- clean:
- @echo "=== 清理临时文件 ==="
- @rm -f demo/*/*.db
- @rm -f *.db
- @rm -f demo/*/*.exe
- @rm -f vrtxsql vrtxsql.exe
- @rm -f vrtxsqlweb vrtxsqlweb.exe
- @rm -f analyzer/analyzer analyzer/analyzer.exe
- @rm -f /tmp/tsdb2_demo_*.log
- @echo "✅ 清理完成"
- # =============================================================================
- # 帮助信息
- # =============================================================================
- help:
- @echo "╔═══════════════════════════════════════════════════════════╗"
- @echo "║ TsDB2 Makefile 使用说明 ║"
- @echo "╚═══════════════════════════════════════════════════════════╝"
- @echo ""
- @echo "📦 构建与运行"
- @echo " make build - 构建整个项目"
- @echo " make run - 运行主程序"
- @echo " make clean - 清理临时文件 (.db, .exe)"
- @echo ""
- @echo "🧪 核心测试"
- @echo " make test - 运行所有核心测试 (推荐)"
- @echo " make test-full - 完整功能测试 (28 项)"
- @echo " make test-commit - 自动提交机制测试 (5 场景)"
- @echo " make test-dirty - 脏页阈值性能对比测试"
- @echo " make test-integrity - 数据完整性测试"
- @echo " make test-mem - 内存使用测试"
- @echo ""
- @echo "🔀 跨库迁移"
- @echo " make test-migrate - 迁移往返一致性测试 (VRTX ↔ SQLite)"
- @echo " make build-migrate - 构建 vrtxsql 命令行工具"
- @echo " make build-migrate-web - 构建 vrtxsqlweb 网页版迁移工具"
- @echo " make build-analyzer - 构建 analyzer 可执行文件"
- @echo ""
- @echo "🎨 Demo 程序"
- @echo " make test-demos - 跑一遍全部 demo (排除重型, 逐个报通过/失败)"
- @echo " make test-demos-heavy - 重型 demo (千万行压测 / 极端配置)"
- @echo " make demo-<name> - 单独跑一个 demo (如 make demo-unique_index_test)"
- @echo " make demo-analyzer - 启动数据库可视化工具"
- @echo ""
- @echo "🛠️ 开发工具"
- @echo " make fmt - 格式化代码"
- @echo " make lint - 代码静态检查 (go vet)"
- @echo " make deps - 依赖管理 (tidy + verify)"
- @echo " make tree - 显示项目结构"
- @echo ""
- @echo "📖 快速开始"
- @echo " make build && make test # 构建并运行所有测试"
- @echo " make test-all # 构建 + 迁移往返 + 全部 demo (一键全量)"
- @echo " make demo-analyzer # 启动可视化工具"
- @echo ""
- @echo "💡 提示"
- @echo " - 首次使用建议运行: make test"
- @echo " - 查看 Analyzer: make demo-analyzer"
- @echo " - 提交前检查: make fmt && make lint"
- @echo ""
|