我有一个spring Boot 应用程序,负责将Excel CSV格式的数据上传/下载到数据库。对于少数记录,它工作得很好,但由于记录超过100万,因此消耗了大量内存和时间。
任何建议,以便我们可以快速下载记录,并具有高效的内存性能。
尝试的解决方案:将Apache POI更改为SXSSF,这减少了内存消耗,但仍然会长时间(几个小时)阻塞内存。
我们正在尝试的另一种方法是使AWS lambda函数,其中此处理应该被委托,并且应用程序的内存不会受到影响。
我有一个spring Boot 应用程序,负责将Excel CSV格式的数据上传/下载到数据库。对于少数记录,它工作得很好,但由于记录超过100万,因此消耗了大量内存和时间。
任何建议,以便我们可以快速下载记录,并具有高效的内存性能。
尝试的解决方案:将Apache POI更改为SXSSF,这减少了内存消耗,但仍然会长时间(几个小时)阻塞内存。
我们正在尝试的另一种方法是使AWS lambda函数,其中此处理应该被委托,并且应用程序的内存不会受到影响。
1条答案
按热度按时间2ledvvac1#
听起来您在使用ApachePOI的API来减少内存消耗方面走对了路。但是,由于您仍然需要很长的处理时间,因此您可能需要考虑通过以下建议进一步优化应用程序的性能:
1.**使用分页:**不要一次检索所有记录,考虑使用分页以较小的块或“页”检索它们。这有助于减少内存消耗和处理时间,尤其是在处理大型数据集时。您可以在SQL查询中使用LIMIT和OFFSET子句来实现这一点。
1.**使用多线程:**为了进一步提高性能,您可以考虑使用多线程同时处理多页数据。这可以通过利用多个CPU内核和提高整体吞吐量来帮助减少处理时间。
1.**使用索引:**如果您的数据库支持索引,请考虑对您经常查询或排序的列进行索引。这有助于提高查询性能并减少检索数据所需的时间。
1.**考虑使用AWS RDS Aurora:**如果您使用的是Amazon Web Services(AWS),请考虑使用AWS RDS Aurora而不是传统数据库。Aurora是一种高性能、可扩展且完全托管的关系数据库服务,针对云进行了优化。它旨在处理大型数据集和高流量负载,这可能更适合您的用例。
1.**使用流式方法:**不要一次下载所有记录,而是考虑使用流式方法以较小的块下载数据。这可以帮助减少内存消耗和处理时间,并通过真实的显示数据来改善用户体验。
1.**使用缓存:**考虑将经常访问的数据缓存到内存中,以提高性能。这有助于减少数据库查询的数量,并缩短应用程序的响应时间。
关于您使用AWS Lambda来委派处理的想法,它可能是从应用程序服务器卸载处理并减少内存使用的良好解决方案。但是,请记住,设置和管理Lambda函数可能会涉及额外的成本和复杂性。