2016-07-27 71 views
0

我有两个CSV文件,其中一个包含500k +客户记录。我试图将每一行转换为一个客户对象,并对我也负责的API进行POST。Java - 调用500k行数据的API。 Spring批处理或Websocket?

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

我有两个建议扔给我,打开一个WebSocket或使用Spring Batch。这是一个很好的用例,用于打开WebSocket并发送消息而不是打开多个HTTP连接?或者更好地采用更为传统的使用春季批次的方法?

+0

将整个csv上传到服务器并将重组部分提供给服务器 –

+0

通过API,您是指REST服务?如果是这样,您可以添加一种方式来批量添加客户。 – Gimby

回答

2

由于它似乎是您自己的服务器,因此您应该制作一个服务器路由,允许您一次发送多条记录,然后您可以将事件批量调配到更少的API调用中。

如果真的需要发送500k条记录,您可能仍然希望将它们批量处理为多个请求,但您至少可以一次完成10k条记录并管理您的连接,因此您的连接数不会超过在任何给定的时间5-10个航班的请求(因为无论如何,你的服务器不可能一次处理超过这个数量的数据,这会让你的客户端不会耗尽网络资源)。

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

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


虽然WebSocket连接将让您使用多个请求相同的连接(这是一件好事),你还是不希望被发送500k的个人记录。仅仅发送这么多独立请求的开销无论是webSocket还是http请求都是低效的。相反,您确实希望批量处理请求并根据请求发送大量数据。

+0

谢谢,我已经实现了spring-batch,它似乎运行良好。 – Francium123