Автор | Сообщение |
|
| |
Пост N: 2445
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.07.12 17:14. Заголовок: Copy File to и работа с базой
Есть сетевая база работающая под ADS. Работа с базой идет весьма интенсивная с разных рабочих станций. Примерно раз в час программа на Harbour копирует эту базу командой copy file to для последующей архивации. Пока база была не большая глюков не было. Сегодня в ряде баз кол-во записей перевалило за полтора лимона. Иногда происходят странные вещи и мне кажется что глюки появляются в тот момент когда идет копирование базы. Так например может заглючить DBseek() , другого объяснения не нашел. Есть промежуточный документ с кодами товара , на основании этого документа создается накладная. Кол-во товарных позиций в промежуточном документе и накладной должно совпадать. Как правило все нормально , но бывают случаи когда это не так. Алгоритм переноса достаточно простой и глюков там нет. Сумбурно как то я все обрисовал , но думаю мысль ясна ;)
|
|
|
Ответов - 27
, стр:
1
2
All
[только новые]
|
|
|
| |
Пост N: 286
Зарегистрирован: 11.10.11
|
|
Отправлено: 11.07.12 18:45. Заголовок: Я сомневаюсь, что db..
Я сомневаюсь, что dbseek может работать некорректно. Разве что программист может некорректно использовать эту функцию. например, работа зависит от второго параметра SoftSeek. Если параметр не задан, то действует текущая установка Set для SoftSeek. А так трудно в общих чертах судить, что вызывает некорректное копирование. Может быть в конце копирования просто проверять, что число записей совпадает с числом записей, вычисленных на основе исходных позиций документов? И на основании этого уже делать какие-то выводы.
|
|
|
|
| Администратор
|
Пост N: 2447
Зарегистрирован: 23.05.05
|
|
Отправлено: 11.07.12 20:27. Заголовок: Дима, непонятно, как..
Дима, непонятно, как команда copy file to может работать совместно с ads. copy file to aka __CopyFile это не функция rdd, она работает через файловые операции, а поскольку ads открывает файлы монопольно, работать не может. Может быть, ты делаешь как-то по-другому ? В любом случае, копировать открытую ads таблицу лучше средствами ads, функцией AdsCopyTable()
|
|
|
|
| |
Пост N: 2447
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.07.12 16:32. Заголовок: Pasha Ты наверное и..
Pasha Ты наверное имел в виду установку AdsLocking( .t. ) , но она ни коим образом не блочит работу __CopyFile. При такой установке базу нельзя открыть с RDD отличным от ADSCDX в Clipper а уже тем более в Foxpro или Excel
|
|
|
|
| |
Пост N: 2448
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.07.12 12:05. Заголовок: Pasha пишет: В любо..
Pasha пишет: цитата: | В любом случае, копировать открытую ads таблицу лучше средствами ads, функцией AdsCopyTable() |
| Поюзал эту функцию. Работает быстрее в 5 раз по сравнению с __CopyFile. Это хорошо , но есть минус при таком подходе. Архив базы в этом случае останется на сервере Netware а хотелось бы иметь на локальной станции. Можно конечно этот архив скопировать на локальную станцию , но все мы знаем что копирование жрет много ресурсов и порядком нагрузит винт сервера Netware что приведет к заметным тормозам при работе с базами в программе. Покопал Advantage CA-Clipper Guide Vers 5.0 и обнаружил команду COPY TO ARRAY ака функция aofCopyToArray, если предположить что она так же шустро работает как и AdsCopyTable() то наверное это было нормальным решением. Базу в массив (разумеется под Harbour ) а массив уже не дергая сервер Newtare конвертнуть в локальную базу. НО в RDDADS (Harbour) такой функции я не увидел. Копнул HELP к ADS и там нет. Куда же она делась то ?
|
|
|
|
| Администратор
|
Пост N: 2448
Зарегистрирован: 23.05.05
|
|
Отправлено: 13.07.12 13:15. Заголовок: AdsCopyTable работае..
AdsCopyTable работает быстрее __CopyFile понятно почему. Первая копирует файл на сервере, а вторая - через сеть, поэтому получается медленнее. Я давно не имел дела с Nwtware. Есть ли под нетварь какой-нибуть архиватор в виде nlm ? Если есть, то лучше всего было бы настроить архивацию копии Базы, полученной вызовами AdsCopyTable по времени прямо на сервере, и затем готовый архив забирать с клиента. DBF архивируется очень хорошо, процентов на 90, так что такое копирование займет немного ресурсов. А с массивами лучше не связываться. Думаю, что харбор захлебнется на массивах размерностью в миллионы элементов. Я и с Ads давно дело не имел. Мне почему-то по памяти казалось, что он хватает базу монопольно. В всяком случае, ads под windows вроде бы так работал. Но и остается непонятной первоначальная проблема, как простое копирование через файловые операции может привеодить к глюкам. Скажем, при доступе чепез seek может быть блокировка индекса. Но при копировании индекс никак не затрагивается, да и блокировок никаких не выполняется, так что помешать работе ads ничто не может.
|
|
|
|
| |
Пост N: 2449
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.07.12 13:22. Заголовок: Pasha пишет: AdsCop..
Pasha пишет: цитата: | AdsCopyTable работает быстрее __CopyFile понятно почему. Первая копирует файл на сервере, а вторая - через сеть, поэтому получается медленнее. |
| я не совсем верно выразился , в качестве эксперимента __CopyFile делал тоже на сервере , но AdsCopyTable все равно оказался в разы быстрее. Пробовал так же средствами ADSCDX копировать базы , но все равно победил AdsCopyTable PS Еще игрался с RAM дисками и __CopyFile , по времени примерно тоже что AdsCopyTable получилось
|
|
|
|
| Администратор
|
Пост N: 2449
Зарегистрирован: 23.05.05
|
|
Отправлено: 13.07.12 18:36. Заголовок: Dima пишет: я не со..
Dima пишет: цитата: | я не совсем верно выразился , в качестве эксперимента __CopyFile делал тоже на сервере , но AdsCopyTable все равно оказался в разы быстрее. |
| Так харбора для netware же не существует. Наверное, ты запускал программу с win-клиента ? Тогда __CopyFile два раза испозьзует передачу данных по сети: для чтения и записи файла, а AdsCopyTable работает локально на netware. Ну да ладно, я не об этом. Раз уж ads под netware позволяет другим программам открывать открытые им файлы, то такой программой может быть и архиватор. Например, вот этот: http://www.nwsoft.ru/ru/programs/nwzip/ А затем созданный им архив можно забирать с клиента. Правда, при этом остается вопрос, не помешает ли чтение архиватором файла работе самого ads. Но этот вопрос будет стоять в любом случае, чем бы не копировать базу.
|
|
|
|
| |
Пост N: 2450
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.07.12 18:47. Заголовок: Pasha пишет: Наверн..
Pasha пишет: цитата: | Наверное, ты запускал программу с win-клиента |
| Конечно ;) Nwzip я конечно и сам нашел , только не понятно как его запускать в нужные моменты. Ведь это можно сделать руками с консоли сервера только. По ходу я говорил что игрался с RAM дисками для копирования. Скорость сопоставима с AdsCopyTable , и скорее всего именно на этом варианте и остановимся. Создаем RAM диск гига на два и туда тулим архив базы с помощью __CopyFile , там же и архивируем. Архив ложим локально куда нужно. Как вариант можно копироваться на SSD носитель. Прог для создания RAM дисков из оперативки , полно , в том числе и бесплатных. Юзал пока 2 из них. Скорость копирования оказалась одинаковой. Остановился пока на http://ramdisk.nm.ru/ramdiskent-rus.htm
|
|
|
|
| Администратор
|
Пост N: 2450
Зарегистрирован: 23.05.05
|
|
Отправлено: 13.07.12 18:58. Заголовок: Dima пишет: Nwzip я..
|
|
|
|
| |
Пост N: 2451
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.07.12 21:23. Заголовок: Pasha пишет: Есть д..
Pasha пишет: Спасибо
|
|
|
|
| |
Пост N: 2460
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.07.12 12:09. Заголовок: Pasha Как ты думаеш..
Pasha Как ты думаешь что лучше использовать для архивации прямо на серере NWZIP (под Netware) или HB_ZIPFILE (Harbour) ? Удобнее конечно HB_ZIPFILE , но не будет ли он сильно грузить HDD сервера по сравнению с NWZIP ?!
|
|
|
|
|
| Администратор
|
Пост N: 2453
Зарегистрирован: 23.05.05
|
|
Отправлено: 17.07.12 13:31. Заголовок: Если nwzip нормально..
Если nwzip нормально работает и его удастся настроить, то лучше использовать его. Думается, что hdd сервера оба варианта загрузят одинаково: архивация (так должно быть) - это чтение исходного файла в один проход, собственно архивация и запись результата Но hb_zip помимо всего этого нагружает сеть, так как исходный(е) файл(ы) считываются по сети. Локальный вариант (nwzip) всегда предпочтительнее.
|
|
|
|
| |
Пост N: 2461
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.07.12 15:39. Заголовок: Pasha Спасибо , буд..
Pasha Спасибо , буду думать дальше.
|
|
|
|
| |
Пост N: 2483
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.08.12 21:31. Заголовок: Подумал и потестил. ..
Подумал и потестил. AdsCopyTable и NWZIP вариант конечно идеальный да и сеть не грузит. Но проблема с CRON , он слишком прост и тупо запускает задачи по времени. А на чем пишут NLM для Netware ? Нужна простейшая программа , которая проверяет наличие в нужной папке нужного файла , если есть файлик то запускается NWZIP а дальше дело техники и ни чего сложного не вижу.
|
|
|
|
| Администратор
|
Пост N: 2466
Зарегистрирован: 23.05.05
|
|
Отправлено: 13.08.12 09:16. Заголовок: Dima пишет: А на че..
Dima пишет: цитата: | А на чем пишут NLM для Netware ? Нужна простейшая программа , которая проверяет наличие в нужной папке нужного файла , если есть файлик то запускается NWZIP а дальше дело техники и ни чего сложного не вижу. |
| Я под netware никогда не программировал, но по идее можно использовать такую простую программу на C: #include <dir.h> #include <stdlib.h> main() { struct ffblk ffblk; if( findfirst( "myarc.zip", &ffblk, 0 ) == 0 ) /* файл существует */ system( "nwzip.nlm param" ); } Собрать ее можно попробовать с помощью OpenWatcom C compiler, который поддерживает netware: http://www.openwatcom.org/index.php/Main_Page Более того, там есть кроссплатформенная сборка, т.е. под windows можно собирать программы для netware А вот как собирать - надо разбираться
|
|
|
|
| Администратор
|
Пост N: 2467
Зарегистрирован: 23.05.05
|
|
Отправлено: 13.08.12 09:20. Заголовок: Можно поспрашивать н..
Можно поспрашивать на форумах netware, как это сделать попроще Может быть, можно обойтись каким-то батником
|
|
|
|
| |
Пост N: 2484
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.08.12 15:34. Заголовок: Pasha Спасибо , буд..
Pasha Спасибо , буду копать.
|
|
|
|
| |
Пост N: 2485
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.08.12 16:41. Заголовок: Нашел тулзу счас чек..
|
|
|
|
| |
Пост N: 2487
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.08.12 21:15. Заголовок: Вот уж не думал что ..
Вот уж не думал что можно выполнить NLM на консоли сервера с рабочей станции минуя REMOTE CONSOLE. Однако nlmload.exe это позволяет. Завтра буду плотно переписывать процесс копирования баз и архивирование. План действий примерно таков: AdsCopyTable Затем с помощью nlmload.exe запускаю NWZIP с параметрами , после окончания его работы (это еще предстоит выяснить когда он окончит работу но думаю решаемо) копирую архив на локальный диск и чищу папку на серваке с копией и архивом. Pasha Спасибо за идеи и подсказки и просто за внимание !!!
|
|
|
|
| |
Пост N: 2488
Зарегистрирован: 17.05.05
|
|
Отправлено: 14.08.12 11:34. Заголовок: Все сделал как надо...
Все сделал как надо. Всем спасибо !
|
|
|
|
| |
Пост N: 2489
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.08.12 18:30. Заголовок: Dima пишет: Все сде..
Dima пишет: А по факту что то не то вышло ;) У меня база 835 метров и AdsCopyTable скопировал ее за 1 минуту 20 секунд У клиента база 1 гиг и AdsCopyTable скопировал ее за 9 минут Железо на серверах примерно одинаковое. Не пойму почему такая большая разница. Может файервол что то блочит..... Пока не пойму куда копать. Пробовал играться с AdsCacheRecords , разницы в скорости не увидел.
|
|
|
|
|
| Администратор
|
Пост N: 2470
Зарегистрирован: 23.05.05
|
|
Отправлено: 16.08.12 11:13. Заголовок: Операцию AdsCopyTabl..
Операцию AdsCopyTable выполняет сам Ads. Возможно, у тебя он не выполнял больше никаких действий, только одну операцию, а у клиента отвлекался на другие запросы. Конечно, там поддерживается многопоточность, но тут надо смотреть, сколько ядер на процессоре, сколько создано потоков. Файервол тут точно ни при чем, так как ace с клиента дал команду серверу AdsCopyTable, и сервер ее выполняет уже без обращения к сети. В любом случае, вряд ли копирование можно сделать быстрее другим способом.
|
|
|
|
| |
Пост N: 2490
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.08.12 11:26. Заголовок: Pasha пишет: Возмож..
Pasha пишет: цитата: | Возможно, у тебя он не выполнял больше никаких действий, только одну операцию, а у клиента отвлекался на другие запросы |
| Я тоже так подумал. Рабочих станций юзающих базу порядка 30. Что касается потоков то настраивал их согласно доке к ADS , cобственно стоит сейчас 16
|
|
|
|
| |
Пост N: 2493
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.08.12 16:03. Заголовок: Pasha А ты когда юз..
Pasha А ты когда юзал ADS , это были все версии под Netware или под Windows тоже ?
|
|
|
|
| Администратор
|
Пост N: 2473
Зарегистрирован: 23.05.05
|
|
Отправлено: 17.08.12 18:05. Заголовок: Под netware до 2000 ..
Под netware до 2000 года, потом под windows Сейчас полностью отказался от ads
|
|
|
|
| |
Пост N: 2494
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.08.12 18:13. Заголовок: Pasha А под виндой ..
Pasha А под виндой когда юзал то по какому протоколу ?
|
|
|
|
| Администратор
|
Пост N: 2474
Зарегистрирован: 23.05.05
|
|
Отправлено: 17.08.12 18:23. Заголовок: С клиппером по ipx, ..
С клиппером по ipx, а с харбором естественно по ip
|
|
|
Ответов - 27
, стр:
1
2
All
[только новые]
|
|