@drupflare/durabledb

中文文档
0.1.4发布于 2026/10/01MITTypeScriptES Module构建来源已验证近 30 天下载 2124

一个编码 Cloudflare 持久对象 SQLite 真实平台限制的编码器: 100 个绑定参数,一个50字节的类似图案,和2^53以上的丢失整数.

中文使用文档
文档目录10 节
  1. 目录
  2. 为什么
  3. QQ 安装
  4. 限制
  5. • 编码c
  6. 桥梁合同
  7. • API
  8. 测试
  9. 有关仓库
  10. 许可证

• 耐德布

Cloudflare 持久对象 SQLite 的真正限制, 编码而不是文件

Build Prettier codecov License

A 类 ctx.storage.sql 主机和一个编码平台实际工作的值编码器,不是 什么SQLite文档. ctx.storage.sql 在100个绑定参数上加盖语句 本地 PDO 允许 32,766, 拒绝 LIKE 模式超过50字节,有 无命名参数 完全没有上方的整数 2^53 (英语) 输了 每一个都是有分寸的拒绝 从一个已部署的物体,每个物体都有一个缺陷,一个地方的SQLite通过.


目录


为什么

一个持久对象的SQLite是一个真正的好家 一个小数据库:非常一致, 在与代码相同的隔离中,同步读取如此屏蔽的呼叫者与代码相组成. 然后,你以为自己是SQLite,而它否认SQLite所没有的东西.

拒绝书没有作为成套文件记录,不能作为金枪鱼,而且每份都未能完成 不同的寄存器: 参数封顶所抛出的错误, a 悄悄地打错了电话 (单位:千美元) 宽整数。 返回错误而不是出错的值,除了正确之外,不能告诉 输出直到以后很久.

因此极限活在代码中,作为被命名的常数和被命名的拒绝,每个极限有一个测试.


QQ 安装

bun add @drupflare/durabledb

3个切入点,拆分不是化妆品:

导入给你需求 @drupflare/cartridge
@drupflare/durabledb下面的一切对
@drupflare/durabledb/codecencode, (中文(简体) ), decode, (中文(简体) ), codecGuard, (中文(简体) ), PHP_CODEC没有
@drupflare/durabledb/do-sqliteSiteDurableObject, (中文(简体) ), toPositional, (中文(简体) ), bindable对

src/do-sqlite.ts 进口 @drupflare/cartridge/gate 财务报告和审定财务报表 /mask· ; src/codec.ts 无输入 所有,所以消费者只需要 代码支付不依赖。 没有深入的输入: exports 地图是整个地表,和 @drupflare/durabledb/src/codec.ts 被拒绝 解决者.


限制

每个都打破了真实的东西。 没有一个是保守的猜测.

限制数值东西坏了
每个声明的约束参数100个缓存写入路径; 冷 cache_discovery 需要设置 574个
LIKE 编号 : GLOB 模式长度50 字节绑定 简单 LIKE,不仅 GLOB因此,它是隐形 对于一个打电话者
每个记录的字节数2,199,995人次 (中文(简体) )堆积快照行
语句文本100 000个字符a 块 DDL 重放
整数读取2^53以上的损失写 9007199254740993读回 9007199254740992
已命名参数无每个 Drupal 查询; toPositional() 转换它们

有两个后果是:

写出宽整数是准确的;读取一是不准确的. ctx.storage.sql 输入栏 所以准确性在消费者看到之前就消失了. CAST(col AS TEXT) 返回每个数字,所以存储是好的;损失在光标中. UnreadableIntegerError 以作出拒绝而不是错误的回答.

"没有比一行还小的单位"是假的而这是这个项目的 未经证实 暂时相信 3个520KB行,每行翻过记录盖,然后看 不可分割; SQLite 用 col = col || ?。 。 。 .

[尖叫声] 永远不要扩大限制 因为测试通过. 这些来自一个部署的物体 和一个本地的 SQLite会欣然接受他们全部. 如果你认为错了, 重新测量部署 工人们说。 不要放松警卫.


• 编码c

消费者运行时间是 32 位数 PHP 原站点构建 (PHP_INT_SIZE 4),因此,任何联署材料号码在 2^31以上在入场途中静静地包裹. 测量: Date.now() 到达 PHP 时 -397708726 而不是~1.78e12。 分别发现了两个实例,一个时间戳和一个节点 id, 和找到两个单独 意味着该类仍然开放.

显而易见的修补, 串起任何不安全的东西, 在另一个方向是损失. PHP 接收 "1780000000000" 并且无法分辨它是大到无法表示的整数还是 真字符串; 发送后生成数字所属的字符串和腐败 晚点再来一次.

