Финансы без пpоблем: Пеpеговоpный Пункт II (http://hdru.com/cgi-bin/pp2/YaBB.cgi)
>> Пpедложения по усовеpшенствованию, сообщения об ошибках >> loadbin 4.21 для 2-х пользователей
(Message started by: Denis, Dnepropetrovsk на 20.03.13 в 16:59:39)

Заголовок: loadbin 4.21 для 2-х пользователей
Прислано пользователем Denis, Dnepropetrovsk на 20.03.13 в 16:59:39
Вот хотел упорядочить extrd.dat силами сервера.
Обнаружилась неприятная вещь:
Тестовая форма:

f1=[dir 0]+'extrd.old'
f2=[dir 0]+'extrd.new'
\>file f2
loadbin f1
LX=[ged 'lb.N']
^^^^^^^^LX
for i=1 to LX
   ST=[ged 'lb.'+[intsn i]
   printstr ST to file f2
endfor
перезапись выполнена!!!
stop

Результат выполнения разный  ???
Размер extrd.old  103775232 байта

Размер extrd.new после каждого выполнения разный:
1  103773080  
2  103773504
3  103772928

Это ошибка сервера или данные глотаются на этапе записи в файл??

После каждого выполнения сервер перезагружался!!!

Вечером попробую дома (этот пример выполнялся на удаленном сервере, где windows запущен виртуально под WMWARE).

Заголовок: Re: loadbin 4.21 для 2-х пользователей
Прислано пользователем Boris, Kiev. на 20.03.13 в 22:51:12
20.03.2013  22:43       156 187 136 extrd.dat
20.03.2013  21:33         2 695 872 extrd.new
20.03.2013  20:51         2 695 872 extrd.NEW1
20.03.2013  21:55       115 332 352 extrd.new110
20.03.2013  22:28       115 332 352 extrd.new110-2
20.03.2013  22:43       115 332 352 extrd.new110-posle_restarta
20.03.2013  19:17         2 695 936 extrd.OLD
11.03.2013  15:38         2 695 680 extrd.ORIDAT
13.02.2013  15:15       115 332 352 extrd.test110

Напугали, скорее всего ваша виртуальность сыграла.

Заголовок: Re: loadbin 4.21 для 2-х пользователей
Прислано пользователем Denis, Dnepropetrovsk на 22.03.13 в 11:25:33
Вопрос снимается это были проблемы с Виндой под wmware  :-[

Кому интересно вот форма, преобразующая extrd.dat, в удобоваримый формат для просмотра и редактирования в far:
(перед запуском формы скопируйте extrd.dat в extrd.old в рабочем каталоге базы)

*Упорядочивание extrd.dat
*.on
*,off
f1=[dir 0]+'extrd.old'
f2=[dir 0]+'extrd.new'
\>file f2
loadbin f1
LX=[ged 'lb.N']+0.1
sl=0;SS=0
for i=1 to LX
   ST=[ged 'lb.'+[intsn i]
   for k=1 to [length ST]+0.1
       sl=sl+1
       if     sl=256
              if SS=0
                 SS=[ch 10]
              else
                 SS=SS+[ch 10]
              endif
              sl=0
       else
              if SS=0
                 SS=[cp ST,k,1]
              else
                 SS=SS+[cp ST,k,1]
              endif
       endif
       if [length SS]=250
          printstr SS to file f2
          SS=0
       endif
   endfor
endfor
if SS<>0
  printstr SS to file f2
endif
перезапись выполнена!!!
stop

Полученный extrd.new в fare можно редактировать, удаляя мусор построчно (1 строка =1 запись)

PS.
Прошу прощение за ложное сообщение об ошибке.
(сохраняйте оригинальный extrd.dat перед манипуляциями с ним ;) )

Заголовок: Re: loadbin 4.21 для 2-х пользователей
Прислано пользователем Vladimir на 14.05.13 в 05:10:15
Денис, спасибо за форму.
Я понимаю, что после редактирования файл EXTRD.NEW вручную переименовывается в EXTRD.DAT, который правильно воспринимается программой?

А вы не пробовали XDEDIT.EXE?

После того, как я воспользоваля вашим алгоритмом, я обнаружил колоссальное количество записей такого вида:

93_153_215_26_052658.a1.120 S=GD
93_153_215_26_052658.a1.121 S=GD
93_153_215_26_052658.a1.122 S=GD
93_153_215_26_052658.a1.123 S=GD
93_153_215_26_052658.a1.124 S=GD
93_153_215_26_052658.a1.125 S=GD

похоже что это результат работы NULLCG.CGI.
Их очень много и удалять руками затруднительно.
Кто-нибудь может посоветовать, как организовать подчистку (обнуление) таких записей?

Заголовок: Re: loadbin 4.21 для 2-х пользователей
Прислано пользователем Boris, Kiev. на 14.05.13 в 12:13:12
Как это было давно, рекомендую к прочтению архивы ПП, сколько вопросов порешали..., с версии 3.14 есть такое:


IV) Пpи стаpте Сеpвеp пpоходит тепеpь так называемую R-фазу. Пpи этом файл extrd.dat пеpеписывается на новое место, и из него удаляются записи с нулевыми значениями.


Зачитайте loadtxt полученный файл (конечно если сразу не хотите или не можете), обнулите всё что считаете нужным удалить, не забудьте обнулить свой вызов loadtxt от 1 до [ged 'lt.N'] и конечно перезапустить сервер.

Заголовок: Re: loadbin 4.21 для 2-х пользователей
Прислано пользователем Denis, Dnepropetrovsk на 14.05.13 в 13:59:08
Правильно extrd.new можно переименовать extrd.dat и подкинуть в рабочую базу;D

Не люблю пользоваться сторонними *.exe, если можно не особо  напрягаясь написать самостоятельно и подправить под собственные нужды.

Loadtxt использовать необязательно.

Сам использовал полученный файл для определения ненужных индексов (у меня много индексов используется как служебные для переноса данных между формами и мне проще отследить их в полученном файле, чем копаться в формах и искать что я там использовал, к тому же за несколько лет там накопились остатки экспериментов ;), которых по другому не найти)

Потом писал простейшую форму типа [sed ID,0] и рестарт сервера для удаления нулевых записей.

В Вашем случае форма имеет вид:

for i=0 to 999
    for j=0 to 9
         ID='93_153_215_26_052658.a'+[intsn j]+'.'
         if        i<10
                  ID=ID+'00'+[intsn i]
         elseif i<100
                  ID=ID+'0'+[intsn i]
         else
                  ID=ID+[intsn i]
         endif
         if [ged ID]<>0 [sed ID,0];endif
    endfor
endfor
stop

Можно вложить еще несколько переборов чтобы проверить все варианты индексов  ;D
Если индексы единичные, то удалял руками :
Ctrl+Y замечательно удаляет строчку в Far

Таким образом за несколько часов я уменьшил свой extrd.dat c 3.5 gb до 1.5 gb (2 gb мусора было удалено для запуска новогоднего адаптера  ;D)

Удачи в очистке :)

Заголовок: Re: loadbin 4.21 для 2-х пользователей
Прислано пользователем Vladimir на 14.05.13 в 17:06:30

on 05/14/13 в 13:59:08, Denis, Dnepropetrovsk wrote:
Можно вложить еще несколько переборов чтобы проверить все варианты индексов  ;D


Спсибо, Денис, за ответ. Всегда приятно, когда тебе помогают и делом и советом.
В общем-то так и мыслилось. Ситуация, правдя, усугубляется тем, что IP много и разные. Хорошо, что мир еще не перешел на IPv6, а то перебирать пришлось бы многовато
;D ;D ;D

Заголовок: Re: loadbin 4.21 для 2-х пользователей
Прислано пользователем Boris, Kiev. на 14.05.13 в 19:22:55

on 05/14/13 в 13:59:08, Denis, Dnepropetrovsk wrote:

for i=0 to 999
    for j=0 to 9
         ID='93_153_215_26_052658.a'+[intsn j]+'.'
         if        i<10
                  ID=ID+'00'+[intsn i]
         elseif i<100
                  ID=ID+'0'+[intsn i]
         else
                  ID=ID+[intsn i]
         endif

         if [ged ID]<>0 [sed ID,0];endif
    endfor
endfor

stop


Выделенные строки - очень слабенькие.
Удивлен, что с гигами играетесь при этом.
Подправьте плз., здесь ведь бывает взыскательная публика, а не только жаждущие любой конкретики.

p.s.1. если не затруднит, параметры серверной машины и время R-фазы, очень интересно.


Заголовок: Re: loadbin 4.21 для 2-х пользователей
Прислано пользователем Vladimir на 15.05.13 в 05:10:31

on 05/14/13 в 19:22:55, Boris, Kiev. wrote:
Выделенные строки - очень слабенькие.


Любая конкретная помощь, даже написанная на скорую руку, лучше отсылки к руководству.
"Слабенькие" они или нет, не столь важно. Важно то, что они решают конкретную задачу. Человеку, занятому конкретным делом, надо выдавать результат.

"Взыскательной" же "публики", Борис, тут становится все меньше. Я, вообще, "публики" не вижу. Полагаю, что одной из причин снижения активности являются зачастую резкие и не дружелюбные комментари с вашей стороны.

Заголовок: Re: loadbin 4.21 для 2-х пользователей
Прислано пользователем Boris, Kiev. на 15.05.13 в 07:19:42
Лирическое отступление:

ПП не для скорой помощи «человекам, занятым конкретным делом», для скорой помощи есть e-mail.
«Конкретные люди» как правило платят нашим настройщикам деньги, а не расписывают свои проблемы в ожидании их решения на нашем ПП.

Увы, на ПП предполагается общение коллег .
Моя лично задача на ПП, не опустить уровень текстов ниже своего, заставить настройщика-коллегу подумать ещё раз перед тем как выбросить что-либо на публику.
Кто-нибудь напишет лучше, нет проблем, с местом, званием, любыми текстами, ведь уясните, мы, которых на ПП с конца 90-ых здесь уже нет, просто физически отходим, а болото оставлять не хочется. Не держите зла, расслабьтесь, никто оценок Вам не ставит, больше думайте о сути ФБП-вопросов.

Если Денис заснул, то ничего страшного, проснется, может и удивит чем, а может и просто скажет, «поторопился, сорри» или что-то в этом роде.

P.S. Vladimir(у), если отвечать, то плз. по существу вопроса. Хватит лирики. Спасибо.

Заголовок: Re: loadbin 4.21 для 2-х пользователей
Прислано пользователем Denis, Dnepropetrovsk на 16.05.13 в 10:44:40
Извините за задержку..
Я сюда не каждый день захожу просто...

Пример формы писал 3 мин. в момент ответа и не проверял ее даже. Тут просто показан принцип очистки, который сам использовал.

Параметры машины для Бориса:

core i5-2500K
16 GB RAM
OS Windows 2008 Enterprise SP2
Винт 500 гб WD5000AAKX

Текущий размер Extrd.dat 2.1 Gb
Крутится одновременно 4 сервера (3 вспомогательных значительно скромнее основного)
Запуск серверов в автозагрузке. Время R-фазы специально не замерял, но мин. через 15-25 после рестарта все сервера работают.
Сам компьютер перезагружается раз в месяц (1-го числа каждого месяца для возможности регистрации операции в новый месяц, ну или при сбое питания.)

Заголовок: Re: loadbin 4.21 для 2-х пользователей
Прислано пользователем Boris, Kiev. на 16.05.13 в 12:47:03
Спасибо, приятно, что такие громоздкие базы крутятся и даже без примочек по дискам. Будет время, просто засеките R-фазу. Интересно.

