Таким образом, в вашем сценарии есть несколько возможных узких мест.
- чтение строк файла
- Анализ строки для построения объекта для вставки в базу данных
- проверить применимость объекта (т.е. ответвления без фильтра)
- вставить в db
Как правило, вы бы сказали, что IO - самый медленный, поэтому 1. и 2.Вы говорите ничего, кроме 2. изменилось, верно?Это странно.
В любом случае, если вы хотите оптимизировать это, я бы не передавал массив около 8 миллионов раз, и я бы тоже не повторял его каждый раз.Так как ваши действительные ветви известны, создайте HashSet
из него - он имеет доступ O (1).
Set<String> validBranches = Arrays.stream(branches)
.collect(Collectors.toCollection(HashSet::new));
Затем выполните итерации строк
for (String line : lines) {
YourObject obj = parse(line);
if (validBranches.contains(obj.branchNo)) {
writeToDb(obj);
}
}
или, впотоковая версия
Files.lines(yourPath)
.map(this::parse)
.filter(o -> validBranches.contains(o.branchNo))
.forEach(this::writeToDb);
Я бы также проверил, не эффективнее ли сначала собрать пакет объектов, а затем записать в базу данных.Кроме того, возможно, что параллельная обработка строк увеличивает скорость, если синтаксический анализ требует много времени.