0

我正在从 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 失败

4

0 回答 0