【发布时间】:2020-06-29 22:26:14
【问题描述】:
我需要从 postgres 数据库中读取一个大型数据集,该数据库需要通过 rest api 端点进行访问。使用数据的客户端需要将数据转换为 csv 格式(以后可能需要支持 json 和 xml)。
在服务器端,我们使用 Spring Boot v2.1.6.RELEASE 和 spring-jdbc v5.1.8.RELEASE。
我尝试使用分页并遍历所有页面并将结果存储到列表中并返回列表,但由于数据集不适合内存而导致OutOfMemory 错误。
流式传输大型数据集似乎是处理内存限制的好方法。 有什么方法可以只返回所有数据库实体的 Stream 并让其余 api 将相同的内容返回给客户端?客户端将如何反序列化此流?
除此之外还有其他选择吗?
【问题讨论】:
-
这可以通过 webflux 和响应式数据库来实现。您是否使用 webflux 进行反应流,您的数据库是什么?
-
数据库是postgres,使用spring-jdbc v5.1.8的
NamedParameterJdbcTemplate查询数据库。我查看了 r2dbc-postgresql 的反应式数据库,但它还不是 GA。
标签: java spring-boot rest spring-mvc spring-webflux