如何使用node.js和react.js下载大型CSV文件
我想通过node.js从react下载一个Mongo集合(包含大量记录)作为CSV如何使用node.js和react.js下载大型CSV文件,node.js,reactjs,mongodb,Node.js,Reactjs,Mongodb,我想通过node.js从react下载一个Mongo集合(包含大量记录)作为CSV 目前我要做的是,首先将数据加载到节点,然后处理它们,然后解析它们。对于小型收藏,这很管用。但当记录数越来越高时,经过很长一段时间后返回502错误。最好的方法是什么?这是帮助我解决上述问题的基本代码spinet const collection = ... ; const query = ... ; const select = ... ; const cursor = mongo
目前我要做的是,首先将数据加载到节点,然后处理它们,然后解析它们。对于小型收藏,这很管用。但当记录数越来越高时,经过很长一段时间后返回502错误。最好的方法是什么?这是帮助我解决上述问题的基本代码spinet
const collection = ... ;
const query = ... ;
const select = ... ;
const cursor = mongodb.collection(collection).find(query, select)
var csv = require('csv');
transfer(doc) {
return {
Address: doc.address,
State: doc.state.abbreviation
};
}
function(req, resp) {
const cursor = ...
// The transfer function (above)
const transfer = ...;
const fileName = "Download.csv";
resp.setHeader('Content-disposition', `attachment; fileame=${fileName}`);
resp.writeHead(200, { 'Content-Type': 'text/csv' });
resp.flushHeaders();
// Stream the query result
cursor.stream()
.pipe(csv.transfer(transformer))
.pipe(csv.stringify({header: true}))
.pipe(resp)
}
将流程拆分为多个部分并使用Redis。解析CSV并将每个作业推送到Redis队列。并行启动新的工作进程,以从队列中获取作业并对其进行处理。如果您的系统有多个内核,则可以使用群集模块来拆分工作进程。请注意,进程没有共享内存 Redis连接 工作进程
var clusterWorkerSize=require('os').cpus().length;
var工人=[];
对于(var i=0;i
使用游标并使用管道流式传输响应。它适用于处理大型数据集,还可以防止内存泄漏导致系统崩溃。您可以在中查看示例,您可以解释这一行。管道(csv.transfer(transformer))
var kue = require("kue");
var queue = kue.createQueue(
{
redis: `redis://${redisHost}:${redisPort}`,
jobEvents: false
}
);
var clusterWorkerSize = require('os').cpus().length;
var workers = [];
for (var i = 0; i < clusterWorkerSize; i++) {
var worker = cluster.fork();
workers.push(worker);
}