PureDb 1.0.0-preview.3

This is a prerelease version of PureDb.
dotnet add package PureDb --version 1.0.0-preview.3
                    
NuGet\Install-Package PureDb -Version 1.0.0-preview.3
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="PureDb" Version="1.0.0-preview.3" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="PureDb" Version="1.0.0-preview.3" />
                    
Directory.Packages.props
<PackageReference Include="PureDb" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add PureDb --version 1.0.0-preview.3
                    
#r "nuget: PureDb, 1.0.0-preview.3"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package PureDb@1.0.0-preview.3
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=PureDb&version=1.0.0-preview.3&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=PureDb&version=1.0.0-preview.3&prerelease
                    
Install as a Cake Tool

PureDb — 纯 .NET 10 文件数据库

CI NuGet License: MIT

PureDb 使用 C# 和 .NET 10 标准库实现嵌入式数据库,提供 KV、SQL、JOIN、JSON、事务、多线程写入、多进程访问和 ADO.NET。核心与可选 SQLite 文件兼容库均无原生库和第三方 NuGet 依赖。

当前预览版:1.0.0-preview.3,主库与可选兼容包版本一致。 本版优化计划缓存、解码、JSON 派生表达式和检查点,并扩展纯托管 SQLite 文件格式支持。SQL、文件协议和事务能力有明确边界;当前没有在所有性能、CPU、内存指标上超过 SQLite。

SQL 支持与不支持清单 · 安装与使用 · ADO.NET · SQLite 文件兼容 · 全面性能表 · CPU / 内存谁更高 · 可筛选性能面板 · 原始结果 · 自动发布

主分支已包含 复合索引、外键、CHECK、UPSERT、视图、行触发器、CTE、窗口、相关子查询、集合运算、JSON5 / JSON 表函数、SQL 事务和保存点,以及 C# 用户函数、查询快路径和中文注释。各项限制、示例和未支持语法集中见 SQL 清单。下面的功能矩阵对应 main 源码;全面性能表已使用本轮冻结的 preview.3 构建在 Windows 和 Linux ARM64 完整重测,另有 排序专项报告 和 本轮优化前后对照 和 AOT 完整报告。开发验证 与 扩展进度 记录实际验证和剩余工作。

安装

安装已发布的 NuGet 版本:

dotnet add package PureDb --version 1.0.0-preview.3
# 需要原地读取/修改受支持的 SQLite 文件时额外安装:
dotnet add package PureDb.SqliteCompatibility --version 1.0.0-preview.3

也可从 main 构建源码;构建及本地打包命令见文末。两个包的版本统一由 Directory.Build.props 定义,变更见 CHANGELOG。

using PureDb;

await using var db = new SqlDatabase("app.pdb");
await db.ExecuteAsync("CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY,name TEXT NOT NULL,profile JSON)");
await db.ExecuteAsync("INSERT INTO users VALUES(@id,@name,@profile)",
    new Dictionary<string, object?>
    {
        ["id"] = 1L, ["name"] = "小明", ["profile"] = "{\"age\":25}"
    });
var result = db.Query("SELECT name,json_extract(profile,'$.age') AS age FROM users WHERE id=@id",
    new Dictionary<string, object?> { ["id"] = 1L });
Console.WriteLine(result.Rows[0][0]);

KV 使用 Database,SQL 使用 SqlDatabase,各自使用独立文件。SQL 表需要 INTEGER PRIMARY KEY,主键范围 [0, 2^40)。

preview.3 支持将 C# 方法注册为 SQL 标量函数,SqlDatabase 和 ADO.NET 连接都提供相同入口:

db.CreateFunction<string?, bool>("RELIGIBLE", user => user is "Alice" or "小明");
var eligible = db.Query("SELECT * FROM users WHERE RELIGIBLE(name)");

