Помимо системного администрирования пытаюсь я заниматься сайтостроением. И понадобилось мне на одном из сайтов реализовать форму ввода адресов. Так?
Так да не так! Карты Яндекса (Геокодер) предлагают такую услугу платно и, что самое обидное, не слишком дёшево! Я ещё не начал зарабатывать, а уже плати. Так дело не пойдёт. КЛАДР во-первых устарел, во-вторых у него мутная схема лицензирования. Решено! Будем использовать ФИАС.
На пальцах. Есть Россия, в России есть субъекты - то есть области, края и республики. В субъектах есть главный мегаполис и районы. В мегаполисах есть микрорайоны. В районах есть райцентры и прочие населённые пункты. В населённых пунктах есть улицы. На улицах есть дома, в домах квартиры.
Вопреки фантазиям разводить гигантоманию незачем. На планете живёт всего 6 миллиардов человек, а в России - намного меньше. Поэтому каждый адрес проживания можно выразить всего-навсего 36-символьным идентификатором (в КЛАДР эта величина меньше, но сейчас не об этом).
Сайты работают на cgi-скриптах, для которых чаще всего используется язык php. Работают с базой данных, чаще всего MySQL, иногда MariaDB, реже PostgreSQL, очень редко Oracle или MS SQL. К сожалению, наши государственные органы распространяют базу ФИАС в устаревшем формате DBF или в новомодном текстовом формате XML.
Как Вы понимаете, нас это не устраивает. Мы хотим взять базу с официального сайта и конвертировать её для наших нужд сайтостроения в формат MySQL. После чего напишем интерфейс для выбора адресов.
Изучение вопроса привело нас на гитхаб, где, как оказалось уже есть готовые скрипты с простой и понятной инструкцией, что именно нам следует сделать. Увы, нам предлагают установить транслятор языка Python, его библиотеки и Git - и только после этого мы сможем воспользоваться указанными скриптами. По зрелом размышлении было принято решение - отказать! Чтобы потом не вычищать всё это из Windows, мы проведём конвертацию данных в виртуальной машине.
Для нужд конвертации я развёртываю ВМ на основе OpenBSD-6.6 amd64
Обратите внимание, скачанный fias_xml.rar имеет объём в 6 гигабайт (почти в полтора раза больше объёма DVD-диска), а в результате распаковки он займёт все 60 гигабайт. Поэтому место я в данном случае предпочту не экономить.
После создания диска меняем порядок загрузки, цепляем загрузочный носитель, переключаем сетевой интерфейс в режим моста и запускаем установку системы.
В самой установке и последующей настройке нет ничего сложного. Русифицируем систему, ставим git python unrar libxml libxslt и создаём в самом большом разделе папки, куда мы можем писать под пользователем.
Far Manager умеет FTP/SCP/SFTP - записываем с хоста в папку виртуалки скачанный архив ФИАС.
Пока архив заливается, переходим в папку пользователя и от рута (иначе не будет прав на запись) даём команду:
git clone https://github.com/shadz3rg/ru_address.git && cd ru_address && python setup.py install
Эта команда создаст в домашней папке пользователя папку ru_address со всеми необходимыми скриптами. Теперь переходим в папку /var/ru_fias куда мы скачали архив на 6 гигабайт (напомню, у нас раздел /var самый большой - чтобы не беспокоиться о нехватке места) и даём команду распаковки загруженного архива. Ждём, пока он распакуется.
После распаковки переходим в домашнюю папку пользователя и даём команду:
ru_address /var/ru_fias /var/ru_fias_output --join=fias.sql
Внимание! У меня эта команда не заработала - оказывается, все расширения XML-файлов были в прописном виде, а надо в строчном. Пришлось переименовать файлы. Ну и тот факт, что вместе с файлами .xml должны быть и файлы .xsd (описание структуры) я тоже пропустил. К счастью, по сравнению с основным тот архив занимает буквально копейки.
После этого всё заработало.
Выполнения этой команды придётся немного подождать. Совсем немного, часов 10-12. Всё зависит от быстродействия Вашего компьютера. Затем в папке /var/ru_fias_output Вы обнаружите файлик fias.sql - у меня он получился объёмом 43 гигабайта. Многовато. Надо упаковать в zip-архив.
zip fias.sql.zip fias.sql
Эта команда тоже будет выполняться около часа. Архив у меня получился почти на 8 гигабайт. Впрочем, это не обязательно, но если Вы хотите его унести куда-то ещё (например, на работу), а флешка на 8-16 гигабайт, имеет смысл всё-таки воспользоваться архиватором. Впрочем, я перенёс этот файлик на хост-систему без сжатия.
Остались сущие пустяки - развернуть полученный sql-файл в новую базу данных MySQL/ MariaDB.
Увы, но это займёт ОЧЕНЬ много времени - возможно, несколько дней. У меня на это ушло больше суток. Зато в итоге... База была импортирована, а свободный объём диска уменьшился примерно на 40 гигабайт.
Спасибо, что дочитали до конца. Надеюсь, это Вам было интересно. Если у Вас есть вопросы по информационным технологиям - задавайте, я постараюсь на них ответить. А если вопрос сложный, мы рассмотрим его в аналогичной статье.