Comments 9
В реальной же работе, где основные задержки были связаны с записью в базы данных
Что-то сдается, что дело не в бобине библиотеках или сисколлах, а в том, что парсер написан через жопу. Судя по тому, что файл
разбирается иногда пару дней
каждое поле парсится отдельным запросом.
Всё оказалось прозаичнее. Многомиллионные записи в MyISAM с индексами где не надо и без индексов по сортируемым полям.
А исходники по итогу удалось получить - просто за эти годы никто не удосужился спросить у самого разработчика.
Там был изумительный разбор данных с заменой пробелов на '\0' и выдёргиванием char* по началу строк.
awk '{if(NR<=1) print "insert into \`table\` (\`field_1\`,\`field_2\`,\`field_3\`.....\`field_n\`) values "; else print ","}{printf "%s","%s","%s"....."%s", $1, $2, $3.....$n} END {print ";"}' file.txt | mysql
не благодарите ))
Строки переменной длины и разного количества полей, разнос данных в 3 базы в разных локациях и 20+ таблиц в каждой, запись в которые варьируется от значения N-, M-, полей в строке, параллельно проверка на дублирование с предыдущими NN-строками и тому подобное. Так что однострочник не помог бы
progress тоже по итогу оказался не нужен. После тюнинга и ротации таблиц разбор стал занимать +-полчаса. Потом от скуки я его переписал многопоточно через mmap и уволился ))
Волей-неволей, я оказался в другой стране .. необходимостью (после
6-летнего перерыва) в очередной раз вкатываться в IT.
"Хочешь жить - умей вертеться" (C) :)
Крутяк, старая школа. Я бы услышав такие страшные слова как strace и gdb сразу попытался бы завернуть всё в скрипт, который дробил бы искомый файл на несколько мелких и запускал их обработку в парралели.
Возвращаясь в IT (админская байка)