Node.js Nodejs是排队数据库插入的最佳工具?

Node.js Nodejs是排队数据库插入的最佳工具?,node.js,postgresql,Node.js,Postgresql,我有一个应用程序,它的端点接收大的.csv文件,需要对其进行解析、验证,并且该文件中的每一行都将插入数据库。因为文件太大,无法立即响应用户,所以我只发送消息,告诉用户“队列中的文件正在处理”。在我的例子中,在后台在数据库(postgresql)中插入10到100k行,并在成功与否的情况下获得一些报告的最佳工具是什么?上传此类文件的整个生命周期是什么样的?独立于您将专门用于此工作的工具,我建议您使用以下生命周期 用户将文件上传到服务器,一旦文件被存储,您就可以安全地结束请求,同时告诉用户文件已成功

我有一个应用程序,它的端点接收大的.csv文件,需要对其进行解析、验证,并且该文件中的每一行都将插入数据库。因为文件太大,无法立即响应用户,所以我只发送消息,告诉用户“队列中的文件正在处理”。在我的例子中,在后台在数据库(postgresql)中插入10到100k行,并在成功与否的情况下获得一些报告的最佳工具是什么?上传此类文件的整个生命周期是什么样的?

独立于您将专门用于此工作的工具,我建议您使用以下生命周期

  • 用户将文件上传到服务器,一旦文件被存储,您就可以安全地结束请求,同时告诉用户文件已成功上传,并且正在处理中。现在它可能取决于数据库,但我不想直接在数据库中存储文件缓冲区。我会简单地将文件存储在文件存储器中,并且只在数据库中保存对该文件的引用。我通常对所有文件都这样做

  • 现在在服务器上有一些处理队列(我说是排序,因为有很多可能)。在我看来,我建议使用3个处理队列。现在,让我们不要考虑“进度更新/报告”部分

  • 文件已上载,将创建作业并推送到第一个队列队列a(文件解析)。队列A将验证文件,如果任务成功,它将为队列B创建下一个作业,并将其推送到队列B
  • 队列B正在逐行读取文件,并将其推送到下一个队列队列C
  • 最后,队列C存储它被送入数据库的每一行
  • 优势
    • 队列不必等待所有其他队列完成其工作。每个队列只负责其工作线的一部分
    • 例如,当队列A验证完一个文件后,它可以立即启动下一个文件。当队列B读取完一个文件后,它可以立即开始读取下一个文件,不管队列C是否已将所有行写入数据库
    • 您可以决定(每个队列)一次处理多少个作业。逐个文件或同时多个文件(多线程、异步操作)
    • 将其拆分为多个“工作站”,您可以更深入地了解正在发生的事情以及发生的位置
    最新进展/报告 让我们假设这一切都是由用户通过前端web应用程序控制的

    • 通过websocket添加实时更新,比如此时文件发生的情况(“验证文件…”、“读取文件…”、“保存到数据库…”、“45/13320行完成…”)等等
    • 让服务器保存有关成功任务数、失败任务数、处理时间和统计信息的报告。并通过另一个端点为每个作业提供这些报告


    不需要太多细节,我希望这能给你一个好的起点!Stackoverflow不应用于询问建议。请让我们知道您面临的确切技术问题,社区将非常乐意帮助您。例如,您可以从
    better queue
    获得基本的队列功能。非常容易安装。对于更高级的用法,我建议RabbitMQ@PascalLamers在这种情况下,生命周期是什么?我只是将flle缓冲区写入数据库,并将任务排队,然后将状态更改为processing(例如),并开始从数据库读取数据,同时将其写入另一个表?
        - Queue A : File parsing, validating 
        - Queue B : File reading
        - Queue C : Database storing