Nodejs node-webkit 开发桌面应用程序的数据存储问题

Nodejs node-webkit 开发桌面应用程序的数据存储问题

以前接了个项目,一期和二期都是用 WPF 做的,现在要做三期,客户要客户端和网站同时进行,于是便想到了 node-webkit

但有个问题啊,以前的数据都是存在 access 数据库中的,现在用 node-webkit 的话数据怎么存放啊,以前用 access 时数据量挺大的,几百兆,官方文档说用 sqlite,安全和性能怎么样?

8 回复

Nodejs node-webkit 开发桌面应用程序的数据存储问题

以前接了个项目,一期和二期都是用 WPF 做的,现在要做三期,客户要客户端和网站同时进行,于是便想到了 node-webkit。但有个问题啊,以前的数据都是存在 Access 数据库中的,现在用 node-webkit 的话数据怎么存放呢?以前用 Access 时数据量挺大的,几百兆,官方文档说用 SQLite,那么安全性和性能怎么样呢?

数据存储方案选择

在决定使用哪种数据库之前,我们需要考虑几个因素:

  1. 数据量:几百兆的数据量需要一个能够高效处理大量数据的数据库。
  2. 安全性:桌面应用需要确保数据的安全性,防止被恶意篡改或访问。
  3. 跨平台兼容性:node-webkit 支持 Windows、Mac 和 Linux,因此所选数据库也应支持这些平台。

使用 SQLite

SQLite 是一个轻量级的关系型数据库,广泛应用于嵌入式系统中。它不需要单独的服务器进程或操作系统(例如 daemonservice),数据直接存储在磁盘上的单个文件中,这使得它非常适合桌面应用。

安装 SQLite3 模块

首先,你需要安装 sqlite3 模块。可以通过 npm 安装:

npm install sqlite3
示例代码

以下是一个简单的示例代码,展示如何使用 SQLite3 在 node-webkit 中创建和操作数据库:

const sqlite3 = require('sqlite3').verbose();

// 打开数据库
let db = new sqlite3.Database('./data.db', (err) => {
    if (err) {
        console.error(err.message);
    }
    console.log('Connected to the database.');
});

// 创建表
db.run(`CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    email TEXT UNIQUE NOT NULL
)`, (err) => {
    if (err) {
        return console.error(err.message);
    }
    console.log('Table created.');
});

// 插入数据
const insertSql = 'INSERT INTO users (name, email) VALUES (?, ?)';
db.run(insertSql, ['John Doe', 'john@example.com'], function(err) {
    if (err) {
        return console.error(err.message);
    }
    console.log(`A row has been inserted with rowid ${this.lastID}`);
});

// 查询数据
db.all("SELECT * FROM users", [], (err, rows) => {
    if (err) {
        throw err;
    }
    rows.forEach((row) => {
        console.log(row.id + ": " + row.name + ", " + row.email);
    });
});

// 关闭数据库连接
db.close((err) => {
    if (err) {
        return console.error(err.message);
    }
    console.log('Close the database connection.');
});

安全性

SQLite 本身提供了一些安全措施,例如通过 SQL 注入防护和内置的加密功能。然而,在实际应用中,还需要对输入进行严格的验证和过滤,以确保数据的安全性。

性能

对于几百兆的数据量,SQLite 的性能通常是足够的。它在内存管理和查询优化方面做得很好,特别是在小到中等规模的应用中。如果你的数据量更大或者需要更复杂的查询,可以考虑使用其他数据库如 PostgreSQL 或 MySQL。

总之,SQLite 是一个可靠的选择,它简单易用且具备良好的性能和安全性,非常适合 node-webkit 开发桌面应用的数据存储需求。


大神都在干嘛啊?帮帮忙啦!!! 大家做客户端时数据储存怎么解决的?

sqlite3 这么有名 资料相关应该很好找吧…??

sqlite3 跟access 相比…应该是毫秒杀吧…再说了…竟然用到了node-webkit 应该是有跨平台需求吧…客户端的话不用sqlite3 貌似也没办法了吧…

基本上面有名的PC ,客户端都有用sqlite 做数据库(移动端全部都是sqlite),例如火狐,chrome 都是用sqlite3, 你可以去用户数据那里看…

话说…有个地方不太了解…一个端就有几百M 数据库…这个数据不应该放在后端…客户端用到的的时候去请求的吗.?.

客户要求在离线时也可以浏览上次联网时网上的所有资源,所以只好服务器端一个数据库,客户端下载保存在本地。。这么说来access能完成的工作用sqlite都能胜任喽?

每次初始化.都要等待下载几百M 的数据库…

sqlite3 你值得拥有…不过,access 居然还有在用…让我挺惊讶的…

windows平台,还可以加密,数据安全。 sqlite3的数据安全怎么办,能加密吗?

使用 node-webkit(现称为 NW.js)开发桌面应用程序时,数据存储可以考虑使用 SQLite 数据库。SQLite 是一个轻量级的嵌入式数据库,非常适合桌面应用,并且支持大规模数据存储。它在安全性、性能和易用性方面都表现良好。

以下是一个简单的示例,展示如何在 NW.js 中使用 SQLite 进行数据存储:

  1. 首先安装 sqlite3 库:

    npm install sqlite3 --save
    
  2. 创建一个简单的 SQLite 数据库并执行基本操作:

    const sqlite3 = require('sqlite3').verbose();
    let db = new sqlite3.Database('./data.db', (err) => {
        if (err) {
            console.error(err.message);
        }
        console.log('Connected to the in-memory SQlite database.');
    });
    
    // 创建表
    db.serialize(() => {
        db.run(`CREATE TABLE IF NOT EXISTS users (
                    id INTEGER PRIMARY KEY,
                    name TEXT,
                    email TEXT
                )`);
    });
    
    // 插入数据
    const insertSql = 'INSERT INTO users (name, email) VALUES (?, ?)';
    const user = ['John Doe', 'john.doe@example.com'];
    db.run(insertSql, user, function(err) {
        if (err) {
            return console.error(err.message);
        }
        console.log(`A row has been inserted with rowid ${this.lastID}`);
    });
    
    // 查询数据
    db.all('SELECT * FROM users', [], (err, rows) => {
        if (err) {
            throw err;
        }
        rows.forEach((row) => {
            console.log(row.id + ': ' + row.name + ', ' + row.email);
        });
    });
    
    // 关闭数据库连接
    db.close((err) => {
        if (err) {
            return console.error(err.message);
        }
        console.log('Close the database connection.');
    });
    

在这个示例中,我们首先创建了一个名为 data.db 的 SQLite 数据库文件,并在其中创建了一个 users 表。然后插入了一条用户记录,并查询了所有记录,最后关闭了数据库连接。

SQLite 是一个非常强大的工具,适合处理大量数据,而且其性能和安全性也得到了广泛的认可。对于你的应用场景,迁移从 Access 到 SQLite 是一个合理的选择。

回到顶部