函数按连接、名称和参数数量注册,可替换或移除。强类型入口直接调用委托,布尔结果复用 SQL 0/1 对象,省去逐行参数数组和布尔装箱;NULL、BLOB 复制和业务异常仍经过边界检查。使用方法及限制见 用户函数。

与 SQLite 功能对比

基准:PureDb 1.0.0-preview.3 预览版 / SQLite 3.54.1。✅ 已实现,⚠️ 有限制或需额外组件,❌ 尚未实现。功能标记表示支持范围,不表示相同的实现、成熟度或性能。

功能 PureDb SQLite
纯 .NET、无原生依赖 ✅ 核心和兼容库均为托管 C# ⚠️ 原版为 C 内核,.NET 通常通过原生绑定使用
嵌入式文件数据库 ✅ 自有追加日志及索引侧文件 ✅ SQLite 数据文件及可选日志侧文件
KV / SQL API ✅ 独立 KV 与 SQL API ⚠️ 通过 SQL 表实现 KV
参数化 SQL、增删改查 ✅ 支持的 SQL 子集 ✅ 更完整的 SQL 方言
INNER / LEFT / RIGHT / FULL / CROSS JOIN ✅ 哈希查找或通用循环执行 ✅ 支持
GROUP BY / HAVING / ORDER BY / LIMIT ✅ 支持 ✅ 支持
应用自定义 SQL 函数 ⚠️ C# 标量函数、强类型和可变参数入口;自定义聚合、窗口和表值函数尚未实现 ✅ 标量、聚合、窗口及表值扩展接口
普通、唯一、JSON 路径索引 ✅ 单列及指定表达式 ✅ 支持更多索引形态
复合索引 ⚠️ 左前缀、范围、混合排序及唯一性;定义持久化,数据惰性内存构建 ✅ 支持分页增量索引
CHECK / UPSERT ⚠️ 列级及表级 CHECK;单分支冲突插入或更新,详细边界见 SQL 清单 ✅ 支持更完整冲突语法
外键、视图、触发器 ⚠️ 外键五种动作及延迟校验、普通视图、行触发器;受支持模式也可写入 SQLite 文件 ✅ 支持更多模式及控制选项
CTE、窗口函数、子查询、集合 ⚠️ 普通/受控递归 CTE、排名/偏移/聚合窗口、相关子查询、UNION/INTERSECT/EXCEPT ✅ 支持更完整语法和优化
JSON 文本、路径查询与修改 ✅ 已实现函数及路径子集 ✅ JSON 函数及操作符
JSONB ⚠️ 自有 PJB1 格式,与 SQLite JSONB 不互通 ✅ SQLite 自有 JSONB 格式
JSON5 / json_each / json_tree ⚠️ 已实现;深度 128,节点 ID 与 SQLite 不同 ✅ 支持
批量新增、更新、删除 ✅ 单事务多操作、区间 DML ✅ 事务及 SQL 批处理
多线程写入 ✅ 有界队列、单写入者、分组刷盘 ✅ 多连接协调,写事务串行
多进程访问 ✅ 原生格式 Shared 模式 ✅ 文件锁;WAL 支持并发读取
ADO.NET ✅ 内置 Connection / Command / Reader / Transaction ⚠️ 使用 Microsoft.Data.Sqlite 等额外提供程序
事务 ⚠️ BEGIN / COMMIT / END / ROLLBACK;乐观 Serializable,Shared 只支持 DEFERRED ✅ SQLite 事务及文件锁协议
SAVEPOINT / ROLLBACK TO / RELEASE ✅ SQL 与 ADO.NET 保存点、DDL 回滚 ✅ 支持
完整 SQLite SQL / 类型 / 锁协议 ❌ 支持子集,完整边界见 SQL 清单 ✅ 原生实现
启动恢复、校验、压缩 ✅ 检查点、CRC32、日志恢复、Compact ✅ 日志恢复、integrity_check、VACUUM
原地读写 SQLite 文件 ⚠️ 可选纯 .NET 兼容包;八种页大小 / 三种编码 / 受限模式 / 独占回滚日志子集 ✅ 原生完整协议
SQLite WAL 文件协议兼容 ❌ 兼容包拒绝 WAL ✅ 支持
Native AOT ✅ 核心与纯托管兼容库;Windows x64、Linux x64、Linux ARM64 流水线实际运行 ⚠️ C 内核可编译为本机代码,.NET 宿主取决于绑定
跨平台验证 ✅ Windows x64、Linux ARM64 实测;Linux x64 CI ✅ 多平台