所以不能在本土交叉的值被包裹在一个有标记的信封里而不是被平分 decode() 确切的反向为 encode()数字 :

信封卡莉丝
{__t: 'i', v: '1780000000000'}32 位区域外的整数
{__t: 'n', v: '1.5e300'}非无限或精确的浮动
{__t: 'd', v: '1780000000000'}Date
{__t: 'b', v: '<base64>'}字节
{__t: 'u'}undefined,PHP没有单词

双方可代表的任何东西都没有被包裹,所以常见的路径一无所获.


桥梁合同

两个切入点,第二个是有趣的.

execSql(sql: string, params?: SqlBindings): ExecSqlResult
execTxn(req: TxnRequest): ExecTxnResult

execTxn 运行一个内部的语句列表 ctx.storage.transactionSync(),可选择使用 读取. commit: false 运行它们,评估同一交易内的读取,然后 扔出一个私人哨兵 所以运行时间卷回,和 仍然返回结果,哪个 是使推测行数和插入id成为可能的原因.

ExecTxnResult 是一种受歧视的结合,而不是一种带有选择性的形态:a 失败的回放已被回滚, 因此没有结果可以读取, 而 歧视是阻止打电话的人读这些东西的原因.


• API

导出这是什么
SiteDurableObject持久对象; execSql, (中文(简体) ), execTxn, (中文(简体) ), installBridge, (中文(简体) ), nowMs
encode 编号 : decode解码器,准确反相
codecGuard(host)将主机表面包起来, 这样每个值都会被编码
PHP_CODEC作为源代码的 PHP 半导体, 用于评价它的主机
toPositional(sql, params)重写命名参数, 因为引擎没有
bindable(value)一个值转换 sql.exec() 需求;联合来文 BigInt 被拒绝
UnreadableIntegerErrora 见上文2^53,拒绝而不是错误回答
ExecSqlResult{ rows, rowsRead, rowsWritten, lastInsertRowid, changes }
TxnRequest 编号 : TxnStatement 编号 : ExecTxnResult上面的重播合同
SqlBindingsunknown[] | Record<string, unknown> | null

测试

bun run typecheck
bun run test # 87 assertions across 3 specs
bun run test:coverage

87次通过,0次失败,按计量 61.68%的报表 (单位:千美元)codec.ts 82.29%, do-sqlite.ts 49.69%:持久物体路线和 alarm() 需要一个真实的 ctx.storage.sql故他们被覆盖 在消费者而不是在这里)。 车道开入 节点,而不是工人,和覆盖用途 provider: 'v8' 而不是说 istanbul。兄弟会的寄存器完全在同一轴上分裂:工人专用道必须使用 listanbul, 因为 v8 提供者从节点检查器读取覆盖, 属性为 0 隔离区内部;一个节点道使用v8.

套房建立在两个规则之上:

  • 解码器必须绕行. 能解码它无法编码的类型 的编码器是需要修复的bug, 不是一个跳过测试.
  • 失败的是拒绝而不是截取. 无法默默切出值 除了正确的输出,直到以后很久.

仓库这是什么
drupflare/worker消费者:Cloudflare工人上的Drupal 11
drupflare/romcomposer require drupflare/rom:0.*坐在顶端的德鲁帕尔11号司机
drupflare/cartridge后退门并中断此包的导入

许可证

MIT (c) 格雷戈里·米切尔 2026. 见 自由主义。 。 。 .

版本与发布记录

@drupflare/durabledb 共发布 5 个版本,首次发布于 2026/08/14;过去 12 个月发布了 5 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.1.4latest2026/10/011 个月前
0.1.32026/08/292 个月前
0.1.22026/08/222 个月前
0.1.12026/08/152 个月前
0.1.02026/08/143 个月前

关于 @drupflare/durabledb 的常见问题

@drupflare/durabledb 是什么?

一个编码 Cloudflare 持久对象 SQLite 真实平台限制的编码器: 100 个绑定参数,一个50字节的类似图案,和2^53以上的丢失整数.

如何安装 @drupflare/durabledb?

在项目目录运行 npm install @drupflare/durabledb,或使用 pnpm add / yarn add / bun add。

@drupflare/durabledb 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@drupflare/durabledb 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@drupflare/durabledb 可以商用吗?

@drupflare/durabledb 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@drupflare/durabledb 的下载量有多少?

根据 npm 官方下载统计,@drupflare/durabledb 在 2026/10/13 – 2026/11/11 这 30 天内被下载 2,124 次,日均约 71 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@drupflare/durabledb 还在维护吗?

最新版本 0.1.4 发布于 2026/10/01(1 个月前);至今共发布 5 个版本,其中过去 12 个月发布了 5 个;首次发布于 2026/08/14。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。