【发布时间】:2021-05-10 15:29:53
【问题描述】:
我的 Web 服务器上有一个端点,用于处理具有包含对 mongodb 数据库查询的正文的发布请求。然后使用 exceljs 一次一个文档将查询结果写入一个 excel 文件。当查询产生合理数量的文档时,它一旦准备好就可以很好地响应文件名。当查询来自多个请求的 200k+ 个文档时,就会出现问题。发生的情况是,通常需要大约 1 分钟才能完成编写和响应单个客户端请求 500k+ 个文档,而完成编写和响应多个请求并查询相同数量的文档甚至更少需要几分钟。
端点几乎是这样的:
app.post('/queryToExcel', async (req, res) => {
let cursor = mongodb.collection('collection').find(req.body);
let filename = `./files/excel${Date.now()}`;
let workbook = new Excel.stream.xlsx.WorkbookWriter({ filename: filename });
let worksheet = workbook.addWorksheet("Sheet 1");
let isFirstDoc = true;
await cursor.forEach(document => {
if (isFirstDoc) {
worksheet.columns = getColumnNames(document);
isFirstDoc = false;
}
worksheet.addRow(row).commit();
});
await workbook.commit();
res.send(filename);
});
无论网络服务器是否正在处理对其他文件的其他请求,我应该如何在与查询请求的文档数量相关的时间范围内做出响应?是线程问题还是我做错了什么?
【问题讨论】: