Closed mikrasilnikov closed 3 years ago
Сейчас импорт загружает и парсит все треки в память, потом вставляет записи в базу. Так сделано потому, что есть группировка по unqieName
for { lines <- Files.list(dataPath) .mapM(p => Files.readAllLines(p, StandardCharsets.UTF_8)) .runCollect .map(chunk => chunk.toList.flatten) parsed <- ZIO.foreachPar(lines)(line => ZIO.succeed(parseLine(line))) unique = parsed .groupBy(_.uniqueName) .map { case (_, items) => items.minBy(t => t.artist.length + t.title.length) } } yield unique.toList
Вместо groupBy можно использовать какой-нибудь HashSet, чтобы запоминать, какие uniqueName уже встречались. Тогда импорт получится сделать потоковым, не преобразуя Stream в List на первом этапе.
Сейчас импорт загружает и парсит все треки в память, потом вставляет записи в базу. Так сделано потому, что есть группировка по unqieName
Вместо groupBy можно использовать какой-нибудь HashSet, чтобы запоминать, какие uniqueName уже встречались. Тогда импорт получится сделать потоковым, не преобразуя Stream в List на первом этапе.