

我是皮克斯呀
electron当中,由于同时存在原生nodejs环境和渲染进程(网页环境)两种运行环境。
所以可选择的数据库特别多,这里我主要提几个常用的数据库存储方式。
1.indexdb
网页开发中常用的一个本地化数据库,还支持数据库隔离。可以在不开启node集成场景下使用。
优势:持久化,性能很棒。也有dexie.js之类的封装,使用方便。健壮,支持版本管理,使用便捷。
缺点:不支持主进程使用,主进程使用必须通过ipc发送到渲染进程,渲染进程再读写数据库,返回数据到主进程。这就很不方便了。
举例:当我们在主进程和渲染进程都希望发起网络请求,这个时候,要获取到用户token凭证再发,就很坑了。你需要在主进程也存一份副本,又或者临时去渲染进程拉取。
推荐场景:仅用于网页应用,不存在主进程使用可能的场景。
2.jsondb
凡是通过file存储,以json作为最终存储的我们都称之为jsondb。一般我们会将一些简单数据存储为json,然后直接写入文件。可借助lowdb等开源封装,lowdb最强的是自然封装了lodash,非常好用。
优势:方便。拿来就用,可跨渲染进程和主进程。这个是indexdb比不了的。
缺点:
1.非常不健壮,兄弟们,一个标点符号错了都可能导致整个json报废。经项目验证,在使用的过程中,如果频繁读写,在读写过程中,遇到系统崩溃、蓝屏死机。大概率json会报废。导致整个数据库丢失。
2.查看不方便,没有可视化工具的情况下,查看起来很累,是树状结构的,不是表格结构。没有配套的可视化操作工具。
推荐场景:仅用于简单存储,比如存储一个可丢失的设置啥的。其他复杂的都不推荐。容错会把你搞残。
3.sqlite
非常有名的客户端存储方案。可使用knex.js封装使用,和dexie类似。
优势:健壮,据说可在系统崩溃场景下恢复。可跨主进程和渲染进程,很方便。文件形式存储,转移搬运都很方便。支持各种可视化工具,管理方便。小巧。
缺点:部署较为麻烦,在打包的环境下要编译sqlite的本地包,对开发环境有要求。
推荐场景:存储量较大,对稳定性要求较高的场景。
综上所述,要存储一定规模的数据,能选的主要就这几个方向。
压轴的放到最后。
重点考虑跨越主进程和渲染进程,以及健壮性,可视化管理几个方向。
所以sqlite是最佳方案,但是缺点就是部署麻烦。
任何方案都要取舍。
现身说法:
因为我们的本地空间使用了json存储,导致出现很多崩溃的情况,在早期版本直接造成了浏览器坏死。后来做了简单容错,也会造成空间丢失。
因为json的特殊性,一旦损坏,没有任何办法修复源文件。只能重新建。这就要求我们对其进行额外的备份容错。
而indexdb方案,因为跨域主进程和渲染进程这方面很麻烦也无法使用。
最终我们重新选择sqlite。目前我正在苦哈哈地重写我们全部的本地空间存储。还需要做版本兼容和迁移。
前车之鉴,希望大家在选型的时候一次就选对,不要反复趟坑。