我有两个数据库,我正在从nodejs读取/更新。一个用HTML格式的新闻文章,另一个用于存储相同文章的干净文本版本。我目前有一个脚本(下面的代码),它从html db读取,提取干净的文本,并将其保存到文本db。
我遇到的问题是,虽然这个脚本适用于有限数量的行,但当我尝试在整个数据库上运行它时,最终会占用整个内存(+ 7GB)。
我注意到所有插入实际上最终都是一起执行的,所以我认为我需要在运行时执行插入操作,以便在仍然从html db中读取行时释放内存。
关于如何做到这一点的任何想法?谢谢!
/**
* Process all articles; extract text from html and save to database.
*/
dbText.run("CREATE TABLE IF NOT EXISTS articles (url string primary key, headline text, subhead text, copy text)");
dbHtml.each("SELECT * FROM articles", function(err, row) {
processArticle(row.url, row.content, dbText);
});
/**
* Function called on each article.
*/
function processArticle(url, content, dbText) {
$ = cheerio.load(content);
var headlineElem = $(...);
var subheadElem = $(...);
var copyElem = $(...);
var headlineText = headlineElem.length > 0 ? headlineElem.text() : "";
var subheadText = subheadElem.length > 0 ? subheadElem.text() : "";
var copyText = copyElem.length > 0 ? getTextWithSpaces(copyElem.get(0)) : "";
if (!headlineText) log(url, "Headline is emtpy.");
if (!subheadText) log(url, "Subhead is emtpy.");
if (!copyText) log(url, "Copy is emtpy.");
var statement = dbText.prepare("INSERT OR REPLACE INTO articles VALUES (?, ?, ?, ?)");
statement.run(url, headlineText, subheadText, copyText);
statement.finalize();
}