12

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

因客户要求,桌面客户端无法使用“云端”存储数据;所有数据都应该存储在本地机器中,或者更好的是,用户应该可以选择将数据库/数据文件保存在外部硬盘上,以便同一本地网络上的另一个用户可以使用相同的数据文件。

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

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

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

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

4

1 回答 1

7

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

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

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

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

我认为 MongoDB 对于 Electron 应用程序来说将是矫枉过正的(它意味着真正的高性能,在云中运行的分布式数据库)。

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

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

于 2016-06-07T02:50:31.687 回答