Skip to content

feat: custom database routing, bounded batches and data maintenance - #43

Merged
yourtion merged 4 commits into
mainfrom
feat/database-composition-and-batch-tools
Oct 25, 2026
Merged

yourtion merged 4 commits into
mainfrom
feat/database-composition-and-batch-tools

Conversation

@yourtion

Copy link
Copy Markdown
Owner

自备 IPv4/IPv6 数据库现在可以由同一个原生客户端显式路由;外部异步来源的批量查询可以指定并发上限;内置数据提供独立的暂存、校验和应用工具。三项功能分别提交,保留既有单库配置、默认串行行为和离线查询方式。

自备双栈组合

new IP2Region({ databases: { 4: {...}, 6: {...} } }) 与 IP2Region.open() 支持相同配置。允许非空单地址族 map、不同文件格式和各自的字段布局,按实际文件能力校验地址族。结果保持各来源解释,组合元数据保留 datasets;任一加载失败会清理已创建的读取器,关闭会尝试释放全部读取器且保持幂等。配置与 source/database/families 互斥,不做回退或字段合并。

异步批量有界并发

lookupManyAsync(ips, { concurrency: 4 }) 和 settled 版本接受公开的 AsyncBatchOptions,默认 1。输入按空闲槽位读取,结果按输入顺序返回;普通批量观察到首错后停止派发、清理迭代器并等待已启动请求结束,settled 记录每项查询错误。完成通知机制避免在慢请求上重复附加 Promise.race 回调。关闭拒绝新请求并等待已启动请求,不提供隐式取消、重试或超时。

数据维护

data:stage -- --revision <完整SHA> --stage <新目录> 暂存固定上游候选,data:validate 复查,data:apply 才更新两份数据及 manifest、生成源码和文档。支持 --from 本地候选,并明确标记未经上游认证的 local 来源。检查所有引用记录的 UTF-8/列数,采样与独立官方 reader 对照,输出范围/记录变化、哈希、构建时间及许可摘要。拒绝被修改的 stage、已变化的基线和并发应用;写入前生成备份,处理到的替换失败会回滚。

多文件应用不保证进程崩溃原子性,恢复步骤见 data/README.md。网络暂存需要 curl,离线测试不联网。使用现有开发依赖,不增加运行时依赖。本 PR 不更新现有 XDB 二进制快照。

验证

  • Node 24.19.0:99 项核心、独立参考、发布工具及更新工具测试通过;最后的生成格式修正另行重跑全部 10 项 updater 测试通过。
  • Node 24.19.0、Bun 1.4.4、Deno 2.9.6 真实 tarball 消费验证通过:共享 suite 75/73/73 项,公开自定义示例、ESM/CJS、类型、权限、manifest/数据/许可一致性均通过。
  • 实际下载固定 revision f8b0792 的两份快照和 LICENSE.md:验证 553,967 条 IPv4 范围、734,953 条 IPv6 范围、全部引用记录和每族 256 个独立边界查询,哈希与当前快照一致。
  • 在隔离 checkout 执行上游及本地候选的应用;生成内容通过 lint/格式/类型、重新构建和 75 项共享 Node 测试。新增回归覆盖零构建时间、写入失败回滚、stage/基线修改和格式输出。
  • npm run check、git diff --check 通过。

@yourtion
yourtion merged commit ba8ffd7 into main Oct 25, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant