Обсуждение:Импорт базы ФМС. тоже не медленно.
0 (0)
Обсуждение:Импорт базы ФМС. тоже не медленно. ( Обсуждение примера 21.11.2014 10:25 )
0(0)Посмотрел как работает импорт файла list_of_expired_passports.csv и стало мне грустно. Долго и на планировщик не повесишь. Пользовать альтернативные варианты тоже не хотелось, для сохранения совместимости с RS. В результате родилась такая технология. Первый этап происходит на Unix машине, которая имеет выход в интернет. Код скрипта не привожу, думаю каждый напишет его под свою конфигурацию сам, опишу лишь основные моменты.
1) получаем файл при помощи
wget http://www.fms.gov.ru/upload/expired-passports/list_of_expired_passports.csv.bz2
2) распаковываем
bzip2 -d list_of_expired_passports.csv.bz2
3) сортируем и добавляем дату в имя при помощи
sort list_of_expired_passports.csv >list_of_expired_passports.$y$m$d.csv
4) сравниваем с предыдущим при помощи
comm -3 list_of_expired_passports.$y$m$d.csv list_of_expired_passports.$old_y$old_m$old_d.csv >fms_diff_$y$m$d.txt
Далее, уже машина с АБС забирает файл fms_diff_yyyymmdd.txt из буферной зоны и можно грузить в RS. Ниже код функции импорта.
Всё это можно организовать и на машине с RS-ом через GnuUtils, но sort отожрёт пару гигов оперативки минут на десять.
PS. Стоит подчеркнуть, что после "comm -3" получается файл, в котором нет строк, существующих и в предыдущем и в текущем файле. Новые данные начинаются с начала строки, а данные отсутствующие в новой версии файла (подлежащие удалению) начинаются с табулятора.
Первый раз грузится весь файл штатной процедурой RS. Затем грузятся только обновления, полученные приведённым алгоритмом. Обновления грузятся кодом примера. При остутствии данных в кэше загрузка занимает около минуты времени.
Посмотреть пример
>> ОтветитьА можно ли узнать поподробнее… ( Назарова Анна 21.11.2014 11:06 )
0(0)>>Посмотрел как работает импорт файла list_of_expired_passports.csv и стало мне грустно…
Подскажите, пожалуйста,
1) на какой версии RS-Bank’а Вы выполняли штатную загрузку этого csv-файла?
2) Сколько длилась эта загрузка?
3) Сколько записей было в csv-файле и какой размер файла?
4) В 3-х или 2-х звенке выполнялась загрузка?
5) Где находился загружаемый файл: на сервере или в сети?
6) Какие параметры «железа»: Процессор, Опер. память, ОС?
7) сколько времени занимает загрузка файла после применения технологии из Вашего примера?
С уважением, Назарова Анна
Руководитель проекта «RS-Bank v.5.5»
>> Ответитьможно... ( tema 21.11.2014 12:51 )
0(0)1) .51
2) на тестовом 2-3 часа, на рабочем меньше часа, но более получаса
3) как у всех
4) 3-х
5) на сервере, это ни на что особо не влияет 1 гиг по сети переливается несравнимо быстрее, чем идёт импорт
6) тестовый сервер не укладывается в текущие требования, рабочий укладывается
7) 1 секунду, если кэш не сброшен
>> ОтветитьЕще информация.. ( Назарова Анна 21.11.2014 14:42 )
0(0)Спасибо.
А еще вопросы:
сколько в Вашем примере занимают времени "подготовительные" этапы
…
3) сортируем и добавляем дату в имя при помощи
4) сравниваем с предыдущим при помощи
…
И по поводу «…и на планировщик не повесишь..» просто для информации:
В версии 5.50.003.53 (тираж 12-15 декабря) по запросу 171479 будет добавлена возможность загрузки стоп-листа паспортов в автономном режиме. Для этого необходимо указать modnum:145 exec:2151 src:Путь к файлу rewrite:1.
Параметр scr - принимает путь к файлу, rewrite - указывает на перезапись справочника, при отсутствии справочник обновляется.
С уважением, Назарова Анна.
>> Ответитьв идеале, подготовительные этапы не отнимают время и память сервера в разгар дня... ( tema 21.11.2014 15:29 )
0(0)3) sort работает ~10 минут и требует 2.7 Гб ОЗУ
4) comm отрабатывает быстро <1 мин
про автономный режим:
спасибо за информацию, это полезно
>> Ответить
Очень интересная технология. После сортировки - можно получить поисковый файл без СУБД. ( sergksa 25.11.2014 15:54 )
0(0)Добрый день. Мне ваша технология очень понравилась.
Обенно интересно было узнать про возможности Unix и GNU утилит.
Основная нагрузка падает на утилиту sort и как показало тестирование со своей функцией отлично справляется.
Сразу зачесались руки использовать файл, полученный после sort, как поисковый половинчатым методом.
набросал макрос и спешу тоже поделиться:
т.е. в сортированный файл (ваш шаг 3) не добавляем дату в имя.. кладем его в доступное место для RS и макрос поиска плохих паспортов мог бы быть таким:
var paspfilename="..\\txtfile\\list_of_expired_passports.txt "; Macro Pasp_in_file(p_ser: string, p_num: string): bool; //sk var p1=0, p2 = 0,half,i,findstr; var sss,pr,sn1,sn2,rzd=strfor(10),pasplen=12;//длина нормального паспорта вместе с разделителями var pasp = TStream (paspfilename); while (strLen(p_ser)<4) p_ser=string("0", p_ser); end; while (strLen(p_num)<6) p_num=string("0", p_num); end; findstr = rzd+p_Ser+","+p_Num; p2 = pasp.GetSize; while (p2-p1>pasplen) half = p1+int((p2-p1)/2); if (half<pasplen) half=0; end; pasp.SetPos(half); pasp.Read(sss, V_STRING, pasplen*10); // [############# ########### ############# #] (p1,p2,half,strsubst(sss,rzd," ")); if (half==0) sss=rzd+sss; else i=index(sss,rzd); if (i==0) return false; end; half=half+i-1; sss=substr(sss,i); end; if (index(sss,findstr)>0) return true; end; if (sss>findstr) p2=half ; end; if (sss<findstr) p1=half ; end; end; //while return false; end; //test [##########](Pasp_in_file("0000","000001")); [##########](Pasp_in_file("0000","000002")); [##########](Pasp_in_file("0000","000004")); [##########](Pasp_in_file("0000","000006")); [##########](Pasp_in_file("0000","000011")); [##########](Pasp_in_file("5302","985944"));
т.е. можно проверять паспорта, практически мгновенно не закачивая их даже в базу..
но это лишь как вариант... как всегда не лишенный недостатков ...
Вам огромное спасибо.
>> ОтветитьШтатную проверку отключаете? ( JVR 25.11.2014 17:22 )
0(0)Добрый день!
Правильно ли я понял - штатную проверку в справочнике клиентов вы отключаете?
Я залил в штатный справочник только 1.5млн паспортов, включил штатную проверку и опера не смогли открыть нового клиента - в момент сохранения паспортных данных система уходит в нирвану.
>> ОтветитьВы про какую штатную проверку, не совсем понятно. Куда, что и чем заливали? ( tema 25.11.2014 17:30 )
0(0)Not specified
>> ОтветитьВ стоп-лист ( JVR 25.11.2014 17:34 )
0(0)В Финмон \ Справочники \ Стоп-лист удостоверений личности
В этот справочник загрузил (для теста) часть записей из list_of_expired_passport.cvs
При сохранении паспортных данных в справочнике клиентов выполняется штатная проверка на попадание в этот справочник ...
>> ОтветитьВ pidstlst.dbt??? ( tema 25.11.2014 17:51 )
0(0)Не правильно. list_of_expired_passport.cvs надо грузить в стоп-лист паспортов.
Для этого выписали свою собственную процедуру?
Стоп-лист удостоверений личности грузится в pidstlst.dbt
Стоп-лист паспортов в invalp?.dbt
Я штатную проверку не отключал, работает она очень быстро. Медленно работает лишь загрузка. Мой алгоритм расчитан как раз на штатную проверку.
Отключа или нет коллега sergksa не знаю, не думаю, что это сильно влияет на ввод клиентов.
>> ОтветитьНе отключал, не влияет. полностью согласен с tema. ( sergksa 25.11.2014 18:05 )
0(0)Not specified
>> ОтветитьСпасибо за подсказку ... ( JVR 25.11.2014 18:28 )
0(0)а я загрузил именно в pidstlst.dbt ...
Стоп-лист паспортов (invalp.dbt) - доступен в меню? Не нашел для него системного модуля ... Вижу только "Стоп-лист удостоверений личности"
>> ОтветитьСборка какая? Меню обновляли? Поддержка есть? ( tema 25.11.2014 18:40 )
0(0)Грузится через системный сервис той же самой штатной процедурой, что и "старые doc-файлы" (никогда не пользовался). Процедура по имени файла сама принимает решение, куда заливань данные.
Загрузка миллионов записей в pidstlst.dbt это, наверное, нештатная ситуация, что вы и наблюдаете.
>> Ответитьхм ... ( JVR 26.11.2014 11:30 )
0(0)сборка 5.50.003.049
"старые doc-файлы" никогда не загружал. В системном сервисе у меня есть "Импорт стоп-листа УДОСТОВЕРЕНИЙ личности" - вы этот пункт имеете ввиду?
"Стоп-лист паспортов в invalp?.dbt" - это не доп.функционал, который нужно дополнительно приобретать? invalp?.dbt не могу в словарях найти ...
Поддержка есть, но без консультаций :(
"Просмотр — модуль 4150 в ФМ" - такого модуля у меня в списке системных модулей нет ... А вы на какой сборке работаете?
>> ОтветитьНасколько мне известно импорт в invalp?.dbt появился в 51-й сборке ( sergksa 26.11.2014 11:40 )
0(0)Not specified
>> Ответитьтак вот оно что :) ( JVR 26.11.2014 11:51 )
0(0)Спасибо большое, посмотрю новую сборку.
>> Ответить
Просмотр — модуль 4150 в ФМ ( tema 25.11.2014 18:49 )
0(0)Not specified
>> Ответить
Прикольно :) ( tema 25.11.2014 17:25 )
0(0)Not specified
>> Ответить