SQLite 能力依据官方 SQL 文档、自定义函数、JSON 文档、WAL 文档;其 .NET 提供程序见 Microsoft.Data.Sqlite。PureDb 的逐类语法、例子、原理和限制见 SQL 支持清单。

本轮优化与兼容性验收

固定 19 项读取/重开使用同一宿主仅替换内核,与 SQLite 串行轮换三轮;没有剔除退化项。精确前后收益见 优化报告。完整 41 项及 CPU/RSS 分开报告;性能仍没有全面超过 SQLite。

SQL 固定公开语料 175 条、SQLite 文件正向 profile 与崩溃恢复 64 组,Windows x64 和 Linux ARM64 分别验证。分母、通过率和未覆盖能力见 兼容性报告;这不是整体 SQLite 兼容性 95% 的声明。文件模式性能单独见 兼容后端专项。

全部 41 项对比

博客园独立文章:实现原理、功能对照、真实性能图与限制。

Native AOT 发布对比

平台 AOT 运行文件 MiB:PureDb / SQLite PureDb 全进程启动 ms:JIT → AOT AOT 耗时:领先 / 落后 / 接近
Windows x64 6.18 / 5.72 225.75 → 34.65 13 / 2 / 0
Linux ARM64 6.12 / 3.79 379.55 → 20.30 11 / 4 / 0

SQLite 体积包含其原生库;AOT 体积是本次应用发布闭包。详细 CPU、RSS、增删改及方法见 AOT 完整报告。

主分支 preview.3 排序专项

10 万行热缓存排序,三轮中位数;数值越低越好。此表对应主分支 preview.3 源码,CPU 是每次查询消耗的时间。

平台 场景 PureDb 耗时 µs SQLite 耗时 µs 耗时谁更低 PureDb CPU µs SQLite CPU µs CPU 谁更低
Windows x64 排序取 20 行 1,651.101 5,425.296 🟩 PureDb 3.29× 1,648.352 5,395.683 🟩 PureDb 3.27×
Windows x64 降序取 20 行,跳过 100 行 1,831.496 6,310.576 🟩 PureDb 3.45× 1,829.268 6,433.824 🟩 PureDb 3.52×
Windows x64 排序取 4096 行 5,808.618 12,520.362 🟩 PureDb 2.16× 5,769.231 12,551.230 🟩 PureDb 2.18×
Windows x64 主键范围取 20 行(对照) 2.090 6.857 🟩 PureDb 3.28× 2.046 6.850 🟩 PureDb 3.35×
Linux ARM64 排序取 20 行 3,143.483 8,865.853 🟩 PureDb 2.82× 3,143.502 8,867.141 🟩 PureDb 2.82×
Linux ARM64 降序取 20 行,跳过 100 行 4,077.483 9,284.931 🟩 PureDb 2.28× 4,078.562 9,286.074 🟩 PureDb 2.28×
Linux ARM64 排序取 4096 行 15,697.873 21,146.622 🟩 PureDb 1.35× 15,694.375 21,214.528 🟩 PureDb 1.35×
Linux ARM64 主键范围取 20 行(对照) 6.701 10.923 🟩 PureDb 1.63× 6.699 10.923 🟩 PureDb 1.63×

托管分配相对优化前的变化、全部四个场景及方法见 排序专项报告。分配减少不等于 RSS 降低;此专项不代表全部 SQL 已超过 SQLite。

