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