记录技术与思考

清晰表达、持续积累、长期主义。

10-索引系统:自动索引、唯一索引与 B+ 树

TinyDb 索引链路由 3 层组成:IndexScanner:扫描实体特性并自动建索引。IndexManager:集合级索引生命周期管理。BTreeIndex / DiskBTree:底层 B+ 树存储与检索。1. 自动索引从哪里来DocumentCollection<T> 构造时会调用:CreateAutoIndexes();内部就是

09-查询执行链路:从表达式到执行计划

TinyDb 查询链路可以分成 4 层:Queryable<T> 接收 LINQ 表达式。QueryShapeExtractor 提取可下推条件。QueryOptimizer 生成执行计划。QueryExecutor 按策略执行(主键查找/索引扫描/全表扫描)。1. 入口:Query() 与 IQueryableDocumentColle

07-引擎启动与恢复:TinyDbEngine 如何初始化数据库

本文按 TinyDbEngine 真实代码路径拆解启动流程,重点回答三个问题:新库和旧库是如何区分的?WAL 恢复何时触发?初始化后哪些核心组件会被装配?1. 构造函数入口入口在:TinyDbEngine(string f, TinyDbOptions? o = null)internal TinyDbEngine(string f, T

06-密码保护与安全访问:正确打开方式

TinyDb 的安全模型是“数据库级密码保护”:通过数据库头部安全元数据保存盐值与派生密钥信息,访问时验证密码。1. 创建受保护数据库(推荐)最直接的方式:TinyDbOptions.Password。using TinyDb.Core; var options = new TinyDbOptions { Password =

05-异步 API 与取消令牌:高并发下的写法

TinyDb 的集合接口提供了完整异步版本:InsertAsync / UpdateAsync / DeleteAsync / FindAsync / UpsertAsync。这篇文章给出在 Web API、后台任务中可直接复用的写法。1. 为什么要用异步避免同步 I/O 阻塞线程池。提升高并发请求下的吞吐。更容易接入超时与取消控制。2.

04-事务与保存点:如何保证一致性

当业务有“要么都成功,要么都失败”的要求(如余额转账、库存扣减+订单创建),就必须使用事务。TinyDb 的事务入口在 TinyDbEngine.BeginTransaction()。1. 最小事务模板using var db = new TinyDb.Core.TinyDbEngine("tx.db"); var users = db.

03-LINQ 查询实战:过滤、排序、分页、聚合

TinyDb 的查询入口有两种:Find/FindOne/Count/Exists:语义明确,适合简单筛选。Query():IQueryable<T> 风格,适合链式组合。本文重点是“业务可落地”的查询写法。1. 准备实体与数据using TinyDb.Attributes; using TinyDb.Bson; [Entity("em

02-CRUD 与批量操作:从单条到批处理

在 TinyDb 里,ITinyCollection<T> 同时提供同步与异步、单条与批量 API。本文聚焦同步路径,下一篇讲异步。1. 单条 CRUD 基础范式using TinyDb.Attributes; using TinyDb.Bson; using TinyDb.Core; [Entity("products")] publ

01 - 5分钟快速开始:从安装到第一条数据

这篇文章只做一件事:让你在最短时间内把 TinyDb 跑起来,并完成一条完整的数据读写。1. 安装dotnet add package TinyDb2. 定义实体TinyDb 的 AOT 友好路径依赖 [Entity]。建议你所有需要持久化的类型都显式标注。using TinyDb.Attributes; using TinyDb.Bso