Electron下使用数据库。

Electron下使用数据库。

Posted by inheader on January 2, 2019

前言

在前段时间公司需要用Electron来开发一款自用的桌面软件,该软件对数据库的性能以及存储量都有一定的要求,需要在本地存储10W+的商品数据,并且需要对数据进行增,删,改,查。下面就是我在Electron下使用数据库的过程

数据库的选择

由于软件需要在每个用户的本地独立安装使用,所以就直接放弃来使用线上的数据库通过接口来实现,并且这种效率非常之低效

Rxdb

最开始是选择Rxdb,RxDB是一个JavaScript的客户端数据库,主要用户浏览器,NodeJS、Electron、Cordova、React-Native 及其他JavaScript运行环境。

在安装和使用的过程中对很方便,在使用js批量插入数据测试的同事,它的性能就有点捉襟见肘了,插入在5万条数据的时候就显示的非常缓慢了,查询也是异常的慢。

IndexedDB

IndexedDB 是浏览器自带的,Electron是基于Chrome浏览器的,无需安装可以直接使用,但是测试之后也发现数据量大了之后就非常慢了。

sqlite3

sqlite3在Electron中需要编译,需要安装python,需要安装 node-gyp 具体可以参考

以下是我遇到的各种错误,当时没有截图,现在只能描述。暂时只想起了这些,前端新手安装起来会很困难

  1. node-gyp安装,这个较简单,注意windows下需要提前安装好环境(vs2015)
  2. 注意看错误提示,在最开始的地方有时会提示说找不到python,需要设置环境变量。 可是尼玛我环境变量就在上面写着啊!我也是醉了。怎么设置都不行。最后python卸载重装,不报这个错了。(如果python有多个版本,需要设置版本,详情搜node-gyp包)
  3. 报错 #npm install# MSBUILD : error MSB4132: 无法识别工具版本“2.0”。可用的工具版本为 “4.0”。啥也别说了,去装vs2015吧。
  4. 报错 fatal error C1083: 无法打开包括文件: “node.h”。这个错误竟然是因为系统用户名必须要ASCII码的,我tm当时手贱写了个中文用户名,卡了我一晚上。

sql.js

sql.js安装起来比较简单,测试了一下性能比Rxdb和IndexedDB强很多

# 安装sql.js
npm install sql.js

使用方法

let fs = require("fs");
let sql = require("sql.js");
let filebuffer = fs.readFileSync("db/subway.db");
// 记载数据库
let db = new sql.Database(filebuffer);
let sql = "SELECT * FROM `tables` WHERE user_id = 1 ";
let resp = db.exec(sql);

具体的sqlite的数据库orm可以去网上找开源项目个人比较喜欢单文件orm

提醒

在electron打包的时候回遇到无法将sqlite文件打包到软件中去,需要在package.json文件中配置extraFiles、extraResources

  "main": "dist/electron.js",
  "build": {
    "extraFiles": [
      "db/**/*"
    ],
    "extraResources": [
      "db/**/*"
    ],
  },