用于电子,反应原生和NodeJS应用的嵌入式数据库?

时间:2018-05-04 10:20:24

标签: javascript node.js database react-native electron

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

两者都是,移动和桌面应用程序共享许多功能,但由于使用了不同的数据库插件,因此存在很多差异。此外,对于桌面应用程序,由于node-sqlite3是本机依赖项,​​因此我必须单独为Windows和macOS构建应用程序安装程序。那太痛苦了!

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

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

这里列出了我遇到的那些看起来很吸引人的内容: -

那么,您有什么建议以及如何为您的应用实施类似的内容?

1 个答案:

答案 0 :(得分:5)

我一直在测试PouchDB,RxDB(依赖于PouchDB和RxJS流进行查询),Realm-JS(本地数据库如sqlite3),FireStore。 NeDB不支持远程同步。

我不会详细了解每个数据库的性能指标详细信息,但是当查询超过20,000个项目(使用indexeddb / websql适配器尝试)时,PouchDB的内存非常慢且很重。

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

FireStore是一个不错的选择,并且可以非常轻松地设置服务器和客户端组件,但您需要在谷歌平台上运行时感觉很舒服。如果您想要对服务器逻辑进行一些控制并且可以为您的集合提供可自定义的ACL,那么firebase函数就具有一定的灵活性。速度一直很好,与RxDB相当。如果你需要,可以配备一个非常好的auth模块。

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

最后,有多个答案: 1.想要自己托管所有东西并且不需要大规模客户端(您可以使用过滤器同步服务器数据的子集),RxDB非常好并且具有很好的功能集。 2.想要非常简单的设置,很好的模块,如auth,服务器功能等,并且不需要在客户端上进行大规模扩展(也可以通过过滤器与服务器数据子集同步),FireStore非常棒。 3.在客户端需要大量数据,领域是我的偏好。我个人真的不喜欢领域同步平台的定价模式(虽然技术上很酷),但数据库本身是免费的,也许你可以尝试实现自定义同步。

我的结果很简单,我有一些非常具体的挑战,比如大型非关系馆藏和全文搜索,你的用例可能会有很大不同。