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 // DefaultDirtyThreshold 脏页阈值 (页数) // 脏页超过此数量时自动触发 Commit 刷盘, 防止内存暴涨和数据丢失 // 500 页 × 16KB = ~8MB (平衡安全性、性能和内存) // - 断电/崩溃时最多丢失 8MB 数据 (约 10,000 行) // - 性能接近最优 (比 2000 页仅慢 1.5%) // - 内存占用合理 (比 2000 页减少 75%) DefaultDirtyThreshold = 500 ) // ============================================================================= // WAL 与自动提交配置 // ============================================================================= const ( // DefaultAutoCommitDelay 默认防抖自动提交延迟 // 每次写操作重置计时器, 停止操作后该时间内无新操作则自动 Commit DefaultAutoCommitDelay = time.Second )