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

Local, file-based database for an Electron application

我们正在开发一个应用程序,该应用程序将通过 Electron.

作为基于 Web 和跨平台的桌面解决方案提供。

由于客户要求,桌面客户端无法利用"the cloud"存储数据;所有数据都应该存储在本地机器上,或者更好的是,用户应该可以选择将 database/data 文件保存在外部硬盘上,以便同一本地网络上的其他用户可以使用相同的数据文件。

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

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

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

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

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

这就是使用保存到磁盘的持久数据存储启动 NeDB 的方式。

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

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

您可以考虑的另一个选项是 LevelDB(一个 key/value 可以持久保存到文件系统的存储),它在节点社区中很流行。 (编辑 2017 年 4 月 17 日 IndexedDB 在引擎盖下使用 LevelDB,所以如果你走那条路,不妨使用它)

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