主分支 preview.3 与 SQLite 全面对比

下方完整对比对应本轮 preview.3 发布构建。 Windows 与 Linux ARM64 使用同一份 DLL;旧的全面对比记录已替换。本轮优化的收益与仍落后项目见 优化报告。

1.0.0-preview.3 本轮发布构建原生格式 vs SQLite 3.54.1,同机三轮中位数。CPU 为满吞吐进程占用,内存为单库独立测量。使用率高不代表每次查询更费 CPU。以下是代表场景,全部 41 项、ADO、CPU 和文件数据见完整报告。

平台 PureDb 耗时胜 SQLite 耗时胜 接近
Windows x64 32 8 1
Linux ARM64 26 14 1

Windows x64

项目 PureDb SQLite 谁更低
SQL 主键完整行(µs/queries) 0.323 5.304 🟩 PureDb 16.44×
SQL 范围 20 行(µs/queries) 2.305 14.827 🟩 PureDb 6.43×
INNER JOIN(µs/queries) 0.951 10.562 🟩 PureDb 11.11×
JSON 表达式索引(µs/queries) 2.069 21.854 🟩 PureDb 10.56×
JSON 整数取余计数(µs/queries) 4.784 515.405 🟩 PureDb 107.74×
Full 逐条新增(µs/rows) 26,346.146 31,760.512 🟩 PureDb 1.21×
Full 逐条更新(µs/rows) 24,950.604 30,655.058 🟩 PureDb 1.23×
Full 逐条删除(µs/rows) 25,818.259 24,983.782 🟨 接近
Full 批量新增(µs/rows) 42.384 57.303 🟩 PureDb 1.35×
Full 批量更新(µs/rows) 38.616 54.922 🟩 PureDb 1.42×
Full 批量删除(µs/rows) 36.581 59.050 🟩 PureDb 1.61×
Buffered 批量新增(µs/rows) 2.146 1.761 🟥 SQLite 1.22×
Buffered 批量更新(µs/rows) 2.442 25.321 🟩 PureDb 10.37×
Buffered 批量删除(µs/rows) 1.387 23.193 🟩 PureDb 16.72×
四进程读取(µs/queries) 36.189 15.671 🟥 SQLite 2.31×
四进程原子更新(µs/updates) 228.206 179.760 🟥 SQLite 1.27×
重开并首次范围查询(µs/opens) 721.320 637.020 🟥 SQLite 1.13×
内存场景 PureDb RSS MiB SQLite RSS MiB 谁更高、高多少
point 87.00 78.85 PureDb 更高:多 8.15 MiB,高 10.3%
range 56.28 56.56 SQLite 更高:多 0.28 MiB,高 0.5%
json 61.60 45.41 PureDb 更高:多 16.19 MiB,高 35.6%
主键查询 CPU 指标 PureDb SQLite 谁更高、高多少
占整机 CPU % 8.333 8.333 显示精度内相同
每次查询 CPU µs 0.323 5.304 SQLite 更高:多 4.981 µs,高 1543.5%

Linux ARM64

