sqlite Knex.js内存优化-从csv阅读数据

pdsfdshx  于 2023-10-23  发布在  SQLite
关注(0)|答案(1)|浏览(215)

这就是我目前正在做的,从一个有大约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'.),但我得到错误,我认为这是并发问题造成的,但不确定

v64noz0r

v64noz0r1#

你的问题只是逻辑问题,当你尝试插入数据与事件'数据'。该过程是顺序的,插入数据到数据库需要更多的资源。顺序进程中断数据库插入原因错误.解决方案是把你的代码放在事件'end'是肯定的。如果你喜欢第一种方法,只需添加一个计数器并与你的数据进行比较。长度

相关问题