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

12

我们正在开发一款应用程序,它将通过Electron作为基于Web的和跨平台桌面解决方案提供。

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

我们已经看过NeDBPouchDB等,但是所有这些都使用浏览器本身的Web SQL或IndexedDB来存储数据。NeDB理论上可以使用文件系统,但似乎只能用于Node Webkit应用程序。

另一个选择当然是MongoDB,但它需要在Web服务器上设置网站。考虑到我们的用户将在自己的机器上设置,这对于一个用户来说没有问题,但会使他们很难共享数据(注意:假设用户技术知识有限)。

  • 有没有办法强制NeDB将数据持久化到文件而不是浏览器中的数据库?
  • 或者,有没有人知道一种基于文件的、轻量级数据库可以与electron/node很好地配合使用?

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


你能深入探讨一下这个“基于Web”的要求吗?ccnokes在处理Electron时的回答是正确的,但从你的问题来看,似乎你需要一个在标准浏览器中也能工作的解决方案。是这样吗? - Shawn Rakowski
1个回答

7

我在Electron应用程序中使用过NeDB,可以肯定它能够在文件系统上工作。

你是如何初始化NeDB(或者你的数据库选择)的呢?此外,你是在主进程还是渲染进程中进行初始化的?如果你能分享一下这些信息,我认为我们可以将问题追溯到配置问题。

以下是如何启动具有持久化数据存储并保存到磁盘的NeDB。

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

我认为对于一个Electron应用程序来说,MongoDB可能太过于复杂了(它本意上是一个高性能的分布式云数据库)。

你可以考虑另一个选项:LevelDB(一种可以持久化到文件系统中的键值存储),它在Node社区中很受欢迎。(编辑4/17/17:IndexedDB在底层使用的是LevelDB,所以如果你选择这条路,最好直接使用它)

我认为需要仔细评估的一个方面是:这个数据库有多难打包和分发?我要如何将其集成到我的构建系统中?只需通过"npm install"即可简单地包含 Level 和 NeDB,并且任何本机代码编译都可以无缝处理,而这是极其简单的。然而,要将Mongo等打包起来就需要一些工作,以获得每个不同平台的可用版本。


我认为你可能有所发现。我确实使用文件名和autoload来初始化数据库...问题是我们使用电子主进程来初始化Aurelia应用程序,而我从Aurelia应用程序中初始化db。我对Electron很陌生,如何从主进程或渲染器进程初始化NeDB?然后如何使该数据库对应用程序的其余部分可用? - Sergi Papaseit
2
@SergiPapaseit 在主进程或渲染器中使用文件系统支持进行初始化应该是相同的。至于使其对应用程序的其余部分可用...只需从模块中导出即可。如果从主进程启动并且需要从渲染器访问它,则可以使用Electron的IPC或远程API。 - ccnokes
@ccnokes,2021年的建议还是一样的吗?在浏览器中,将数据库存储在本地文件中是否比Indexeddb更有优势?鉴于最近的进展,您还有其他建议吗?(NeDB在其repo上没有太多最近的提交) - Vass
@Vass 我不知道了——抱歉,我已经有一段时间没有进行电子开发了。我会说总体指导方针是相同的:尽可能简单,并且对于客户端应用程序来说,高性能数据库并不合理。 - ccnokes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接