mikrasilnikov / vine

MIT License
0 stars 0 forks source link

Потоковый импорт #5

Closed mikrasilnikov closed 3 years ago

mikrasilnikov commented 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 на первом этапе.