Java - 调用 API 获取 500k 行数据。 Spring批处理还是Websocket?

标签 java websocket spring-batch spring-websocket

我有两个 CSV 文件,其中一个包含 50 万多条客户记录。我正在尝试将每一行转换为客户对象,并对我也负责的 API 执行 POST。

这种方法有一个明显的问题,即触发 500k+ HTTP 调用并导致达到最大 HTTP 连接数。

我收到了两个建议,打开 WebSocket 或使用 Spring Batch。这是打开 WebSocket 并发送消息而不是打开多个 HTTP 连接的良好用例吗?还是走更传统的使用 Spring Batch 的路线更好?

最佳答案

由于它看起来是您自己的服务器,因此您应该创建一个服务器路由,允许您一次向其发送多条记录,然后您可以将数据批处理为更少的 API 调用。

如果确实有 500k 条记录,您需要发送,您可能仍然希望将它们批处理为多个请求,但您至少可以一次发送 10k 条记录并管理您的连接,这样您的连接就不会超过 5 个在任何给定时间,有 -10 个正在运行的请求(因为您的服务器不可能同时处理更多请求,这应该可以防止您的客户端耗尽网络资源)。

或者,如果您想要更像文件上传,您可以发送 500k 记录的数据,让您的服务器像文件上传一样处理它,然后一旦成功,让服务器处理它。

事实上,您可能只想上传 CSV 并让服务器直接处理它。

<小时/>

虽然 webSocket 连接可以让您使用同一个连接来处理多个请求(这是一件好事),但您仍然不希望发送 500k 条单独的记录。无论是 webSocket 还是 http 请求,仅发送这么多单独请求的开销都是低效的。相反,您确实希望对请求进行批处理并为每个请求发送大量数据。

关于Java - 调用 API 获取 500k 行数据。 Spring批处理还是Websocket?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38607506/

相关文章:

java - 尝试仅获取值的子集时,FixedLength 会出现问题

java - 如何将 HTML 表单数据发送到 Java http 服务器

java - 如何使用 Oracle 驱动程序依赖项自定义构建 Spring Cloud Data Flow 服务器?

Java 如何从接收到的 UDP 字节中解析 double 值?

java - 在 JNA 中分配 WinDef.RECT 结构

node.js - websocket 客户端到 socket.io

websocket - Microsoft Edge 不允许 websocket 的 localhost 环回

spring - 一个步骤中不止一个 tasklet?

java - Hibernate cfg.xml - 无法建立 jdbc 连接

java - 测试NG错误: Cannot find class in classpath after compiling the maven project