我有一个带有基本REST API的Sping Boot 应用程序。我的问题是我们应该使用什么来下载一些批量数据?如何在不发生内存泄漏的情况下下载批量数据的更好方法是什么?让我们假设我们有1000万条记录。
以下是一些方法,但不确定:
1.在单独的线程中用PipedOutputStream写入数据时,用PipedInputStream下载。这是好的选择还是不好的选择?
1.当数据在单独的线程中写入临时文件时,使用ByteArrayOutputStream进行下载,完成后即可下载。我们可以为最终用户使用一些标志(如DOWNLOAD_ACTIVE、DOWNLOAD_DONE)标记此操作。用户只是使用结果标志DOWNLOAD_ACTIVE启动下载,并尝试ping服务器以获取响应标志DOWNLOAD_DONE。完成后,用户将发送下载数据的请求。
总结2)
1. initiate request to download data - ACTIVE state
2. ping server and server returns current state - ACTIVE or DONE
3. if final state is DONE then user initiate final request to download data
谢谢
1条答案
按热度按时间vdgimpew1#
你可以使用第二种方法,它可以在后台准备数据,一旦准备好了,你就可以下载它。
1.发送准备数据的请求。服务器以UUID响应。
1.服务器开始在后台准备文件。服务器有一个Map,其中包含具有新UUID的键和状态为ACTIVE的值。
1.客户端保存UUID,并在一定时间间隔后通过传递UUID检查服务器。
1.一旦服务器完成任务,它将把给定UUID值的Map更新为状态DONE。
1.由于状态为完成,下一个请求将提供状态完成和UI,并发送另一个下载文件的请求。
以上方法只有在您不刷新页面的情况下才有效。因为页面刷新会清除UUID,您必须重新进行。
要在刷新/交叉登录后实现这一点,您需要使用数据库表而不是Map。将用户名与其他信息沿着存储,并在准备好后通知用户。