javascript - Electron 、 react native 和 NodeJS 应用程序的嵌入式数据库?

标签 javascript node.js database react-native electron

我有一个 javascript 应用程序,我使用 react-native 为移动应用程序和使用 electron 框架的桌面应用程序实现了它。移动应用程序使用 react-native-sqlite-storage native 模块用于保存首选项和数据(5 - 6 个表),而我使用 node-sqlite3对于 Electron 应用程序。

移动和桌面应用程序共享很多功能,但由于使用不同的数据库插件,有很多差异。此外,对于桌面应用程序,为 node-sqlite3是 native 依赖项,​​我必须分别为 Windows 和 macOS 构建应用程序安装程序。太痛苦了!

所以,我需要的是一个数据库解决方案:-

  • 可嵌入到应用中
  • 与 sqlite3 相比更高效、更高效
  • 支持同步到远程数据库
  • 支持 macOS、Windows 和 Linux
  • 加密写入数据库的数据
  • 跨 JS 运行时(浏览器/NodeJS/JavascriptCore)的一致 API

以下是我遇到的那些看起来很有吸引力的列表:-

那么,您的建议是什么?您是如何为您的应用实现类似的东西的?

最佳答案

我一直在测试 PouchDB、RxDB(它依赖于带有 RxJS 流的 PouchDB 进行查询)、Realm-JS(原生数据库,如 sqlite3)、FireStore。 NeDB 不支持远程同步。

我不会深入探讨每个数据库的性能指标细节,但 PouchDB 在查询超过 20.000 个项目(尝试使用 indexeddb/websql 适配器)时非常缓慢且占用大量内存。

RxDB 对于那么多项目通常要快得多,尤其是在订阅查询更改时(也尝试使用 indexeddb/websql 适配器)。架构和迁移也非常方便。

FireStore 是一个不错的选择,并且可以非常轻松地设置服务器和客户端组件,但您需要适应在 Google 平台上运行。如果您想要对服务器逻辑进行一些控制并且您的集合有可自定义的 ACL,则 firebase 函数具有一定的灵 active 。速度一直很好,与 RxDB 相当。如果需要,可以提供非常好的身份验证模块。

如果您希望能够在客户端扩展更多(您可能不会这样做),或者如果您想要进行复杂的查询,我真的建议您使用领域之类的东西。您需要像使用 sqlite3 一样针对每个平台进行编译,但是有同步、离线持久性、丰富的查询和出色的性能。基于 javascript 的解决方案(如 PouchDB、RxDB 或 FireStore)根本无法与之竞争,即使使用 sqlite 后端也是如此,因为大部分计算仍将在您宝贵的 JS 线程中进行。 realm 正在对本地库做很多繁重的工作。我已经能够对 100.000 个项目执行 LIKE "abc"查询,在不到一百毫秒的时间内返回数​​百个结果,并且没有明显卡住我的 UI 或大量增加内存使用量。也支持客户端迁移,这很好。

最后,有多种答案: 1. 想要自己托管所有内容并且不需要大规模客户端(您可以使用过滤器同步服务器数据的子集),RxDB 非常好并且具有很好的功能集。 2. 想要非常简单的设置,漂亮的模块,如 auth、服务器功能等,并且不需要在客户端上大规模(也可以使用过滤器同步服务器数据子集),FireStore 很棒。 3.客户端需要大量的数据,realm是我的偏好。我个人非常不喜欢 realm 同步平台的定价模型(尽管从技术上讲它很酷),但数据库本身是免费的,也许您可​​以尝试实现自定义同步。

对我的结果持保留态度,我遇到了一些非常具体的挑战,例如大型非关系集合和全文搜索,您的用例可能会有很大不同。

关于javascript - Electron 、 react native 和 NodeJS 应用程序的嵌入式数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50172632/

相关文章:

c# - 将重复列折叠到子列表中

sql - 获取最常用的多对多字段

java - 在jsp页面中显示特殊字符

javascript - 使用 javascript 循环访问 ASP.NET 单选按钮列表以获取选定的值和文本

java - 从 javascript 调用 java Restful Webservice 时返回值失败

javascript - 时区选项在 Intl.DateTimeFormat() 中究竟做了什么

node.js - 安排一个小时、一天、一周等时间的事件

javascript - Accounts.onCreatedUser 的奇怪错误

node.js - Express body-parser 不解析多个路由器中间件请求

sql - 数据库表 : Quantity or redundancy