三种方法将 SQLite 偷偷塞进 Nix

Three ways to smuggle SQLite into Nix

三种方法将 SQLite 偷偷塞进 Nix

在 nixpkgs-multiverse 项目中,巨大的 JSON 索引文件导致 Nix 每次查询都要解析全部数据,效率低下。为了突破 Nix 原生能力的限制,我探索了三种将 SQLite 数据库引入 Nix 的巧妙方案。第一种是利用 builtins.exec 调用外部进程,虽然简单但开销较大;第二种是通过 builtins.importNative 加载自定义 C++ 共享库,实现高性能的内存级交互;第三种则是将数据直接转换为 Nix 表达式文件,利用惰性求值特性。此外,文章还探讨了新兴的 builtins.wasm 如何通过 WebAssembly 沙箱安全地运行 SQLite,为 Nix 生态的数据查询提供了新的可能性。

如果查询一个包的成本和查询所有包的成本一样,那问题就来了。
  1. Naru41

    直接把它转换成适合此用途的二进制数据结构,然后用老派的 bsearch 就行了。这太简单了,你甚至都不需要 SQLite。

  2. kevincox

    看起来你可以直接把数据编译进 WASM blob 里。然后使用比 SQLite 更优化的查询引擎。编译速度应该非常快(大部分 WASM 只是一个字节缓冲区,代码只是几次二进制搜索和一些结果编码)。缺点是更新仓库需要重新编译,但我认为这应该不会特别昂贵。

  3. lsb

    如果这么多 JSON 能塞进微控制器的内存里(文本形式 7.5MB),而且这还是性能问题的话,也许值得升级一下 JSON 解析器?

同日更多故事

2026-08-21