ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

lmdb-js 部署完全指南:预编译包、源码编译与多平台安装问题排查

lmdb-js 部署完全指南:预编译包、源码编译与多平台安装问题排查 lmdb-js 部署完全指南预编译包、源码编译与多平台安装问题排查【免费下载链接】lmdb-jsSimple, efficient, ultra-fast, scalable data store wrapper for LMDB项目地址: https://gitcode.com/gh_mirrors/lm/lmdb-js 本文带你完成lmdb-js 部署全流程lmdb-js 是一个简单、高效、极速的 Node.js / Bun / Deno 键值数据库封装NPM 包名为lmdb它把 LMDB 内存映射数据库和原生 C 加速封装成易用的 JavaScript API单线程随机读取可达约 190 万次/秒。指南覆盖预编译包快速安装、源码编译、多平台支持Linux/macOS/Windows以及常见安装报错的排查方法帮助你一次部署成功。一、部署前先判断你要哪种安装方式方式适用场景耗时预编译包安装绝大多数生产/开发环境几秒几十秒源码编译特殊平台、定制编译选项如旧版数据格式13 分钟下载全平台预编译包离线部署、构建分发产物视网络而定项目基于 Node-APIN-API构建兼容性横跨主流 Node 版本及当前 Deno、Bun 版本在 Node 16 上还会自动加载针对 V8 的加速函数。入口加载逻辑见 native.js它通过node-gyp-build-optional-packages查找并加载匹配当前平台的原生模块。二、预编译包安装最快一键部署方式1. Node.js 项目npm install lmdb安装脚本package.json中install: node-gyp-build-optional-packages会自动做两件事优先加载随包发布的平台预编译二进制加载不到时才会回退到源码编译需本机有编译工具链。官方为每个平台单独发布了预编译包包名形如lmdb/lmdb-linux-x64、lmdb/lmdb-darwin-arm64、lmdb/lmdb-win32-x64由 util/set-optional-deps.cjs 在发布时写入optionalDependencies。支持的组合包括Linuxx64、arm64、arm7glibc 与 musl/Alpine 均有macOSx64、arm64Apple SiliconWindowsx64、arm642. Deno 项目使用 NPM 模块标识符直接引入import { open } from npm:lmdb;3. 部署后 30 秒验证import { open } from lmdb; const db open(my-db); // 数据存到 ./my-db 目录 await db.put(greeting, { text: Hello, World! }); console.log(db.get(greeting).text); // Hello, World!能打印出Hello, World!说明原生模块加载成功、数据库读写正常。完整 API 与选项说明见项目根目录 README.md 的 DB Options 一节核心入口实现位于 open.js。三、源码编译当预编译包不够用时以下情况需要从源码构建musl 环境找不到匹配包、使用 Electron 运行时、或需要定制编译选项。1. 克隆仓库git clone https://gitcode.com/gh_mirrors/lm/lmdb-js cd lmdb-js2. 安装依赖并构建npm install npm run buildbuild脚本等价于node-gyp configure node-gyp build加 rollup 打包。编译配置全部由 binding.gyp 描述它会把以下核心文件一起编成原生模块绑定层src/lmdb-js.cpp、src/writer.cpp、src/txn.cpp、src/cursor.cpp、src/dbi.cpp等LMDB 内核dependencies/lmdb/libraries/liblmdb/mdb.c、midl.c压缩引擎dependencies/lz4/lib/lz4.c用于异步线程上的 LZ4 压缩3. 关键编译选项新手最常碰到的两个选项传参方式作用关闭 robust 互斥锁npm install lmdb --build-from-source --use_robustfalse降低多进程互斥开销不推荐在多进程场景关闭使用旧版 v1 数据格式npm install lmdb --build-from-source --use_data_v1true需要与旧版 LMDB 工具如 mdb_copy互操作时启用关闭 V8 加速环境变量ENABLE_V8_FUNCTIONSfalseWindows 用set特殊运行时下原生模块加载失败时可尝试binding.gyp中通过变量use_robust%、use_data_v1%、enable_v8%读取这些开关最终映射为MDB_USE_ROBUST、ENABLE_V8_API等编译宏。4. 下载全平台预编译包离线分发项目内置了download-lmdb-prebuilds可执行命令入口在 package.json 的bin字段在目标机器无网络的环境下可先在联网机器上执行它把各平台二进制拉到本地后再整体分发。四、多平台部署注意事项架构与 CPU 要匹配在 arm64Apple Silicon、AWS Graviton机器上必须使用darwin-arm64/linux-arm64预编译包跨架构的.node文件无法加载。Alpine / muslglibc 与 musl 的二进制不通用。musl 平台预编译包带libc标签构建脚本prebuild-libc-musl生成装不到时直接npm rebuild lmdb --build-from-source并安装python3 make g。macOS Apple Silicon 页大小M 系列芯片默认页大小 16KB项目已为此做了默认键大小处理无需手动设置。Node 16 的 Turbo 模式会自动启用 V8 的--turbo-fast-api-calls加速如与某些工具链冲突设置环境变量DISABLE_TURBO_CALLStrue即可关闭无需重新编译。Electron按runtimeelectron条件编译宏NODE_RUNTIME_ELECTRON1用 electron 对应的构建参数重新编译即可。五、常见问题排查清单 现象原因解决方法No matching prebuild for platform found平台/架构没有对应预编译包加装编译工具链后执行npm rebuild lmdb --build-from-sourcegyp ERR! ... make / python not found缺少编译环境Linux 装python3 make gWindows 装 VS Build Tools含 C 工作负载Alpine 上GLIBC_2.xx not found误装了 glibc 版二进制使用 musl 标签包或从源码编译macOS 上写事务卡死 / 报信号量错误默认 10 个 robust 信号量上限sudo sysctl kern.sysv.semume50或改用use_robustfalse重新编译升级 Node 后Cannot find module *.node原生模块与新 Node 版本不匹配npm rebuild lmdb重新选择/编译对应二进制读写旧库数据格式不兼容LMDB 数据格式 v2 与旧工具不通用编译时加--use_data_v1true注意会失去加密等新特性六、部署完成后的验证与进阶跑测试npm test基于 test/index.test.js 的 mocha 用例可验证读写、事务、压缩等核心路径Deno 环境用npm run deno-test。跑基准npm run benchmark使用 benchmark/index.js 实测本机 get/put 吞吐。压缩词典启用 LZ4 压缩时可用dict/dict.txt这类共享词典提升小数据压缩率配置方式见 README Compression 小节。小结日常部署优先npm install lmdb走预编译包Alpine、Electron 或需要旧数据格式时才源码编译遇到报错按第五节清单对照处理90% 的安装问题都能一次解决。【免费下载链接】lmdb-jsSimple, efficient, ultra-fast, scalable data store wrapper for LMDB项目地址: https://gitcode.com/gh_mirrors/lm/lmdb-js创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表