
数据库NoSQL嵌入式数据库实时数据库【免费下载链接】rxdbThe local-first database that runs on every JS runtime and replicates with your existing backend - no vendor, no lock-in - https://rxdb.info/项目地址https://gitcode.com/gh_mirrors/rx/rxdb点击查看免费下载PouchDB RxStorage 曾是 RxDB 自 2016 年诞生以来最核心、实战检验最充分的存储引擎但在 RxDB 14.0.0 中它已被彻底移除。本文基于官方文档 docs-src/docs/rx-storage-pouchdb.md结合当前仓库源码与发布说明完整梳理它被废弃的根本原因、历史用法供旧项目参考以及当下推荐的迁移路线帮助仍在 PouchDB 上的项目平滑过渡到更快的 RxStorage 方案。PouchDB RxStorage 是什么PouchDB RxStorage 是基于 PouchDB 数据库实现的 RxStorage。它是 RxDB 历史最悠久、被实战检验最多的存储引擎拥有庞大的适配器生态IDB、LevelDB、内存、WebSQL 等。RxDB 在 2016 年诞生时正是作为 PouchDB 的一个封装层出现的。当时没有现成的客户端数据库能满足需求因此 RxDB 直接复用了 PouchDB 的查询引擎、适配器系统、CouchDB 复制等全套能力这也是 PouchDB RxStorage 能开箱即用的原因。然而为了让 PouchDB 完全兼容 CouchDB它需要维护大量额外的元数据与协议逻辑这使得 PouchDB RxStorage 成为 RxDB 中性能最慢的存储之一。为什么 PouchDB RxStorage 被废弃1. CouchDB 兼容性带来的性能与存储开销为了符合 CouchDB 协议PouchDB 必须为每个文档持久化完整的修订历史树revision tree。这意味着查询变慢每次查询都需要遍历、比对修订树多文档查询性能显著下降存储只增不减PouchDB 不支持清理purge文档修订历史见 PouchDB issue #802因此数据库体积会随写入次数持续膨胀无法回收。2. 上游 issue 长期得不到修复文档中明确指出PouchDB 的许多问题从未被真正修复而是被 issue-bot 直接关闭如 PouchDB issue #6454。为了替 RxDB 用户绕开这些问题PouchDB RxStorage 的源码里堆满了 workaround 和 monkey patch当时位于 src/plugins/pouchdb/pouch-statics.ts 中的pouch-statics.ts如文档引用的#L181附近。这些补丁存在两个严重后果进一步降低性能每加一个补丁就多一层开销存在无法从外部修复的缺陷例如 PouchDB 对$gt操作符的查询会返回错误的文档PouchDB PR #8471这对生产数据库是致命的而且极难排查。3. RxStorage 层的出现使替代成为可能在 10.0.0 版本RxDB 引入了 RxStorage 抽象层允许用户自由更换底层存储引擎。此后出现了大量更快的替代品例如浏览器端的 IndexedDB RxStorage、服务端的 FoundationDB RxStorage 等。PouchDB 曾是连接 CouchDB 服务端的唯一途径但这一理由也消失了RxDB 提供了基于 RxDB Sync Engine 的 CouchDB 复制插件它可与任意 RxStorage 搭配使用不再依赖 PouchDB 存储。4. 移除带来的收益移除 PouchDB 后RxDB 得以实现许多长期期待的功能例如过滤变更流filtered change streams让复制与权限处理更简单释放开发时间将精力集中在存储层与复制层的核心优化上。仓库中的废弃证据当前仓库已经看不到 PouchDB 插件目录src/plugins/pouchdb已不存在但废弃痕迹依然可查src/plugins/dev-mode/error-messages.ts 中多处注释标注removed in 14.0.0 - PouchDB RxStorage is removed例如原先的PL2请用addRxPlugin()代替、DB9Adapter not added. Use addPouchPlugin(...)等错误码docs-src/docs/releases/14.0.0.md 明确说明The PouchDB RxStorage was deprecated in 13 and has now finally been removed根目录 package.json 的exports字段中已无./plugins/pouchdb导出pouchdb仅作为关键词保留在keywords中。Pros 与 Cons官方文档对该存储的优缺点总结如下优点历史角度实战检验最充分的 RxStorage支持与 CouchDB 端点复制支持存储 attachments 附件庞大的适配器生态。缺点包体积大bundle size 大因修订处理开销导致性能缓慢。历史用法仅供旧版本项目参考注意PouchDB RxStorage 已从 RxDB 中移除新项目无法再使用。以下代码仅用于说明旧版14.0.0 之前的接入方式帮助旧项目理解其 API 结构。import { createRxDatabase } from rxdb; import { getRxStoragePouch, addPouchPlugin } from rxdb/plugins/pouchdb; addPouchPlugin(require(pouchdb-adapter-idb)); const db await createRxDatabase({ name: exampledb, storage: getRxStoragePouch( idb, { /** * other pouchdb specific options * link https://pouchdb.com/api.html#create_database */ } ) });核心要点getRxStoragePouch(adapterName, options)的第一个参数是 PouchDB 适配器名如idb、leveldb、memory等使用前必须先通过addPouchPlugin()注册对应的pouchdb-adapter-*包第二个参数透传给 PouchDB 的创建数据库选项详见 PouchDB 官方 create database API。为 webpack/Angular 项目 polyfillglobal变量在Angular或其他基于webpack的框架中使用旧版 PouchDB RxStorage 时可能会遇到如下报错span stylecolor: red;Uncaught ReferenceError: global is not defined/span原因是 PouchDB 假设存在 Node.js 特有的global变量而某些打包器不会在浏览器运行时注入它。你需要在 polyfill 中自行补充官方示例参考当时仓库中的 examples/angular/src/polyfills.ts(window as any).global window; (window as any).process { env: { DEBUG: undefined }, };适配器PouchDB 拥有覆盖所有 JavaScript 运行时的众多适配器这也是其生态优势所在。但如前所述这些适配器层面的优势已被新的 RxStorage 生态IndexedDB、OPFS、SQLite、LocalStorage、Dexie.js 等所取代。访问内部 PouchDB 数据库危险操作旧版插件允许通过getPouchDBOfRxCollection()直接取到内部 PouchDB 实例用于自定义操作import { getPouchDBOfRxCollection } from rxdb/plugins/pouchdb; const pouch getPouchDBOfRxCollection(myRxCollection);官方明确警告这是危险操作因为你可能做出与 RxDB 不兼容的变更。只有在你通过 RxDB API 完全无法实现目标时才应使用它。该 API 同样随插件在 14.0.0 被移除。当前用户如何迁移如果你目前仍在使用 PouchDB RxStorage官方给出以下选项迁移到其他 RxStorage推荐——这是首选路径不升级 RxDB停留在旧版 14.0.0 之前的版本Fork PouchDB RxStorage 插件并自行维护修复所有 PouchDB 上游问题使 PouchDB 得以重回 RxDB Core。迁移到新的 RxStorage关于迁移目标RxStorage 文档 给出了针对不同运行时的快速建议浏览器简单场景用 LocalStorage RxStorage大数据集用 Dexie.js RxStorage 或性能更好的 IndexedDB RxStorageElectron / React Native使用 SQLite RxStorage或 Expo 场景下的 Expo Filesystem RxStorageCapacitor用 SQLite RxStorage 或 LocalStorage RxStorage服务端可考虑 MongoDB、FoundationDB、DenoKV 等实现。存储层还可通过包装器叠加 Worker、Sharding、Memory Mapped 等能力组合出适合特定负载的存储方案。继续与 CouchDB 服务端复制如果你依赖 PouchDB 与 CouchDB 同步无需再使用 PouchDB 存储。RxDB 的 CouchDB 复制插件 基于 RxDB Sync Engine 工作可与任意 RxStorage搭配不再需要在客户端存储全部文档修订树只保留最新版本初始复制更快冲突在复制过程中即被处理冲突处理 更简单通过replicateCouchDB()函数启动支持live、pull、push、自定义fetch如 bearer token 认证等参数。仓库中也保留了对应的测试与运行脚本根目录 package.json 中的test:replication-couchdb脚本通过 Docker 启动 CouchDBcouch:start镜像couchdb:3.3.3后运行 test/replication-couchdb.test.ts可以验证该插件与任意存储脚本中为 dexie协同工作。常见问题2024 年 PouchDB 还是可行的同步引擎吗不是。PouchDB 在很大程度上已被视为遗留方案不适合现代高性能架构。因为 PouchDB 必须保持对 CouchDB 的完整兼容它需要为每次文档修改永久存储详尽的修订树导致存储持续膨胀、多文档查询缓慢。RxDB 自 10.0 起大幅剥离了对 PouchDB 的依赖用基于更快、更模块化的 RxStorage 引擎的 WebRTC、GraphQL、WebSocket 复制协议取代了旧有的同步机制。总结PouchDB RxStorage 在 RxDB 的早期发展中功不可没但 CouchDB 兼容性带来的修订树存储、无法清理的历史数据、上游长期未修复的缺陷使其性能与维护成本都难以承受。随着 RxStorage 抽象层的成熟与 CouchDB 复制插件的独立化PouchDB 存储已在 14.0.0 被正式移除。对仍在使用的项目最推荐的路线是选择适配当前运行时的现代 RxStorage浏览器用 IndexedDB/OPFSNode/Electron 用 SQLite 或文件系统存储并通过 replication-couchdb 插件继续与 CouchDB 服务端同步——这样既能获得更好的性能又无需放弃已有的 CouchDB 后端。赞分享数据库NoSQL嵌入式数据库实时数据库【免费下载链接】rxdbThe local-first database that runs on every JS runtime and replicates with your existing backend - no vendor, no lock-in - https://rxdb.info/项目地址https://gitcode.com/gh_mirrors/rx/rxdb点击查看免费下载相关推荐Crawl4AI Docker部署历史与迁移指南从旧版本到v0.8.0的完整升级路径Crawl4AI Docker部署历史与迁移指南从旧版本到v0.8.0的完整升级路径 Crawl4AI作为一款开源的LLM友好型网络爬虫工具其Docker部网页爬虫RAG人工智能AI 应用Commander.js 废弃功能完全指南已弃用Deprecated与已移除RemovedAPI 迁移手册Commander.js 废弃功能完全指南已弃用Deprecated与已移除RemovedAPI 迁移手册 Commander.js 是 Node.jCLIkkFileView 在线预览水印一键配置机密文档防泄密的 9 个参数速查表kkFileView 在线预览水印一键配置机密文档防泄密的 9 个参数速查表 把合同、图纸、报价单丢进 kkFileView 做在线预览最怕的就是访客右键另数据库NoSQL嵌入式数据库实时数据库上一篇5个必学技巧全面掌握Windows Terminal高效工作流下一篇RestSharp请求重试机制指数退避与故障恢复策略创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考