Pull to refresh

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) :)

UFO just landed and posted this here

Крутяк, старая школа. Я бы услышав такие страшные слова как strace и gdb сразу попытался бы завернуть всё в скрипт, который дробил бы искомый файл на несколько мелких и запускал их обработку в парралели.

Меня больше удивило мирное использование ldpreload. У меня он всегда ассоциировался только с руткитами.

Даже дробить ничего не надо. Если задача состоит в парсинге текстовых строк в скуль таблицу, это решается одной строчкой awk, которому пофиг на длину файла.

Sign up to leave a comment.

Articles