使用哪个SQLite版本与nodejs配合使用?

44

我正在使用node.js开发应用程序。我想使用SQLite作为嵌入式数据库。我在网上搜索了SQLite的npm模块,找到了以下几个:

  1. https://github.com/grumdrig/node-sqlite
  2. https://github.com/orlandov/node-sqlite
  3. https://github.com/developmentseed/node-sqlite3

从文档和其他来源得知,(1)是同步操作,而(2)和(3)是异步操作。因此,我放弃了使用(1)的计划。

现在,我想知道(2)和(3)之间的区别,哪一个更好?我通过谷歌搜索很多但没有找到太多有用的信息。

6个回答

35

大约一年没有更新了。因此不是最活跃的。 - CaptainBli
2
最近更新到了Node 8(本文撰写时为2017年8月5日)。 - Ofer Zelig

17

另一种选择是使用嵌入式JavaScript数据库。这样,您只需在package.json中声明数据库为依赖项,并在应用程序中使用require()进行调用。

例如,可以查看我开发的NeDBnStore


还可以查看FinalDB(https://www.npmjs.org/package/final-db)作为另一种嵌入式数据库解决方案。 - Szymon Wygnański
这些可能是文档型数据库的最佳解决方案。 - Nuno Furtado

13

对于我的架构,同步的 better-sqlite3 似乎更好:

https://www.npmjs.com/package/better-sqlite3

  • 完整事务支持
  • 注重性能、高效和安全
  • 易于使用的同步 API(比异步 API 更快)
  • 自定义 SQL 函数支持
  • 64位整数支持(在需要时才会涉及到)

这些同步调用难道不会阻塞主线程吗?比如说,如果你的应用程序需要处理精确的计时,当你执行 SQL 查询时,它将会随机地冻结,不是吗?而且每个插入/更新都需要进行 IO 操作,对吗? - Klesun

5

Node.js应用程序的SQLite客户端,内置基于SQL的迁移API

NPM版本 NPM下载量 在线聊天

import express from 'express';
import db from 'sqlite';                                       // <=
import Promise from 'bluebird';

const app = express();
const port = process.env.PORT || 3000;

app.get('/posts', async (req, res, next) => {
  try {
    const posts = await db.all('SELECT * FROM Post LIMIT 10'); // <=
    res.send(posts);
  } catch (err) {
    next(err);
  }
});

Promise.resolve()
  // First, try to open the database
  .then(() => db.open('./database.sqlite', { Promise })        // <=
  // Update db schema to the latest version using SQL-based migrations
  .then(() => db.migrate({ force: 'last' })                    // <=
  // Display error message if something went wrong
  .catch((err) => console.error(err.stack))
  // Finally, launch the Node.js app
  .finally(() => app.listen(port));

注意:上面的示例仅适用于Node.js v6及更高版本(假设代码中使用的importasync/await语言特性已经通过Babel转换)。对于早期版本的Node.js,请使用var db = require('sqlite/legacy');


这个实现让我的应用程序更有趣。谢谢! :) - Francis Rodrigues
这是关于此事的文章链接:https://medium.com/@tarkus/node-js-and-sqlite-for-rapid-prototyping-bc9cf1f26f10 - Francis Rodrigues

0

Grumdrig的模块似乎是Stack Overflow和其他网站上引用最多的模块。

此外,文档也相当不错:http://github.grumdrig.com/node-sqlite/

我对Node SQLite的经验相当有限,但社区似乎已经做出了选择。


23
别用这个(我的),它已经过时、被放弃了,并且只支持同步。 - Grumdrig


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