Mongodb 电子应用程序的本地、基于文件的数据库

Mongodb 电子应用程序的本地、基于文件的数据库,mongodb,electron,pouchdb,nedb,Mongodb,Electron,Pouchdb,Nedb,我们正在开发一个应用程序,该应用程序将通过以下方式提供:基于web的解决方案和跨平台桌面解决方案 由于客户需求,桌面客户端无法使用“云”存储数据;所有数据都应存储在本地计算机中,或者更好的是,用户可以选择将数据库/数据文件保存在外部HDD上,以便同一本地网络上的其他用户可以使用相同的数据文件 我们一直在研究等等,但所有这些都在浏览器本身上使用Web SQL或IndexedDB来存储数据。 NeDB理论上可以使用文件系统,但这似乎只适用于节点Webkit应用程序 当然还有另一种选择,但它需要在we

我们正在开发一个应用程序,该应用程序将通过以下方式提供:基于web的解决方案和跨平台桌面解决方案

由于客户需求,桌面客户端无法使用“云”存储数据;所有数据都应存储在本地计算机中,或者更好的是,用户可以选择将数据库/数据文件保存在外部HDD上,以便同一本地网络上的其他用户可以使用相同的数据文件

我们一直在研究等等,但所有这些都在浏览器本身上使用Web SQL或IndexedDB来存储数据。 NeDB理论上可以使用文件系统,但这似乎只适用于节点Webkit应用程序

当然还有另一种选择,但它需要在web服务器上设置一个站点。考虑到我们的用户将如何在自己的机器上设置,这只适用于一个用户,但会使他们很难共享数据(注意:假设用户几乎没有技术诀窍)

  • 有没有办法强制NeDB将数据保存在文件中而不是浏览器数据库中
  • 或者,有人知道一个基于文件的紧凑型数据库可以很好地与electron/node配合使用吗

我们最好使用NoSQL数据库,但也会考虑使用基于文件的SQL数据库。

我有一些在电子应用程序中使用NeDB的经验,我可以说它肯定会在文件系统上工作

您如何初始化NeDB(或您选择的任何数据库)?另外,您是在主进程还是渲染器进程中初始化它?如果你能分享这一点,我认为我们可以将问题追溯到配置问题

这就是如何使用保存到磁盘的持久数据存储启动NeDB

var Datastore = require('nedb')
  , db = new Datastore({ filename: 'path/to/datafile', autoload: true });
我认为MongoDB对于一个电子应用程序来说太过杀伤力了(它是一个在云端运行的高性能分布式数据库)

您可以考虑的另一个选项是(可以保存到文件系统的键/值存储),它在节点社区中很流行。(编辑4/17/17 IndexedDB在引擎盖下使用LevelDB,因此如果您选择该路线,也可以使用该路线)


我肯定会仔细评估的一个方面是:这个数据库打包和分发有多困难?如何将其集成到构建系统中?Level和NeDB可以通过
npm install
简单地包含进来,任何本机代码编译都可以通过node gyp无缝处理,这一点非常简单。然而,捆绑Mongo,例如,将需要一些工作来获得每个不同平台的工作构建

你能更深入地了解围绕“基于web”部分的需求吗?在处理Electron时,ccnokes的回答是正确的,但是,从你的问题来看,你似乎需要一些在标准浏览器中也能工作的东西。是吗?我想你可能在这里发现了什么。我使用文件名初始化数据库,并自动加载。。。问题是,我们使用electron主进程初始化一个应用程序,我从Aurelia应用程序初始化db。我对Electron是新手,如何从main或rederer过程初始化NeDB?那么,该数据库如何才能供应用程序的其余部分使用呢?@SergiPapaseit使用文件系统备份从主渲染器或渲染器初始化它,我想也是这样。至于让应用程序的其余部分可以使用它……只需从模块中导出即可。如果从主界面启动,并且需要从渲染器访问,则可以使用Electronics的IPC或远程API。@ccnokes,2021年的建议是否仍然相同?在浏览器中通过Indexeddb本地存储DB文件有什么好处吗?你最近有没有其他的建议?(NeDB最近在回购方面没有太多承诺)@Vass我不知道了——对不起,我已经有一段时间没有电子开发了。我要说的是,总体指导原则是一样的:尽可能简单,而为客户端应用程序提供高性能数据库是没有意义的。