用于Electron应用程序的本地基于文件的数据库

Ser*_*eit 9 mongodb pouchdb nedb electron

我们正致力于通过Electron提供基于Web和跨平台桌面解决方案的应用程序.

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

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

另一种选择当然是MongoDB,但它需要在Web服务器上设置站点.看看我们的用户如何在自己的机器上设置它,这将仅适用于一个用户,但会使他们很难共享数据(注意:假设用户几乎没有技术知识).

  • 有没有办法强制NeDB将数据保存在文件而不是浏览器内的数据库中?
  • 或者,是否有人知道基于文件的紧凑型数据库与电子/节点配合良好?

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

ccn*_*kes 6

我在Electron应用程序中有一些NeDB的经验,我可以说它肯定会在文件系统上运行.

你是如何初始化NeDB的(或者你的数据库选择是什么)?另外,您是在主进程或渲染器进程中初始化它吗?如果您可以分享,我认为我们可以将问题跟踪到配置问题.

这是使用保存到磁盘的持久数据存储启动NeDB的方法.

var Datastore = require('nedb')
  , db = new Datastore({ filename: 'path/to/datafile', autoload: true });
Run Code Online (Sandbox Code Playgroud)

我认为MongoDB对于一个Electron应用程序来说会有点过分(它实际上是一个在云中运行的高性能分布式数据库).

您可以考虑的另一个选项是LevelDB(可以持久保存到文件系统的键/值存储),它在节点社区中很流行.(编辑4/17/17 IndexedDB在引擎盖下使用LevelDB,所以如果你走这条路,也可以只使用它)

我肯定会仔细评估的一个方面是:这个数据库打包和分发有多困难?如何将其集成到我的构建系统中?可以简单地包含Level和NeDB,并且可以npm install使用node- gyp 无缝地处理任何本机代码编译,这很简单.但是,捆绑Mongo需要一些工作来为每个不同的平台获得有效的构建.

  • @SergiPapaseit 从带有文件系统支持的主程序或渲染器初始化它,我认为是一样的。至于使其可用于应用程序的其余部分......只需从模块中导出它。如果从主启动它并且您需要从渲染器访问它,您可以使用 Electrons 的 IPC 或远程 API。 (2认同)