我有一个适度的Node.js脚本,它通过API从维基百科中提取数据并将其存储在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"]]);
});
}
Run Code Online (Sandbox Code Playgroud)
这些模块默认并行运行,但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();
}
Run Code Online (Sandbox Code Playgroud)
我试图模仿这个,看到几乎没有性能差异.我做错了吗?现在,数据从API检索的速度比写入数据库的速度快得多,尽管速度并不慢.但是用600K个别INSERT
命令击败数据库感觉很笨拙.
更新:每个接受的答案,这似乎适用于node-sqlite3,而不是本机解决方案.(见本期).
db.run("BEGIN TRANSACTION");
function callback(articles) {
articles.forEach(function(article) {
db.run("INSERT OR …
Run Code Online (Sandbox Code Playgroud)