@alcalzone/jsonl-db

中文文档
4.0.2发布于 2025/10/15MITESM + CJS构建来源已验证近 30 天下载 10.7万

简单的基于 JSONL 的密钥值商店

中文使用文档
文档目录48 节
  1. 使用量
  2. 处理无效的数据
  3. 支持自定义对象/值
  4. 关闭数据库
  5. 控制文件系统访问
  6. 与锁定文件相关的选项
  7. 复制和压缩数据库
  8. 跟踪时间戳
  9. 导入/导出
  10. 更改日志
  11. 4.0.2 (2025-10-15) (中文(简体) )
  12. 4.0.1 (2025-10-14) (中文(简体) )
  13. 4.0.0 (2025-10-07) (中文(简体) )
  14. 3.1.1 (2024-01-25) (中文(简体) )
  15. 3.1.0 (2023-03-15) (中文(简体) )
  16. 3.0.0 (2023-03-09) (中文(简体) )
  17. 2.5.3 (2022-09-06) (中文(简体) )
  18. 2.5.2 (2022-05-02) (中文(简体) )
  19. 2.5.1 (2022-02-13) (中文(简体) )
  20. 2.5.0 (2022-02-13) (中文(简体) )
  21. 2.4.3 (2022-02-09) (中文(简体) )
  22. 2.4.2 (2022-02-09) (中文(简体) )
  23. 2.4.1 (2021-12-30) (中文(简体) )
  24. 2.4.0 (2021-12-27) (中文(简体) )
  25. 2.3.0 (2021-12-19) (中文(简体) )
  26. 2.2.0 (2021-10-15) (中文(简体) )
  27. 2.1.0 (2021-06-22) (中文(简体) )
  28. 2.0.0 (2021-06-19) (中文(简体) )
  29. 1.2.5 (2021-05-29) (中文(简体) )
  30. 1.2.4 (2021-02-15) (中文(简体) )
  31. 1.2.3 (2021-01-02) (中文(简体) )
  32. 1.2.2(2020-10-16)
  33. 1.2.1 (2020-08-20) (中文(简体) )
  34. 1.2.0 (2020-05-25) (中文(简体) )
  35. 1.1.2 (2020-05-11) (中文(简体) )
  36. 1.1.1 (2020-05-07) (中文(简体) )
  37. 1.1.0 (2020-05-02) (中文(简体) )
  38. 1.0.1(2020-04-29) (中文(简体) )
  39. 1.0.0 (2020-04-29) (中文(简体) )
  40. 0.5.1 (2020-04-28) (中文(简体) )
  41. 0.5.0 (2020-04-27) (中文(简体) )
  42. 0.4.0 (2020-04-27) (中文(简体) )
  43. 0.3.0 (2020-04-26) (中文(简体) )
  44. 0.2.0 (2020-04-25) (中文(简体) )
  45. 0.1.3 (2020-04-25) (中文(简体) )
  46. 0.1.2 (2020-04-25) (中文(简体) )
  47. 0.1 (2020-04-25) (中文(简体) )
  48. 0.1.0 (2020-04-25) (中文(简体) )

日报b

简单的基于JSONL的密钥价值商店. 使用附件文件存储数据。 支持数据库堆放并压缩db文件.

Build Status

node npm

使用量

装入模块 :

import { DB } from "@alcalzone/jsonl-db";

打开或创建数据库文件并像使用 Map

// Open
const db = new DB("/path/to/file");
await db.open();
// db.isOpen is now true

// and use it
db.set("key", value);
db.delete("key");
db.clear();
if (db.has("key")) {
    result = db.get("key");
}
// ...forEach, keys(), entries(), values(), ...

处理无效的数据

如果打开 DB 时遇到损坏的数据, 调用到 open() 将被拒绝。 如果需要, 请使用构造器上的选项参数来打开“ 原谅” 行为 :

const db = new DB("/path/to/file", { ignoreReadErrors: true });
await db.open();

警告: 这可能导致数据不一致,因为无效行会被默默地忽略.

支持自定义对象/值

