【发布时间】:2020-02-27 10:43:47
【问题描述】:
我有一个流,它会在某些时候将对象分组以创建文件。 我想我可以通过在流的早期序列化对象来压缩一些字节。 但我最大的问题是如何优化这样的流的内存占用:
val sourceOfCustomer = Source.repeat(Customer(name = "test"))
def serializeCustomer(customer: Customer) = customer.toString
sourceOfCustomers
.via(serializeCustomer) // 1KB
.grouped(1000000) // 1GB
.via(processFile) // 1GB
.via(moreProcessing) // 1GB
.via(evenMoreProcessing) // 1GB
.to(fileSink) // 1GB
这使我在稳定状态下的内存使用量至少 5GB。这是正确的吗?
我可以使用什么策略将其仅限制为 1 或 2GB?原则上应该可以通过折叠操作符来实现。
注意:我知道一个解决方案是使组更小,但让我们考虑组的大小是问题的约束。
【问题讨论】:
-
将每个计算输入/输出分解为更细粒度的部分。
-
请提供
sourceOfCustomers和serializeCustomer的类型以及他们在做什么的简短描述。谢谢! -
@IvanKurchenko 他们可以是任何东西,但我用他们的描述更新了问题
标签: scala akka akka-stream