У меня есть поток, который в какой-то момент сгруппирует объекты для создания файлов. Я думаю, что могу сжать несколько байтов, сериализовав объект в начале потока. Но мой самый большой вопрос о том, как оптимизировать объем памяти для такого потока:
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
Это дает мне использование памяти в устойчивом состоянии , по крайней мере, 5 ГБ . Это правильно?
Какую стратегию я могу использовать, чтобы ограничить ее только 1 или 2 ГБ? В принципе это должно быть возможно путем свертывания операторов.
Примечание: я знаю, что решение состоит в том, чтобы сделать группу меньше, но давайте рассмотрим размер группы как ограничение проблемы.