По поводу писем на ходу и наглядности, понятно, но Вы дали пищу для разбора алгоритма, т.к. уж очень наглядно можно и нужно показать как можно и как надо писать строчки кода, чтобы почти в два раза быстрее чистить Extrd.dat(и не только;)):

Вpеменной пpофиль фоpмы %_0

Количество выполнений: для фоpм не запоминается.
На это количество выполнений потpебовалось 84 мс = 100%
Распpеделение вpемени по стpокам исходного текста в относительных %, и мс:

                        ~        ~I 0001 * Денис, Днепр.
                        ~        ~I 0002 пример того, как не надо писать циклы и вставлять условия внутрь циклов, если есть возможность этого не делать.
                        ~        ~I 0003 for i=0 to 999
                        ~        4I 0004      for j=0 to 9
              ##### 26.2%       22I 0005           ID='92_153_215_26_052658.a'+[intsn j]+'.'
                        ~        3I 0006           if        i<10
                        ~        ~I 0007                    ID=ID+'00'+[intsn i]
                        ~        3I 0008           elseif i<100
                        ~        ~I 0009                    ID=ID+'0'+[intsn i]
                        ~        ~I 0010           else
              ##### 27.4%       23I 0011                    ID=ID+[intsn i]
                        ~        1I 0012           endif
             ###### 29.8%       25I 0013           if [ged ID]<>0 [sed ID,0];endif
                        ~        1I 0014      endfor
                        ~        2I 0015 endfor

Вpеменной пpофиль фоpмы %_1

Количество выполнений: для фоpм не запоминается.
На это количество выполнений потpебовалось 51 мс = 100%
Распpеделение вpемени по стpокам исходного текста в относительных %, и мс:

                        ~        ~I 0001 * ПРИМЕР
                        ~        ~I 0002
                        ~        ~I 0003 пример того, как надо писать циклы и обходиться без использования условий.
                        ~        ~I 0004 L1='93_153_215_26_052658.a'
                        ~        ~I 0005 for j=1 to 10 [A j,L1+[intsn (j-1)]+'.'];endfor
                        ~        1I 0006 for i=0 to 999
                        ~        4I 0007 IL=[cp [intsn(1000+i)],2,3]
                        ~        4I 0008         for j=1 to 10
             ###### 33.3%       17I 0009                 ID=[A j]+IL
          ######### 49.0%       25I 010                 if [ged ID]<>0 [sed ID,0];endif
                        ~        ~I 0011         endfor
                        ~        ~I 0012 endfor

Заголовок: Re: loadbin 4.21 для 2-х пользователей
Прислано пользователем Denis, Dnepropetrovsk на 17.05.13 в 11:15:50
Борис специально для Вас измерил время R-фазы
После w on  w off
R-фаза  длилалсь примерно 2.5 мин.

По поводу оптимального написания форм
Лично мое мнение, нужно учитывать для чего пишется форма и как ее используют.
Из особо нагруженных форм нужно выжимать из алгоритма все, чтобы форма выполнялась быстрее.
А для такой одноразовой формы как в примере такой прирост скорости себя не окупает...
(к тому же у Вас алгоритм перебора слегка изменен поэтому вы тестируете не только использование условий ;) хотя вариант [cp [intsn 1000+j],2,3] конечно оптимальнее )
А вообще таким образом перебрать все IP в приемлемое время не получится ни моим ни Вашим алгоритмом..
Так что если уж чистилку универсальную делать, тогда вариант без Loadtxt не пройдет.
Придется Loadtxt-ом грузить extrd.new выделять индекс и проверять индекс по какому-то условию (например если в индексе встречается 4 раза '_'  и в остатке строки после 4-го подчеркивания встречается '.a' , то 99.9% что этот индекс можно обнулять)..



Powered by YaBB 1 Gold - SP 1.3.2!
Forum software copyright й 2000-2004 Yet another Bulletin Board