Парсер Json2csv занимает слишком много времени при разборе - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть API, который подключен к AWS лямбда, который делает следующее:

  1. Получение JSON данных из s3. Количество записей около 60 000
  2. Использование библиотеки Json2csv для анализа данных JSON в строку csv
  3. Помещение результата строки csv в корзину s3

Точка 2 выше занимает слишком много времени для разбора данных JSON в строку csv. Библиотека, которую я использую для этого: json2csv: https://www.npmjs.com/package/json2csv

Ниже приведен мой код:

/// Get data in JSON format in object: records (array of JSON)

let headers = [
    {
      label: "Id",
      value: "id"
    },
    {
      label: "Person Type",
      value: "type"
    },
    {
      label: "Person Name",
      value: "name"
    }
];

let json2csvParser = new Parser({ fields: headers });

console.log("Parsing started");
let dataInCsv = json2csvParser.parse(records);
console.log("Parsing completed");

// PutObject of dataInCsv in s3

Для анализа 60К-записей требуется около 20 секунд. Что я могу сделать, чтобы улучшить производительность здесь? Любая другая библиотека? Я привык думать, что операции с памятью выполняются довольно быстро. Почему этот разбор медленный? Любая помощь, пожалуйста.

1 Ответ

0 голосов
/ 03 апреля 2020

Если вы пишете и читаете в файл, вы можете использовать это asyn c решение, взятое из документации пакета json2csv.

const { createReadStream, createWriteStream } = require('fs');
const { Transform } = require('json2csv');

const fields = ['field1', 'field2', 'field3'];
const opts = { fields };
const transformOpts = { highWaterMark: 16384, encoding: 'utf-8' };

const input = createReadStream(inputPath, { encoding: 'utf8' });
const output = createWriteStream(outputPath, { encoding: 'utf8' });
const json2csv = new Transform(opts, transformOpts);

const processor = input.pipe(json2csv).pipe(output);

Вы можете заменить createReadStream и createWriteStream на AWS лямбда-потоков, которые вы нужно, возможно это

...