我正在从 azure blob 存储中读取大约 38MB(1.5-2 百万行)的 CSV 类型的 blob 作为 readableStream 并逐行处理它。在处理中,我执行一些验证检查并执行数据库操作。我的代码使用 azurite npm 在本地按预期工作,但是,当我使用 azure blob 存储处理它时,它卡在两者之间。这是代码片段
public async downloadFileAsReadableStream(fullFileName: string): Promise<NodeJS.ReadableStream | undefined> {
const blobServiceClient = BlobServiceClient.fromConnectionString(connectionString);
this.containerClient = blobServiceClient.getContainerClient(containerName);
logger.info(`Start reading file: ${fullFileName} from container: ${this.containerName}`);
const downloadBlockBlobResponse = await this.containerClient
.getBlockBlobClient(fullFileName)
.download();
return downloadBlockBlobResponse.readableStreamBody;
}
const processStream = async (readableStream: NodeJS.ReadableStream) => {
try {
console.time("File processing completed in");
const parser = readableStream.pipe(csvParser());
for await (const row of parser) {
const dbRecord = await dbOperation(row);
}
await onStreamEnd();
} catch (err) {
logger.error(err);
}
}
我是 Nodejs 的新手,不确定我是否正确处理了背压,我的代码会成为 blob 存储或数据库的瓶颈吗?我认为我的代码按顺序执行,即 for await 循环将等待处理该行,直到它获取下一行,我的理解是否正确?此外,我收到了一些失败的GetBlobProperties
附加快照。请帮助我应该如何调试它(假设对 azure 门户的访问受限)。
BLOB API 失败