项目 PureDb SQLite 谁更低
SQL 主键完整行(µs/queries) 0.887 3.537 🟩 PureDb 3.99×
SQL 范围 20 行(µs/queries) 5.186 20.521 🟩 PureDb 3.96×
INNER JOIN(µs/queries) 5.431 12.535 🟩 PureDb 2.31×
JSON 表达式索引(µs/queries) 5.156 31.085 🟩 PureDb 6.03×
JSON 整数取余计数(µs/queries) 13.442 684.088 🟩 PureDb 50.89×
Full 逐条新增(µs/rows) 1,011.368 871.288 🟥 SQLite 1.16×
Full 逐条更新(µs/rows) 1,070.350 1,165.722 🟩 PureDb 1.09×
Full 逐条删除(µs/rows) 912.815 1,084.716 🟩 PureDb 1.19×
Full 批量新增(µs/rows) 17.696 9.516 🟥 SQLite 1.86×
Full 批量更新(µs/rows) 19.960 16.874 🟥 SQLite 1.18×
Full 批量删除(µs/rows) 10.210 7.404 🟥 SQLite 1.38×
Buffered 批量新增(µs/rows) 12.141 3.331 🟥 SQLite 3.64×
Buffered 批量更新(µs/rows) 11.529 8.298 🟥 SQLite 1.39×
Buffered 批量删除(µs/rows) 5.156 5.146 🟨 接近
四进程读取(µs/queries) 92.305 36.853 🟥 SQLite 2.50×
四进程原子更新(µs/updates) 265.254 59.532 🟥 SQLite 4.46×
重开并首次范围查询(µs/opens) 647.320 506.560 🟥 SQLite 1.28×
内存场景 PureDb RSS MiB SQLite RSS MiB 谁更高、高多少
point 101.80 77.64 PureDb 更高:多 24.15 MiB,高 31.1%
range 74.25 56.73 PureDb 更高:多 17.52 MiB,高 30.9%
json 75.75 49.68 PureDb 更高:多 26.08 MiB,高 52.5%
主键查询 CPU 指标 PureDb SQLite 谁更高、高多少
占整机 CPU % 13.935 12.532 PureDb 更高:多 1.404 个百分点,高 11.2%
每次查询 CPU µs 0.989 3.546 SQLite 更高:多 2.557 µs,高 258.4%

🟩 PureDb 更低,🟥 SQLite 更低,🟨 差距小于 5%。耗时、CPU 时间、驻留内存分别评判。 KV 对 SQL、纯 SQL 对 SQL、ADO.NET 对 SQLite C API 的接口差异在报告中单独说明。热缓存与重复聚合的优势不能外推到所有业务。

原理、实现思路与技术

1. 分层:SQL 与存储引擎解耦

flowchart TD
  A[SQL / ADO.NET] --> B[解析 AST 与参数绑定]
  B --> C[执行计划缓存 / 专用查询路径]
  C --> D[ISqlStorage]
  K[KV API] --> E[PureDb 原生存储]
  D --> E
  D -. 可选兼容包 .-> S[SQLite B-tree / 回滚日志后端]
  E --> W[写入队列与事务提交]
  W --> L[追加日志与 CRC32]
  E --> I[分页检查点与整数索引]
  E --> P[数据页与热点缓存]

核心项目包含原生存储、SQL 和 ADO.NET。PureDb.SqliteCompatibility 单向依赖核心,实现同一存储抽象,核心不依赖兼容库。默认创建的是 PureDb 文件;只有显式使用兼容入口才处理 SQLite 文件。

2. 存储:追加日志、校验与分页检查点

提交将变更编码为事务帧,记录长度、长度反码、CRC32 和操作列表,顺序追加到日志。值留在磁盘,主键索引保存值的位置、长度及校验信息。追加设计减少原地随机修改,但会累积旧版本,需要压缩回收。

主索引由分页持久化检查点、内存增量与有界热点页组成。有效检查点存在时,打开只读元数据,再恢复检查点之后的日志尾部;检查点缺失或失效则扫描重建。数据库变大不要求每次都加载全部数据,但恢复尾部、重建和完整校验仍可能与数据量相关。整数 SQL 索引也以页为单位延迟读取。

默认按访问验证索引页和数据值的 CRC。覆盖索引只访问索引时,不会同时扫描未请求的数据负载;VerifyOnOpen / VerifyIntegrity 用于完整校验。校验和用于发现损坏,不等同于纠错。

源码:原生引擎、主索引与检查点、分页索引。

3. 写入:有界队列、批量事务与分组提交

Full 写入通过 Channel 有界队列进入单写入者,合并一组请求的日志写入与刷盘,分别保留事务边界,并在确认前完成刷盘。一个批次包含多条变更时,共享编码、提交和同步成本。Buffered SQL 可以在调用线程提交,减少队列往返,但它和 SQLite WAL/NORMAL 的 checkpoint、关闭及断电行为不同。

ReaderWriterLockSlim 协调实例内访问;Shared 模式使用命名 Mutex、协调戳内存映射及日志追赶处理多进程更新。协调戳是缓存提示,日志与代际校验才是恢复依据。写入仍然串行,更多线程不保证线性加速。

源码:写入与恢复、SQL 事务。

4. 查询:识别常见形状,减少通用执行开销

SQL 先解析成 AST,再缓存参数绑定、列投影和受支持的执行计划。主键查询直接定位记录;只投影主键时可使用覆盖索引。整数范围查询以精确二分为基础,增加经过实际键验证的估算探测;偏斜或不适合的分布保留精确查找。小 LIMIT 验证最后候选键后,减少另一端边界搜索和读页。

区间 UPDATE / DELETE 直接读取目标范围,避免先解码整表;没有 UNIQUE 约束时省去约束集合。通用谓词和不支持的优化形状走通用执行器,不能把专用路径的倍率当作所有 SQL 的速度。

主分支持续使用小分页排序:输入未满足 ORDER BY、无分组及 DISTINCT、OFFSET + LIMIT <= 4096 时,用 PriorityQueue 保留最好的 K 行,堆顶始终是最差候选。纯列查询只保留输入行引用,入选后再生成结果投影;含表达式时,淘汰候选的投影与键数组作为下一行缓冲区复用。排序候选的保留空间从随 N 行增长降到随 K 行增长;比较工作为 O(N log K),已命中索引顺序的查询继续直接分页。

比较器复用 SQL 的 NULL、整数/实数、文本和 BLOB 规则,整数对整数先直接比较,省去 JSON 解包和存储类别判断,并以原始输入序号保持相同键的稳定顺序。含表达式的查询仍逐行执行投影,ORDER BY 别名复用投影值,易变 C# 函数每行调用次数及未入选行异常保持一致。大分页、分组、去重回退到原执行器;表缓存、函数结果和最终输出仍有额外内存,O(K) 只描述排序候选缓冲区。

源码:查询分派、有界排序、范围查询、区间 DML。

5. JOIN、聚合、JSON 与 SIMD

等值 JOIN 可使用缓存哈希查找及直接投影,其他形状保留通用循环。无过滤 COUNT 使用维护的精确计数;分组计数可复用按数据版本生成的统计与排序结果。写入后会失效或重建,缓存有内存和首次建立成本。

JSON 路径及解析结果可复用;整数派生列采用连续数组,对受支持的“正的 2 次幂取余等于零”计数使用 System.Numerics.Vector<long> 位运算,保留 NULL 和负数语义。其他条件走标量或通用路径。CRC32 同样有硬件/向量路径与回退。硬件通道数不等于实测加速倍率。

PureDb 在部分用例比 SQLite 快,主要来自这些专用路径、版本化缓存和减少物化工作;SQLite 也使用索引和字节码执行。本项目同时保存参测 SQLite 的 EXPLAIN 计划,避免把优势误解成“SQLite 没有索引”。

源码:JOIN、聚合、SIMD 计数、JSON、CRC。

6. 内存、ADO.NET 和兼容模式的边界

数据页缓存默认 64 MiB,SQL 行缓存另有 64 MiB 估算预算,索引、执行计划、结果和运行时还有额外占用,不能把缓存预算当成进程内存上限。BLOB 返回独立副本;数据和模式版本决定缓存何时失效。当前内存占用仍有弱于 SQLite 的场景。

ADO.NET 提供 Connection、Command、Parameter、DataReader、DbTransaction 和 ProviderFactory。事务使用带冲突检测的乐观 Serializable;调用方需要处理冲突重试。ADO.NET 兼容不等于已兼容所有 ORM 及完整 SQLite SQL。

