PowerToys v0.101.2432.0 更新了四个小功能:速览可预览 SQLite 数据库内容;键盘管理器支持单独映射组合键中的按键;命令面板显示更详细信息;屏幕标尺新增设备无关像素单位。
本文介绍WordPress SQLite Docker镜像的更新,基于WordPress 7.0.2、PHP 8.5和SQLite Integration 3.0 RC。新增Rust解析扩展、多架构构建、旧卷升级修复和诊断页面,并处理ID键兼容问题。适合单机、读多写少场景,需注意插件兼容、备份和SQLite版本安全。
> 本文是写作规划,不是可发布正文。拆解对象:SQLite 3.45.x–3.46.x 的单文件嵌入式行存内核——Pager / B-Tree / VDBE / Rollback Journal·WAL / 锁状态机 / 计划器与恢复;DuckDB 只作选型边界句,不重写 [列存引擎](../columnar-engi…
本文档介绍SQLite内核系列实验的复现方法,涵盖环境要求(Linux/WSL2、SQLite 3.45+)及多个脚本实验,如页头解析、查询计划、回滚日志、WAL检查点、锁冲突、事务模式、覆盖索引、跨库操作、完整性检查和备份。强调以官方文档和源码为准,实验需记录版本、命令和输出,性能数据引用既有测试。
SQLite的SQL编译管线分为Tokenizer、Parser、名字解析和代码生成四段,其中查询规划与代码生成无独立边界。schema cookie变化时,sqlite3_step会根据语句是否由prepare_v2创建自动重编译或返回SQLITE_SCHEMA。实测显示INT与INTEGER PRIMARY KEY对同一查询产生不同访问路径,规划算法采用NN/N3启发式,不保证全局最优。
本文介绍SQLite 3.0的锁状态机,五态为UNLOCKED、SHARED、RESERVED、PENDING、EXCLUSIVE。RESERVED允许新读者,PENDING拒绝新读者以防写者饿死。Pager仅跟踪四态,PENDING是瞬时状态。实测验证RESERVED唯一性,读写可共存。shared cache已过时,WAL模式另用独立锁机制。
本文介绍SQLite查询计划器:通过EXPLAIN QUERY PLAN区分SEARCH/SCAN访问路径;ANALYZE写入sqlite_stat1统计信息,无统计时用默认猜测(表百万行、索引重复度10);连接顺序采用N3启发式算法(O(KN)),放弃穷举最优,但存在star-query贪心短板。文章强调SQLite计划器与PostgreSQL CBO复杂度目标不同,统计不自动更新,EQP格式仅供调试。
本文探讨SQLite覆盖索引与自动索引机制。覆盖索引可省去回表二次查找,是否覆盖取决于SELECT列是否全在索引中,与有无索引无关。自动索引是语句级临时索引,默认开启,与持久索引sqlite_autoindex_*无关。WITHOUT ROWID表主键查找天然无需回表。实测验证了这些判定差异。
本文对比SQLite与PostgreSQL/InnoDB在进程模型、日志、锁和缓冲池四方面的机制差异。SQLite采用嵌入式库、单文件、文件级单写者,无服务器进程和共享缓冲池;PG/InnoDB则有多进程/线程、网络协议和共享缓存。文中强调WAL、snapshot等术语在不同系统中含义不同,需注意区分,并指出SQLite的写串行化与服务器行锁机制本质不同。
本文介绍SQLite的ATTACH DATABASE功能,允许一个连接同时操作多个数据库文件。跨库事务在rollback journal模式下通过super-journal机制保证原子性,但WAL模式下会退化为各文件独立原子。锁按文件独立跟踪,跨库写需在所有文件上获取EXCLUSIVE锁。事务进行中的库无法DETACH。同名表省略前缀时取最早挂载的库。
本文介绍SQLite完整性检查与损坏恢复机制。integrity_check检查B-Tree结构自洽性,quick_check跳过UNIQUE和索引一致性检查以提升速度。实测显示,数据字节被翻转后两者均报错,但.recover和.dump只能恢复表结构,无法找回已损坏数据。SQLite对正常崩溃有自动恢复能力,但对绕开正常路径的操作无防御,需靠备份和检查工具主动防护。
本文介绍SQLite事务的三种BEGIN模式:DEFERRED推迟取锁,IMMEDIATE立即获取RESERVED锁,EXCLUSIVE在WAL模式下与IMMEDIATE等价。SQLite通过写串行化实现SERIALIZABLE隔离,单写者模型天然避免write skew异象。WAL模式下快照过期会返回SQLITE_BUSY_SNAPSHOT,需回滚重试。COMMIT落盘时机由日志模式决定。
本文是SQLite内核系列第17篇(末篇),总结选型决策树:根据网络多写者、SQL需求、分析负载等条件,选择PostgreSQL/InnoDB、DuckDB、RocksDB或SQLite。SQLite适合嵌入式行存OLTP,单文件、零IPC、单写者。文章还提供站内阅读地图、学术谱系(如Bayer & McCreight 1972)及开放问题,如单写者权衡、WAL checkpoint策略等。
本文介绍SQLite在线备份机制。sqlite3_backup API通过pager读取页面,可分批执行并释放锁,生成一致快照;而cp热拷贝依赖内部写入时序,可能产生损坏。WAL模式下需连同-wal文件一起备份。实测验证了cp在写事务中拷贝会得到物理大小与逻辑页数不一致的副本。备份后应运行integrity_check确认完整性。
本文介绍SQLite的rollback journal机制,即写前拷贝的原子提交方式。它通过五级锁状态机管理写事务,将原始页备份到-journal文件,提交点通过删除、截断或清零journal头部实现。只有发生cache spill时才会产生hot journal,崩溃后下次打开数据库时自动恢复。与WAL模式不同,rollback journal写会短暂阻塞读。
SQLite WAL模式将改动追加至-wal文件,主文件不变,实现读写不互阻。checkpoint为必要操作,PASSIVE不缩文件,仅TRUNCATE截断至零。实测显示PASSIVE后主文件增大而WAL不变,TRUNCATE后归零。SQLite WAL与PostgreSQL WAL同名但机制不同,前者帧参与读路径,后者仅恢复用。权衡读放大与checkpoint频率仍为开放问题。
SQLite的B-Tree模块分为table b-tree(64位整数key,数据仅存叶子,近似B+Tree)和index b-tree(任意key,不存数据)。页内通过cell pointer array实现逻辑有序与物理位置解耦,插入时无需搬移已有内容。overflow阈值保证索引树最小扇出为4。查找从根页二分至叶子,分裂合并由balance()统一触发,分派至balance_deeper、balance_nonroot或balance_quick。
本文介绍SQLite的VDBE字节码执行引擎。sqlite3_prepare_v2将SQL编译为字节码程序,sqlite3_step在虚拟机上执行该程序。通过EXPLAIN分析点查SELECT name FROM t WHERE id=1,展示Transaction→OpenRead→SeekRowid→Column→ResultRow的执行流程。VDBE通过游标调用B-Tree,不直接读文件。强调opcode细节非稳定API,升级后需重新验证。
作者分享了使用SQLite作为Django网站数据库的经验,启用WAL模式和运行ANALYZE显著提高了查询性能。清理数据库时建议分批操作以避免超时。虽然当前Django ORM查询性能尚可,但未来可能考虑使用Postgres。备份方面,作者尝试了restic和Litestream,后者支持增量备份。整体上,作者对SQLite的使用体验积极,期待未来继续学习。
本文探讨了FoundationDB的存储引擎,重点比较了Redwood与SQLite派生引擎的区别。Redwood通过多版本B-Tree和前缀压缩技术,提高了吞吐量并降低了写放大。文章指出,存储引擎的选择不会影响分布式事务的隔离性,且引擎切换需谨慎。整体而言,Redwood在设计上弥补了SQLite引擎的不足,适应了更复杂的工作负载需求。
完成下面两步后,将自动完成登录并继续当前操作。