您可以通过传回函数来可选地转换解析值 。 如果可以转换为JSON(例如通过覆盖 toJSON 页:1 要控制转换值在保存到数据库之前,使用序列器函数. 这是必需的 Maps, (中文(简体) ), Sets, (中文(简体) ), WeakMaps 和 WeakSet编号.

function reviver(key: string, serializedValue: any) {
    // MUST return a value. If you don't want to transform `serializedValue`, return it.
}

function serializer(key: string, value: any) {
    // MUST return a value. If you don't want to transform `value`, return it.
}

const db = new DB("/path/to/file", { reviver, serializer });
await db.open();

关闭数据库

编写给数据库的数据是同步的。 一定要打电话 close() 当您不再需要数据库来冲出所有待写并关闭所有文件时:

await db.close();

现在, db.isOpen 实值 false。当 db 不打开时,任何访问数据的呼叫都会出错.

控制文件系统访问

默认情况下,数据库会立即写入数据库文件. 您可以使用 throttleFS 构造器选项 。 注意缓冲数据会丢失,以防进程崩溃.

const db = new DB("/path/to/file", { throttleFS: { /* throttle options */ } });

现有以下选项:

选项默认说明
intervalMs0写入数据库文件的时间不超过每个 intervalMs 毫秒长.
maxBufferedCommands+Infinity强制写入后面 maxBufferedCommands 已经缓冲。 这降低了发生相撞时的内存消耗和数据损失.

在 /path/to/file.dump,使用 dump() 方法。 如果在垃圾堆中将任何数据写入db,则该数据附于垃圾堆后,但最有可能压缩.

一个锁文件用于避免同时访问 DB 文件. 存在多个选项来控制此锁文件创建地点和如何访问 :

const db = new DB("/path/to/file", { lockfile: { /* lockfile options */ } });
选项默认说明
directory- 说吧更改创建锁文件的地方, 例如将锁文件放入 tmpfs。默认情况下,锁文件与 DB 文件在同一目录中创建。 如果目录不存在,将在打开 DB 时创建.
staleMs10000锁被停止的时间。 最小值 : 2000
updateMsstaleMs/2锁文件的间隔 mtime 将更新。 范围 : 1000 ... staleMs/2
retries0在放弃之前,如何经常重试获得锁. 复试用指数式后退策略逐渐等更久.
retryMinTimeoutMsupdateMs/2 或者说 1000用于重试的起始间隔 。 最小值 : 100

复制和压缩数据库

await db.dump(); // To use the default dump filename `/path/to/file.dump`
await db.dump("/somewhere/else.jsonl"); // To use a different filename

一段时间后,主 db 文件可能包含不必要的条目. 使用 uncompressedSize 属性。 要删除不必要的条目,请使用 compress() 方法.

await db.compress();

说明: 在此期间, /path/to/file.dump 被覆盖,然后被重新命名, /path/to/file.bak 已覆盖并删除。 所以要确保这些文件中没有任何重要数据.

数据库在某些条件下可以自动压缩数据库文件. 要做到这一点,使用 autoCompress 构造器选项的参数 :

const db = new DB("/path/to/file", { autoCompress: { /* auto compress options */ }});

以下选项(均为可选选项)存在,可以合并:

选项默认说明
sizeFactor+Infinity压缩时 uncompressedSize >= size * sizeFactor
sizeFactorMinimumSize0 个根据大小配置自动压缩所需的最小大小
intervalMs+Infinity一段时间后压缩
intervalMinChanges1个配置基于时间的自动压缩最小变化数
onClosefalse关闭 DB 时压缩
onOpenfalse打开 DB 后压缩

跟踪时间戳

DB可以自动跟踪上次键被写入的时间. 为此,设置 enableTimestamps 选项到 true每一个 set 调用后将更新一个值的时间戳,该值可以使用 getTimestamp(key)为个人写作选择不这样做,通过 false 作为第三个参数 set。 。 。 .

db.set("key", "value", false); // Don't update the timestamp

说明 记录时间戳将 DB 吞吐量减少 ~ 10%... 30%, 取决于其使用方式 .

导入/导出

以下列方式将结构化数据导入数据库:

// pass the object directly, the import will be synchronous
db.importJSON({key: "value"});

DB中的现有条目不会被删除,但如果存在,则会被覆盖.

也可以将数据导出为 JSON 对象 :

const json = db.toJSON();

更改日志

4.0.2 (2025-10-15) (中文(简体) )

  • 固定普通JS导入

4.0.1 (2025-10-14) (中文(简体) )

  • 如果自定义序列器在自动压缩过程中抛出错误, 则会解决应用程序可能耗尽内存的问题

4.0.0 (2025-10-07) (中文(简体) )

  • 放弃对比 v20 年长的节点.js 版本的支持
  • 拆开 exportJson 方法为 toJSON
  • 重命名为 importJson 方法 importJSON。不再支持从文件中导入。 如果您需要此功能, 请自己读取文件 .
  • 现在使用本地文件系统访问 fs.promises 改为 fs-extra
  • 该套装现在是混合无害环境管理/CJS套装

3.1.1 (2024-01-25) (中文(简体) )

  • 闲置时降低CPU负载(# 475)

3.1.0 (2023-03-15) (中文(简体) )

  • 支持退出更新单个调用的时间戳(# 415)

3.0.0 (2023-03-09) (中文(简体) )

  • 支持记录每个值的时间戳(# 413)
  • 放弃对 Node.js 12 (# 414) 的支持

2.5.3 (2022-09-06) (中文(简体) )

  • 将未来的锁文件视为陈旧(# 371)

2.5.2 (2022-05-02) (中文(简体) )

  • 依赖性更新

2.5.1 (2022-02-13) (中文(简体) )

  • 允许设置最小重试超时
  • 正确的锁定文件已暂停的最小值

2.5.0 (2022-02-13) (中文(简体) )

  • 添加控制锁文件 stale/ update 超时并重试获取锁的能力

2.4.3 (2022-02-09) (中文(简体) )

  • 自动压缩 DB 时出错

2.4.2 (2022-02-09) (中文(简体) )

  • 从备份或垃圾堆中自动恢复 DB 时出错现已被捕获
  • 简化并解除了持久性代码. 单个命令如 dump 财务报告和审定财务报表 compress 现在已适当排序,不应再相冲突.
  • 原始条目吞吐量增加~2x

2.4.1 (2021-12-30) (中文(简体) )

  • 个人写作现在被收集成一个字符串并同时被写出,对较大条目的吞吐量增加~10x.

2.4.0 (2021-12-27) (中文(简体) )

  • 将单行线固定在懒惰的状态下,只有在实际需要时,才能使吞吐量增加30.50x.

2.3.0 (2021-12-19) (中文(简体) )

  • 添加将数据库倾倒到不同位置的能力

2.2.0 (2021-10-15) (中文(简体) )

  • 添加指定锁文件创建地点的能力

2.1.0 (2021-06-22) (中文(简体) )

  • 打开 DB 时, 在压缩 DB 时从发生的碰撞中恢复
  • 确保关闭或重命名文件时将 DB 文件冲入磁盘
  • 测试现在与真实文件系统相对应 mock-fs,在节点中断开 16.3+
  • 现代化类型Script 构建输出

2.0.0 (2021-06-19) (中文(简体) )

更新Node.js 10 的依赖性和减少支持

1.2.5 (2021-05-29) (中文(简体) )

防止在多个 DB 实例中使用锁文件打开一个 DB 文件

1.2.4 (2021-02-15) (中文(简体) )

打开 DB 时减少工作

1.2.3 (2021-01-02) (中文(简体) )

在压缩 DB 时修复一个崩溃 .bak 文件已存在

1.2.2(2020-10-16)

当不使用此库时 skipLibCheck, (中文(简体) ), @types/fs-extra 不再需要

1.2.1 (2020-08-20) (中文(简体) )

更新依赖关系

1.2.0 (2020-05-25) (中文(简体) )

在写入 DB 文件前添加了可选的序列器函数来转换非主对象

1.1.2 (2020-05-11) (中文(简体) )

固定了超时漏出,防止节点出站

1.1.1 (2020-05-07) (中文(简体) )

如果主目录不存在, 则创建了主目录

1.1.0 (2020-05-02) (中文(简体) )

添加到节流器写入访问器中的功能

1.0.1(2020-04-29) (中文(简体) )

导出 JsonlDBOptions 从主要切入点

1.0.0 (2020-04-29) (中文(简体) )

添加自动压缩功能

0.5.1 (2020-04-28) (中文(简体) )

修补 : 主要出口不再出口 JsonlDB 作为 DB。 。 。 .

0.5.0 (2020-04-27) (中文(简体) )

在装入 DB 时添加了可选的复活器函数来转换非主对象

0.4.0 (2020-04-27) (中文(简体) )

  • 重命名为 DB 类改为 JsonlDB
  • open() 现在跳过空行
  • open() 遇到无效行时,随行号抛出错误。 使用新的构建器选项参数可以忽略这些错误 .

0.3.0 (2020-04-26) (中文(简体) )

  • 已添加 importJson 财务报告和审定财务报表 exportJson 方法

0.2.0 (2020-04-25) (中文(简体) )

  • 已添加 isOpen 属性

0.1.3 (2020-04-25) (中文(简体) )

  • 写出发生时 compress() 替换文件已持续

0.1.2 (2020-04-25) (中文(简体) )

  • compress() dB 关闭时不再覆盖主文件

0.1 (2020-04-25) (中文(简体) )

  • 修补了一些种族条件

0.1.0 (2020-04-25) (中文(简体) )

第一次正式发布

版本与发布记录

@alcalzone/jsonl-db 共发布 38 个版本,首次发布于 2020/04/25;过去 12 个月发布了 0 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
4.0.2latest2025/10/151.1 年前
4.0.12025/10/141.1 年前
4.0.02025/10/071.1 年前
3.1.12024/01/252 年前
3.1.02023/03/163 年前
3.0.02023/03/103 年前

关于 @alcalzone/jsonl-db 的常见问题

@alcalzone/jsonl-db 是什么?

简单的基于 JSONL 的密钥值商店

如何安装 @alcalzone/jsonl-db?

在项目目录运行 npm install @alcalzone/jsonl-db,或使用 pnpm add / yarn add / bun add。

@alcalzone/jsonl-db 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/alcalzone__jsonl-db 是否存在。

@alcalzone/jsonl-db 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@alcalzone/jsonl-db 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@alcalzone/jsonl-db 可以商用吗?

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

@alcalzone/jsonl-db 的下载量有多少?

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

@alcalzone/jsonl-db 还在维护吗?

最新版本 4.0.2 发布于 2025/10/15(1.1 年前);至今共发布 38 个版本,其中过去 12 个月发布了 0 个;首次发布于 2020/04/25。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。