兼容包实现 SQLite B-tree 页、record 编码、overflow 和回滚日志子集;仅允许声明的格式及独占使用方式。默认写入可能重建整库,实验增量更新只覆盖特定页内修改,其他情况回退。WAL、未知模式和未实现协议明确拒绝。详细限制见 兼容文档。

构建、验证与复现

需要 .NET SDK 10.0.402。核心无第三方包,NuGet.Config 可离线恢复。SQLite 原生库仅用于测试和对比,不进入发布包。

dotnet build PureDb.slnx -c Release
dotnet pack src/PureDb -c Release --no-build -o artifacts/packages
dotnet pack src/PureDb.SqliteCompatibility -c Release --no-build -o artifacts/packages
python scripts/prepare-sqlite.py
python scripts/test.py
# 小分页排序专项,与 SQLite 核对结果后测量耗时、CPU 时间和托管分配:
dotnet run -c Release --no-build --project tests/PureDb.SortTests -- --measure
# 创建 10 万行数据集,然后以程序输出的目录运行:
dotnet run -c Release --no-build --project benchmarks/PureDb.QueryBenchmarks -- 100000 1
python scripts/run-benchmarks.py artifacts/new-comparison DATASET --tests --memory --ado

CI 在 Windows / Linux 上构建并运行回归和 SQLite 差分查询,检查中文源码文档、格式及实际 NuGet 包。性能测量按主机串行进行;仓库分别保留 完整预览版对比、用户函数专项 和 本次排序优化前后 的最新证据,不保存测试数据库或运行库二进制。复现细节见 基准方法。

preview.3 的实现调整

已解析语法树不可变,计划缓存改用 AST 对象身份及表/模式上下文键,省去重复 record 递归哈希。小整数装箱复用不可变对象;全列顺序投影直接顺序解码,重排/重复列回退原路径,BLOB 仍复制。JSON 派生计数弱缓存规范化表达式,只减少表达式树重建,数据按版本失效、参数和计数仍实际求值。

检查点直接归并已有排序索引和新增部分,避免全量主键重新排序;计数使用单次字典定位。CRC、边界、刷盘顺序和 Shared 故障恢复没有放宽。已有 ARM CRC32 和 JSON SIMD 已存在于基线,本轮没有把它们再次计为新增优化。

密集 KV 主键的热点页通过有界数组目录直接定位,省去重复散列;目录按行数及预算分配,稀疏高位键保留字典路径。相同编码的查询不反复写线程状态,跨编码嵌套用户函数仍保存和恢复上下文。并发初始化、目录边界、写后失效、压缩及重开均有验证。

兼容包保留 SQLite 页尺寸与文本编码,按编码执行 BINARY 排序和文本/BLOB 转换。模式渲染器保存复合索引方向、DEFAULT、CHECK、外键、视图与触发器。完整镜像回退仅备份实际覆盖和截断的旧页,但镜像构建仍随库大小增长;实验增量路径不覆盖任意 SQL。更多原理见 优化报告 和 文件协议边界。

自动发布与许可

main 当前版本为 1.0.0-preview.3。合并或推送主分支会运行 CI;发布对应的 v1.0.0-preview.3 标签后,发布流水线 才会校验版本、执行 Windows / Linux 测试、打包两个纯 .NET 包、发布至 NuGet 并创建 GitHub 预发布。仓库需要配置 Actions Secret NUGET_API_KEY;失败的任务会停止后续发布。NuGet 的两个包独立接收上传,跨包发布不具有原子性。详见 发布说明。

项目采用 MIT。CRC 向量实现的来源和版权声明见 第三方声明。

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net10.0

    • No dependencies.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on PureDb:

Package Downloads
PureDb.SqliteCompatibility

Optional, fully managed SQLite format 3 compatibility for PureDb. Preview: exclusive rollback journal access; WAL is not supported.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0-preview.3 23 10/26/2026
1.0.0-preview.2 56 10/24/2026
1.0.0-preview.1 49 10/24/2026