Comments 15
В этом точно есть рациональное зерно. Только много ли есть задач, где нужна вся страна разом?
Данные из DBF можно было вставлять в базу как есть, с XML так не получается
У DBF тривиальный формат, создавали бы сразу его, сами.
Развернуть архив, файлы импорта займут 300 GB
А не надо этого делать. Надо сразу по мере распаковки и парсить файл, вообще не записывая распакованное на диск. Это изрядно сократит число дисковых операций.
чтение с диска PHP - 2 Mb/s, PostreSql - 1.5 Mb/s
(Голосом Швондера) это какой-то... позор!
ЗЫ: задачка из разряда сортировки за час. Видится мне здесь генерация всех дбф должна занять также не более часа.
Если реализация займёт всего час, то я с удовольствием посмотрю на реализацию, особенно если она будет для PHP8.
У меня на этот код ушло две недели, и на статью ещё 6 часов, у вас получиться потратить один час своего времени для меня ?
Я буду вам очень признателен.
Если реализация займёт всего час
Где я это сказал ? Я говорил о "сортировке за час", намекая на вот эту недавнюю статью: https://habr.com/ru/post/714524/
Реализация займёт полдня-день, по моим прикидкам.
у вас получиться потратить один час своего времени для меня ?
Не час. Взять и просто так потратить свой день ? Нет, не получится.
то я с удовольствием посмотрю на реализацию, особенно если она будет для PHP8.
В любом случае у меня это был бы не PHP. ))
Скачать с сервера ФНС полную версию БД (https://fias.nalog.ru/Updates) 36 GB
И тут же рядом лежит БД в формате КЛАДР 4.0. В dbf...
Нам тоже нужна вся страна. Грузили через xml2csv: конвертируем xml в csv (там вполне плоская иерархия) и грузим в postges через COPY. Грузится минут за 30
1 сентября 2021 года ФНС перестала обновлять свой адресный справочник в формате ФИАС
Друзья, внимательнее надо быть (по вашей же ссылке):
В целях повсеместного использования (ч. 2 ст. 8 Федерального закона № 443 от 28.12.2013) в информационных системах пользователей ФИАС сведений об адресах (унифицированных и структурированных), содержащихся в Государственном адресном реестре, еженедельно на портале ФИАС размещаются файлы выгрузки адресных сведений в формате «ГАР».
Так вот то что в статье это и есть формат "ГАР"
Во первых необязательно вообще архив распаковывать и занимать почти 300 гб, есть же XMLReader который умеет читать файлы прям с архива. Например так:
$reader = new XMLReader();
$reader->open('zip://gar_xml.zip#77/AS_ADDR_OBJ_20230202_e407fd98-b92a-45dd-9e34-ef15f6d3bae5.XML', 'UTF-8', LIBXML_COMPACT | LIBXML_NONET | LIBXML_NOBLANKS);
Во вторых есть готовое решение которе справляется с задачей ни чуть не хуже:
https://github.com/liquetsoft/fias-component базовый компонент, на его основе есть библиотеки для работы с базой ФИАС в формате ГАР для рахных фреймворков итд. Например для Laravel, Symfony или для импорта сразу в Elasticsearch.
Так же не увидел в Вашем решении работы с обновлениями, а они выходят регулярно. Каждый понедельник если мне не изменяет память.
P.S.
Велосипедостроение это конечно всегда вызов для разработчика, но лучше применить уже готовое решение.
развернуть базу ФИАС за 9 часов на 6-ти ядерном процессоре.
Вам определенно надо менять технологию - для примера, я на Rust XML файл весом 25 гигабайт разбираю за меньше чем за минуту, правда это все лежит на NVMe диске.
Я не знаю зачем в ФНС сделали это убожество с XML, да еще и нормализовали все как по учебнику. Чем они думали -не знаю. Но вот то, что они для всех создали мега головню боль - это точно. В общем, жуткая непродуманность.
P.S. Понятно, что с Rust можно быстрее, но вот "за минуту" ФИАС - не понятно как. Хотелось бы подробнее - как это? От структуры XML много зависит. Если там мало записей и много полей, и много атрибутов, которые игнорируются - мб.... Но вот что б ФИАС - сомнения меня берут.
Импорт полной базы ФИАС за 9 часов, How To