Makefile 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. # TsDB2 Makefile
  2. # 时序数据库构建、测试与开发工具
  3. .PHONY: all build test clean run help \
  4. test-full test-commit test-dirty test-integrity test-mem \
  5. test-migrate build-migrate \
  6. test-demos test-demos-heavy test-all \
  7. build-analyzer build-migrate-web demo-analyzer fmt lint deps tree
  8. # =============================================================================
  9. # 默认目标
  10. # =============================================================================
  11. all: build
  12. # =============================================================================
  13. # 构建
  14. # =============================================================================
  15. build:
  16. @echo "=== 构建 TsDB2 ==="
  17. go build ./...
  18. @echo "✅ 构建完成"
  19. # =============================================================================
  20. # 测试
  21. # =============================================================================
  22. # 运行所有核心测试
  23. test: test-full test-commit test-dirty test-integrity test-mem
  24. # 完整功能测试 (28 项测试)
  25. test-full:
  26. @echo ""
  27. @echo "=========================================="
  28. @echo " 完整功能测试 (28 项)"
  29. @echo "=========================================="
  30. cd demo/full_test && go run main.go
  31. # 自动提交机制测试 (5 场景)
  32. test-commit:
  33. @echo ""
  34. @echo "=========================================="
  35. @echo " 自动提交机制测试 (5 场景)"
  36. @echo "=========================================="
  37. cd demo/no_commit_test && go run main.go
  38. # 脏页阈值性能测试
  39. test-dirty:
  40. @echo ""
  41. @echo "=========================================="
  42. @echo " 脏页阈值性能对比测试"
  43. @echo "=========================================="
  44. cd demo/dirty_threshold_test && go run main.go
  45. # 数据完整性测试
  46. test-integrity:
  47. @echo ""
  48. @echo "=========================================="
  49. @echo " 数据完整性测试"
  50. @echo "=========================================="
  51. cd demo/integrity_test && go run main.go
  52. # 内存使用测试
  53. test-mem:
  54. @echo ""
  55. @echo "=========================================="
  56. @echo " 内存使用测试"
  57. @echo "=========================================="
  58. cd demo/mem_test && go run main.go
  59. # =============================================================================
  60. # 跨库迁移 (VRTX ↔ MySQL ↔ SQLite)
  61. # =============================================================================
  62. # 往返一致性测试 (结构 / 数据 / 索引 / 主键 / 边界值 / 时序表)
  63. test-migrate:
  64. @echo ""
  65. @echo "=========================================="
  66. @echo " 跨库迁移往返测试 (VRTX ↔ SQLite)"
  67. @echo "=========================================="
  68. go test ./migrate/ -count=1
  69. # 构建跨库迁移命令行工具
  70. build-migrate:
  71. @echo "=== 构建 vrtxsql ==="
  72. go build -o vrtxsql ./cmd/vrtxsql
  73. @echo "✅ 构建完成: ./vrtxsql"
  74. # 构建跨库迁移的 Web 界面 (和 vrtxsql 同一套 migrate 能力, 只是把 flag 换成表单)
  75. build-migrate-web:
  76. @echo "=== 构建 vrtxsqlweb ==="
  77. go build -o vrtxsqlweb ./cmd/vrtxsqlweb
  78. @echo "✅ 构建完成: ./vrtxsqlweb (启动后打开 http://127.0.0.1:8099)"
  79. # 构建 Analyzer 可执行文件
  80. #
  81. # analyzer 是独立的 module (自带 go.mod), 所以 `go build ./...` 扫不到它 ——
  82. # 想拿到能直接跑、能挂调试器的二进制, 得进它自己的目录编。
  83. # 加 -gcflags="all=-N -l" 可关掉优化与内联 (断点更稳、变量能看全), 排查疑难时用:
  84. # cd analyzer && go build -gcflags="all=-N -l" -o analyzer .
  85. build-analyzer:
  86. @echo "=== 构建 analyzer ==="
  87. cd analyzer && go build -o analyzer .
  88. @echo "✅ 构建完成: ./analyzer/analyzer (启动后打开 http://localhost:8081)"
  89. # =============================================================================
  90. # Demo 程序
  91. # =============================================================================
  92. # demo 清单直接取自磁盘 (含 main.go 的目录), 不在这里手抄一份:
  93. # 手抄的清单一定会漏 —— 新加的 demo 没人想起来往 Makefile 里补一行, 于是它
  94. # 再也没被跑过, 而且"清单看起来是全的"这件事本身还会让人放心地不去检查。
  95. DEMO_DIRS := $(patsubst demo/%/main.go,%,$(wildcard demo/*/main.go))
  96. # 重型 demo: 跑得久或吃资源 (千万行压测 / 极端配置), 不进默认的 test-demos。
  97. # 它们同样必须能跑通, 只是要在需要时显式点名: make test-demos-heavy
  98. # 顺序从轻到重, 先看到多数结果, 最慢的 bench_10m 放最后。
  99. HEAVY_DEMOS := hash_bench stress_small_config stress_test stress_extreme_config bench_10m
  100. # 单独跑一个 demo: make demo-unique_index_test
  101. demo-%:
  102. @echo "===== demo/$* ====="
  103. cd demo/$* && go run main.go
  104. # 跑一遍全部 demo (排除重型)。
  105. #
  106. # 刻意不在第一个失败处退出: 跑一遍只看到第一个坏掉的 demo, 修完再跑又冒出下一个,
  107. # 全量验证要的是"一次拿到所有坏消息"。日志留在 /tmp, 失败时能直接查。
  108. test-demos:
  109. @echo ""
  110. @echo "=========================================="
  111. @echo " Demo 全量验证 (共 $(words $(filter-out $(HEAVY_DEMOS),$(DEMO_DIRS))) 个)"
  112. @echo "=========================================="
  113. @ok=0; fail=0; \
  114. for d in $(filter-out $(HEAVY_DEMOS),$(DEMO_DIRS)); do \
  115. printf " %-26s" "$$d"; \
  116. if ( cd demo/$$d && go run main.go ) > /tmp/tsdb2_demo_$$d.log 2>&1; then \
  117. echo "✅ 通过"; ok=$$((ok+1)); \
  118. else \
  119. echo "❌ 失败 (日志: /tmp/tsdb2_demo_$$d.log)"; fail=$$((fail+1)); \
  120. fi; \
  121. done; \
  122. echo ""; \
  123. echo " 结果: 通过 $$ok, 失败 $$fail"; \
  124. test $$fail -eq 0
  125. # 重型 demo (单独跑)
  126. test-demos-heavy:
  127. @echo ""
  128. @echo "=========================================="
  129. @echo " 重型 Demo (共 $(words $(HEAVY_DEMOS)) 个)"
  130. @echo "=========================================="
  131. @ok=0; fail=0; \
  132. for d in $(HEAVY_DEMOS); do \
  133. printf " %-26s" "$$d"; \
  134. if ( cd demo/$$d && go run main.go ) > /tmp/tsdb2_demo_$$d.log 2>&1; then \
  135. echo "✅ 通过"; ok=$$((ok+1)); \
  136. else \
  137. echo "❌ 失败 (日志: /tmp/tsdb2_demo_$$d.log)"; fail=$$((fail+1)); \
  138. fi; \
  139. done; \
  140. echo ""; \
  141. echo " 结果: 通过 $$ok, 失败 $$fail"; \
  142. test $$fail -eq 0
  143. # 一键全量: 构建 + 迁移往返 + 全部 demo
  144. test-all: build test-migrate test-demos
  145. @echo ""
  146. @echo "✅ 全量验证完成 (重型 demo 另跑: make test-demos-heavy)"
  147. # 运行 Analyzer (数据库可视化工具)
  148. #
  149. # 用 `go run .` 而不是 `go run main.go`: analyzer 是多文件包 (store/pagemap/
  150. # audit/indexcheck...), 只喂一个文件会报一片 undefined。
  151. demo-analyzer:
  152. @echo "=== 启动 TsDB2 Analyzer ==="
  153. cd analyzer && go run .
  154. # =============================================================================
  155. # 开发工具
  156. # =============================================================================
  157. # 运行主程序
  158. run:
  159. @echo "=== 运行主程序 ==="
  160. go run main.go
  161. # 代码格式化
  162. fmt:
  163. @echo "=== 格式化代码 ==="
  164. go fmt ./...
  165. @echo "✅ 格式化完成"
  166. # 代码静态检查
  167. lint:
  168. @echo "=== 代码静态检查 ==="
  169. go vet ./...
  170. @echo "✅ 检查完成"
  171. # 依赖管理
  172. deps:
  173. @echo "=== 整理依赖 ==="
  174. go mod tidy
  175. @echo "=== 验证依赖 ==="
  176. go mod verify
  177. @echo "✅ 依赖检查完成"
  178. # 显示项目结构
  179. tree:
  180. @echo "=== TsDB2 项目结构 ==="
  181. @echo ""
  182. @echo "TsDB2/"
  183. @echo "├── DB/ # 数据库核心层"
  184. @echo "│ ├── core/ # 底层引擎 (页式存储、B+树、WAL)"
  185. @echo "│ ├── db.go # DB 层封装"
  186. @echo "│ ├── table.go # 泛型表操作"
  187. @echo "│ ├── query.go # 查询构建器"
  188. @echo "│ └── model.go # 模型解析"
  189. @echo "├── analyzer/ # 数据库可视化工具"
  190. @echo "├── demo/ # 测试程序"
  191. @echo "│ ├── full_test/ # 完整功能测试"
  192. @echo "│ ├── no_commit_test/ # 自动提交测试"
  193. @echo "│ ├── dirty_threshold_test/ # 脏页阈值测试"
  194. @echo "│ ├── integrity_test/ # 数据完整性测试"
  195. @echo "│ └── mem_test/ # 内存使用测试"
  196. @echo "├── docs/ # 文档"
  197. @echo "└── Makefile # 构建脚本"
  198. @echo ""
  199. # 清理临时文件
  200. clean:
  201. @echo "=== 清理临时文件 ==="
  202. @rm -f demo/*/*.db
  203. @rm -f *.db
  204. @rm -f demo/*/*.exe
  205. @rm -f vrtxsql vrtxsql.exe
  206. @rm -f vrtxsqlweb vrtxsqlweb.exe
  207. @rm -f analyzer/analyzer analyzer/analyzer.exe
  208. @rm -f /tmp/tsdb2_demo_*.log
  209. @echo "✅ 清理完成"
  210. # =============================================================================
  211. # 帮助信息
  212. # =============================================================================
  213. help:
  214. @echo "╔═══════════════════════════════════════════════════════════╗"
  215. @echo "║ TsDB2 Makefile 使用说明 ║"
  216. @echo "╚═══════════════════════════════════════════════════════════╝"
  217. @echo ""
  218. @echo "📦 构建与运行"
  219. @echo " make build - 构建整个项目"
  220. @echo " make run - 运行主程序"
  221. @echo " make clean - 清理临时文件 (.db, .exe)"
  222. @echo ""
  223. @echo "🧪 核心测试"
  224. @echo " make test - 运行所有核心测试 (推荐)"
  225. @echo " make test-full - 完整功能测试 (28 项)"
  226. @echo " make test-commit - 自动提交机制测试 (5 场景)"
  227. @echo " make test-dirty - 脏页阈值性能对比测试"
  228. @echo " make test-integrity - 数据完整性测试"
  229. @echo " make test-mem - 内存使用测试"
  230. @echo ""
  231. @echo "🔀 跨库迁移"
  232. @echo " make test-migrate - 迁移往返一致性测试 (VRTX ↔ SQLite)"
  233. @echo " make build-migrate - 构建 vrtxsql 命令行工具"
  234. @echo " make build-migrate-web - 构建 vrtxsqlweb 网页版迁移工具"
  235. @echo " make build-analyzer - 构建 analyzer 可执行文件"
  236. @echo ""
  237. @echo "🎨 Demo 程序"
  238. @echo " make test-demos - 跑一遍全部 demo (排除重型, 逐个报通过/失败)"
  239. @echo " make test-demos-heavy - 重型 demo (千万行压测 / 极端配置)"
  240. @echo " make demo-<name> - 单独跑一个 demo (如 make demo-unique_index_test)"
  241. @echo " make demo-analyzer - 启动数据库可视化工具"
  242. @echo ""
  243. @echo "🛠️ 开发工具"
  244. @echo " make fmt - 格式化代码"
  245. @echo " make lint - 代码静态检查 (go vet)"
  246. @echo " make deps - 依赖管理 (tidy + verify)"
  247. @echo " make tree - 显示项目结构"
  248. @echo ""
  249. @echo "📖 快速开始"
  250. @echo " make build && make test # 构建并运行所有测试"
  251. @echo " make test-all # 构建 + 迁移往返 + 全部 demo (一键全量)"
  252. @echo " make demo-analyzer # 启动可视化工具"
  253. @echo ""
  254. @echo "💡 提示"
  255. @echo " - 首次使用建议运行: make test"
  256. @echo " - 查看 Analyzer: make demo-analyzer"
  257. @echo " - 提交前检查: make fmt && make lint"
  258. @echo ""