这就是我目前正在做的,从一个有大约2,000,000行的csv文件中插入数据到sqlite db。有没有更有效的内存方式?当我尝试使用knex.js在.on('data '.)中插入数据时,我在处理它们的过程中遇到了各种错误。
async function insertData(filePath: string, tableName: string) {
const data: CsvRow[] = [];
await new Promise<void>((resolve, reject) => {
fs.createReadStream(filePath)
.pipe(fastcsv.parse({ headers: true }))
.on("data", (row: CsvRow) => {
data.push(row);
})
.on("end", () => {
// Insert any remaining rows in the buffer
console.log("BATCH INSERTING DATA");
db.batchInsert(tableName, data, 100)
.then(() => {
console.log("Batch Insert Complete!");
resolve();
})
.catch((error) => {
console.log("Error in batch insert: ", error);
reject(error);
});
})
.on("error", (error) => {
console.log("Error in reading csv: ", error);
reject(error);
});
});
}
我试着调用insert inside .on('data'.),但我得到错误,我认为这是并发问题造成的,但不确定
1条答案
按热度按时间v64noz0r1#
你的问题只是逻辑问题,当你尝试插入数据与事件'数据'。该过程是顺序的,插入数据到数据库需要更多的资源。顺序进程中断数据库插入原因错误.解决方案是把你的代码放在事件'end'是肯定的。如果你喜欢第一种方法,只需添加一个计数器并与你的数据进行比较。长度