我们正致力于通过Electron提供基于网络和跨平台桌面解决方案的应用程序。
由于客户的要求,桌面客户端无法使用"云"存储数据;所有数据都应存储在本地计算机中,或者更好的是,用户应该可以选择将数据库/数据文件保存在外部HDD上,以便同一本地网络上的另一个用户可以使用相同的数据文件。
我们一直在关注NeDB,PouchDB等,但所有这些都使用浏览器本身的Web SQL或IndexedDB来存储数据。 从理论上讲,NeDB可以使用文件系统,但这似乎只适用于Node Webkit应用程序。
另一种选择当然是MongoDB,但它需要在Web服务器上设置一个站点。看看我们的用户如何在他们自己的机器上设置它,这将仅适用于一个用户,但会使他们很难共享数据(注意:假设用户几乎没有技术知识)。
我们最好使用NoSQL数据库,但也会考虑基于文件的SQL数据库的选项。
答案 0 :(得分:6)
我在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,所以如果你走这条路,也可以使用它)
我肯定会仔细评估的一个方面是:这个数据库打包和分发有多难?如何将其集成到我的构建系统中?可以通过npm install
简单地包含Level和NeDB,并且可以使用node-gyp无缝地处理任何本机代码编译,这很简单。但是,捆绑Mongo需要一些工作来为每个不同的平台获得有效的构建。