关键词:
【中文标题】使用 SQLite3 + Node.js 的最佳实践【英文标题】:Best practices for using SQLite3 + Node.js 【发布时间】:2013-09-24 20:12:11 【问题描述】:我有一个适度的 Node.js 脚本,它通过 API 从 Wikipedia 中提取数据并将其存储在 SQLite 数据库中。我正在使用这个node-sqlite3 模块。
在某些情况下,我会提取超过 600,000 篇文章的数据,并将关于每篇文章的一些元数据连续存储在数据库中。从 API 中以 500 篇为一组检索文章。
使用 500 篇文章的数据检索 JSON 对象的请求将对象传递给此回调:
// (db already instantiated as 'new sqlite.Database("wikipedia.sqlite");')
function callback(articles)
articles.forEach(function (article)
db.run(
"INSERT OR IGNORE INTO articles (name, id, created) VALUES (?,?,?)",
[
article["title"],
article["pageid"],
article["timestamp"]
]
);
);
这些模块默认并行运行,但 node-sqlite3 的文档包含一个串行操作示例,如下所示:
db.serialize(function ()
db.run("CREATE TABLE lorem (info TEXT)");
var stmt = db.prepare("INSERT INTO lorem VALUES (?)");
for (var i = 0; i < 10; i++)
stmt.run("Ipsum " + i);
stmt.finalize();
我试图模仿这一点,但几乎没有发现性能差异。我做错了吗?现在,从 API 中检索数据的速度比写入数据库的速度快得多,尽管速度还不算慢。但是用 600K 个单独的 INSERT
命令来攻击数据库感觉很笨拙。
更新: 根据接受的答案,这似乎适用于 node-sqlite3,而不是原生解决方案。 (见Issue)。
db.run("BEGIN TRANSACTION");
function callback(articles)
articles.forEach(function (article)
db.run(
"INSERT OR IGNORE INTO articles (name, id, created) VALUES (?,?,?)",
[
article["title"],
article["pageid"],
article["timestamp"]
]
);
);
db.run("END");
【问题讨论】:
+1 表示“开始交易”的想法。您可以根据数据库大小来提高速度的其他方法是安装 ram 驱动器并从那里运行数据库。在 Windows 上,我过去使用过 OSFMunt,效果非常好。 抱歉,您能否解释一下更新部分,因为我不明白。你为什么要在调用 db.run 之间声明一个函数?有错吗? 【参考方案1】:当您对 SQLite 数据库进行多次插入时,您需要将插入的集合包装到事务中。否则,SQLite 将等待磁盘盘片在每次插入时完全旋转,同时对您插入的每条记录进行读写验证。
在 7200 RPM 时,磁盘盘片再次旋转大约需要 1/60 秒,这是计算机时间的永恒。
【讨论】:
这是一个有趣的视角。无论平台(例如电话、服务器)如何,SQLite 都是这样工作的吗?即使插入的集合不相互依赖,仍然需要一个事务来减少总插入时间? @Joyce:事务推迟写后读验证,直到所有插入完成。这就是它加快速度的方式;您不必在每次插入后等待盘片旋转。插入是否相互关联并不重要。使用 node.js 检查数据是不是包含在 SQLite3 数据库中
】使用node.js检查数据是不是包含在SQLite3数据库中【英文标题】:CheckifdataisincludedinSQLite3databasewithnode.js使用node.js检查数据是否包含在SQLite3数据库中【发布时间】:2018-07-0602:32:33【问题描述】:所以我想用node.js检查我的数据库中... 查看详情
使用 Node.js 构建网站的最佳实践
】使用Node.js构建网站的最佳实践【英文标题】:BestpracticesofbuildingawebsiteusingNode.js【发布时间】:2012-07-0322:18:55【问题描述】:我想知道如何使用Node.js从头开始开发网站。我了解我如何可能做到这一点,但我对最佳设计实践... 查看详情
使用 Node.js 构建网站的最佳实践
】使用Node.js构建网站的最佳实践【英文标题】:BestpracticesofbuildingawebsiteusingNode.js【发布时间】:2012-07-0322:18:55【问题描述】:我想知道如何使用Node.js从头开始开发网站。我了解我如何可能做到这一点,但我对最佳设计实践... 查看详情
使用 Mongoose + Node.js 的最佳异步/等待方法是啥?
】使用Mongoose+Node.js的最佳异步/等待方法是啥?【英文标题】:What\'sthebestAsync/AwaitapproachusingMongoose+Node.js?使用Mongoose+Node.js的最佳异步/等待方法是什么?【发布时间】:2020-10-1619:45:18【问题描述】:我想知道这种使用猫鼬的异步/... 查看详情
与 Node.js 一起使用的最佳测试框架是啥? [关闭]
】与Node.js一起使用的最佳测试框架是啥?[关闭]【英文标题】:WhatisthebesttestingframeworktousewithNode.js?[closed]与Node.js一起使用的最佳测试框架是什么?[关闭]【发布时间】:2011-05-1713:33:36【问题描述】:我在https://github.com/ry/node/wiki/m... 查看详情
在 node.js 中安装 sqlite3 时出错
】在node.js中安装sqlite3时出错【英文标题】:Errorinstallingsqlite3innode.js【发布时间】:2017-03-2013:49:07【问题描述】:我在node.js中安装包时遇到问题。我的npm版本是2.14.3,我需要安装sqlite3包。在我的项目路径中,我使用了这个命令... 查看详情
markdownrest-api使用node.js和sqlite3(代码片段)
使用 Node.js 连接到 MongoDB 的最佳方式 [重复]
】使用Node.js连接到MongoDB的最佳方式[重复]【英文标题】:BestwaytoconnecttoMongoDBusingNode.js[duplicate]【发布时间】:2016-11-2322:40:40【问题描述】:我已经阅读了一些关于如何将Mongo与Node一起使用的指南,它们似乎都以不同的方式连接... 查看详情
在 node.js 中使用 fs 覆盖文件的最佳方法是啥
】在node.js中使用fs覆盖文件的最佳方法是啥【英文标题】:What\'sthebestwaytooverwriteafileusingfsinnode.js在node.js中使用fs覆盖文件的最佳方法是什么【发布时间】:2017-10-0902:27:46【问题描述】:我正在尝试覆盖现有文件。我首先使用以... 查看详情
使用 express.js 在 node.js 中提供 html 的最佳实践是啥?
】使用express.js在node.js中提供html的最佳实践是啥?【英文标题】:Whatisthebestpracticeforservinghtmlinnode.jswithexpress.js?使用express.js在node.js中提供html的最佳实践是什么?【发布时间】:2013-05-1117:10:06【问题描述】:我目前正在我的app.js/... 查看详情
如何使用node js同步读取sqlite3数据库?
】如何使用nodejs同步读取sqlite3数据库?【英文标题】:Howtoreadasqlite3database,usingnodejs,synchronously?【发布时间】:2013-03-1215:19:29【问题描述】:exports.allProbes=function()varrows=db.all("SELECT*FROMprobes;");returnrows;;main:varjson_values=allPro 查看详情
使用 Express.js 在 Node.js 中设置路由的最佳方式
】使用Express.js在Node.js中设置路由的最佳方式【英文标题】:BestwaytosetuproutesinNode.jswithExpress.js【发布时间】:2012-08-0102:50:20【问题描述】:我想知道如何在Express.js中构建我的路线。这是我现在的应用程序目录:├──public│ ... 查看详情
Node.js 上 MongoDB 连接的最佳实践是啥?
...:02:48【问题描述】:这对我来说有点不清楚(我刚刚开始使用Node和Mongo),并且由于服务器性能和压力(我想这是另一个问题,但我会得到到文章末尾)。所以,假设我正在使用N 查看详情
讨论:使用 node.js / socket.io 实现聊天室的最佳方式?
】讨论:使用node.js/socket.io实现聊天室的最佳方式?【英文标题】:Discussion:Bestwaytoimplementachatroomwithnode.js/socket.io?【发布时间】:2011-11-2018:49:48【问题描述】:我说的不是一般的聊天应用程序,而是专门讨论聊天室的实现。所以... 查看详情
10+最佳的node.js教程和实例
...s呢?Node.js是迄今运用最多的服务端JavaScript运行时环境,使用JavaScrip 查看详情
Node.js 说它不能加载 sqlite3 模块,但无论如何
】Node.js说它不能加载sqlite3模块,但无论如何【英文标题】:Node.jssaysitcan\'tloadsqlite3module,butdoesanyway【发布时间】:2013-12-1121:01:55【问题描述】:我正在使用新的Node.jsToolsforVisualStudio并包含sqlite3npmmodule。当我调用require(\'sqlite3\')... 查看详情
使用 JWT (Node.js + mongoose) 在 REST API 中管理用户权限的最佳方法
】使用JWT(Node.js+mongoose)在RESTAPI中管理用户权限的最佳方法【英文标题】:BestwaytomanageuserpermissionsinaRESTAPIusingJWT(Node.js+mongoose)【发布时间】:2019-06-2713:25:48【问题描述】:我是mongoose和mongoDB的新手,我想知道避免用户在登录后修... 查看详情
node.js 的最佳 Facebook 连接库是啥?
...【发布时间】:2011-05-2722:56:55【问题描述】:我见过多种使用node.js和facebookconnect的工具。然而,其中许多似乎不完整、过于复杂(非抽象)或不再更新/维护。我找到了这三个项目:https://gi 查看详情