我一直在测试 PouchDB、RxDB(使用 RxJS 流进行查询的 PouchDB),Realm-JS(本地数据库,类似于 sqlite3),FireStore。NeDB 不支持远程同步。
我不会详细介绍每个数据库的性能指标,但是当查询超过 20,000 个项目时,PouchDB 在内存方面非常缓慢且消耗大量资源(使用 indexeddb / websql 适配器时尝试)。
RxDB 在这么多项目上通常要快得多,特别是当订阅查询更改时(也使用 indexeddb / websql 适配器进行尝试);此外,模式和迁移非常方便。
FireStore 是一个不错的选择,并具有非常简单的服务器和客户端组件设置,但您需要舒适地运行在 Google 平台上。如果您想要对服务器逻辑进行一些控制,则可以使用 Firebase 函数提供一定的灵活性,还可以为集合自定义 ACLs。速度很好,与 RxDB 相当。如果需要,它附带了非常好的身份验证模块。
如果你想要在客户端有更高的可扩展性(虽然这可能不是你所需要的)或者想要进行复杂的查询,我强烈推荐使用像 realm 这样的东西。你需要为每个平台编译它,就像你之前用 sqlite3 一样,但是它支持同步、离线持久化、丰富的查询和出色的性能。通过 JavaScript 解决方案(如 PouchDB、RxDB 或 FireStore)即使使用了 sqlite 后端,由于大部分计算仍将发生在你珍贵的 JS 线程中,也无法与之竞争。Realm 大多数重活都是在原生库上完成的。我已经可以对 10 万项进行类似 "abc" 的查询,并返回数百个结果,在不到 100 毫秒的时间内完成,而且没有明显的 UI 冻结或内存占用增加。还支持客户端迁移,非常好用。
总之,有多种选择:
1. 如果想要自己托管所有内容并且不需要大规模扩展客户端(可以使用筛选器同步服务器数据的子集),RxDB 是非常好的并带有一组不错的功能。
2. 如果想要非常简单的设置、优美的模块(如身份验证、服务器函数等)并且不需要客户端的大规模扩展(也可以使用筛选器同步服务器数据的子集),FireStore 很棒。
需要大量客户端数据,我的首选是 Realm。尽管技术上很酷,但我个人非常不喜欢 Realm Sync 平台的定价模式,但数据库本身是免费的,也许您可以尝试实施自定义同步。
请带着一颗谨慎的心评估我的结果,因为我遇到了一些非常具体的挑战,比如大型、非关系型集合和全文搜索,您的应用场景可能会有很大的不同。
leveldown
适配器,希望它比IndexedDB
更快。我会先尝试使用PouchDB
和CouchDB
,如果不行的话,我会转向cloud firestore
。非常感谢你提供如此全面的答案,我真的很感激。 - Ashishkumar Pandey