const.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package core
  2. import (
  3. "time"
  4. )
  5. var Magic = [4]byte{'T', 'S', 'D', 'B'}
  6. // =============================================================================
  7. // 页面与存储常量
  8. // =============================================================================
  9. const (
  10. // Version 数据库文件格式版本
  11. Version = 1
  12. // PageSize 数据页大小 (16KB) — 索引页、数据页、WAL 页统一使用
  13. PageSize uint32 = 4096 * 4
  14. // PageSize4K 头页大小 (4KB) — HeaderPage、TablePage 元数据等固定页
  15. PageSize4K = 4096
  16. // TableNameSize 表名最大字节数
  17. TableNameSize = 24
  18. // MinFieldAllocateSize 字段定义最小预分配空间 (字节)
  19. MinFieldAllocateSize = 256
  20. // MaxFieldSize 单次创建字段最大数量
  21. MaxFieldSize = 256
  22. )
  23. // =============================================================================
  24. // BufferPool 配置
  25. // =============================================================================
  26. const (
  27. // DefaultBufferPoolCapacity 默认缓冲池容量 (页数)
  28. // 1000 页 × 16KB = ~16MB (嵌入式/资源受限场景)
  29. // - 最小安全值: 20页 (低于此值可能死锁)
  30. // - 推荐配置: 1000-5000页 (16-78MB)
  31. // - 高性能场景: 10000+页 (156MB+)
  32. DefaultBufferPoolCapacity = 1000
  33. )
  34. // =============================================================================
  35. // WAL 与自动提交配置
  36. // =============================================================================
  37. const (
  38. // DefaultDirtyThreshold 脏页阈值 (页数)
  39. // BufferPool 中脏页数量超过此值时,自动触发 Commit 刷盘
  40. // 注意: 这是 BufferPool 级别的计数,不是事务级别
  41. // - 500 页 × 16KB = ~8MB (平衡安全性、性能和内存)
  42. // - 断电/崩溃时最多丢失 8MB 数据 (约 10,000 行)
  43. // - 性能接近最优 (比 2000 页仅慢 1.5%)
  44. // - 内存占用合理 (比 2000 页减少 75%)
  45. DefaultDirtyThreshold = 500
  46. // DefaultAutoCommitDelay 默认防抖自动提交延迟
  47. // 每次写操作重置计时器,停止操作后该时间内无新操作则自动 Commit
  48. // - 适用场景: 低频写入、交互式应用
  49. // - 禁用方法: 设置为 0 可完全禁用防抖,仅靠脏页阈值触发
  50. DefaultAutoCommitDelay = time.Second
  51. )