当前位置: 首页 > 知识库问答 >
问题:

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

翟冯浩
2023-03-14

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

移动应用和桌面应用共享很多功能,但由于使用了不同的数据库插件,它们之间存在很多差异。另外,对于桌面应用程序,由于node-sqlite3是本机依赖项,我必须分别为Windows和macOS构建应用程序安装程序。真让人痛苦!

因此,我需要的是一个数据库解决方案,即:-

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

以下是我遇到的一些似乎很吸引人的问题:-

  • NeDB
  • RxDB
  • 邮袋数据库

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

共有1个答案

涂浩皛
2023-03-14

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

我不会详细介绍每个数据库的性能指标,但在查询超过20000个项目时,PockDB的速度非常慢,内存也非常大(使用indexeddb/websql适配器进行了尝试)。

RxDB通常使用这么多的项要快得多,特别是在订阅查询更改时(也使用indexeddb/websql适配器进行了尝试)。模式和迁移也非常方便。

FireStore是一个很好的选择,它提供了非常简单的服务器和客户端组件设置,但您需要在google平台上舒适地运行。如果您希望对服务器逻辑进行某种控制,并且您的集合具有可自定义的ACL,那么firebase函数具有一定的灵活性。速度一直很好,与RxDB相当。如果您需要,它附带了一个非常好的身份验证模块。

如果您希望能够在客户端进行更大的扩展(您可能不希望),或者如果您希望进行复杂的查询,我真的建议您使用类似realm的东西。您需要像使用sqlite3一样为每个平台进行编译,但是有同步、脱机持久性、丰富的查询和出色的性能。基于javascript的解决方案,如PockDB、RxDB或FireStore,根本无法与sqlite后端竞争,因为大部分计算仍将发生在宝贵的JS线程中。realm在本地库上做了很多繁重的工作。我已经能够在不到100毫秒的时间内对10万个项目执行类似“abc”的查询,返回数百个结果,而不会明显冻结我的UI或大量增加内存使用。还支持客户端迁移,这很好。

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

就我的结果而言,我遇到了一些非常具体的挑战,比如大型、非关系型集合和全文搜索,您的用例可能会有很大的不同。

 类似资料:
  • 我在编译使用嵌入式Derby数据库的java程序时遇到了麻烦。我正在使用Netbeans,并使用了“clean and build”选项,该选项创建了一个dist文件夹。我将数据库添加到dist/resources文件夹中,我将derby连接指向的那个文件夹: 麻烦的是,有些人无法运行程序。对于有些人来说,这就像点击dist文件夹中的.jar文件一样简单。对其他人来说,它根本不会运行。另外,我已经

  • 目前的需求如下,大概来讲就是要嵌入一个远程web程序,并做一下联动效果。采用哪种方式比较合适,我看官方文档有讲可以采用: Iframes、WebView、WebContentsView 三种方式,哪种更适合我这个场景呢?

  • 问题内容: 我有一个使用SQLite的C ++程序。我想将SQL查询存储在一个单独的文件中-纯文本文件, 而不是 源代码文件- 但要将该文件像资源一样嵌入到可执行文件中。 (它必须在Linux上运行,因此就我所知,我无法将其存储为实际资源,尽管如果是Windows,那将是完美的。) 有什么简单的方法可以做到这一点,还是有效地要求我为Linux编写自己的资源系统?(很容易,但是会花费更长的时间。)

  • 我正在构建一个将使用neo4j的web应用程序。我将在Java构建一个REST API,它将使用Neo4j嵌入式版本。这个架构有什么问题吗? 用别的方法好吗?Neo4j服务器? 谢谢!

  • 问题内容: 对于单元测试(如果需要,可将其称为集成测试),我已经在Spring配置中配置了嵌入式数据库,如下所示: 现在,从命令行运行测试时,它们可以正常工作,但是最后我得到一些错误(无害,但很烦人): 现在,包含在异常中的提示通常很好,但是如何将此属性添加到嵌入式数据源?我是否必须扩展它,手动配置它以添加此类 “高级” 功能? 问题答案: 在JDBC网址jdbc:h2:〜/ test中 指定参数

  • 卡桑德拉 CouchBase MongoDB Redis 是否可以使用嵌入式NoSQL存储进行开发,就像通常使用H2 for JPA那样?