Форум » [x]Harbour » Копирование большого файла по сети » Ответить

Копирование большого файла по сети

Dima: У себя в проге (вспомогательной) создаю архив базы каждый час и затем этот архив копирую по сети с сервера на архивный комп. При этом сеть (канал сервер - комп цель) грузится на 100 %. Архив с каждым днем растет. Сейчас он занимает 165 метров и весь процесс копирования занимает 15 секунд. В тот момент когда архив копируется в основной программе народ получает 15 секундный тормоз и очень ощутимый. Это и понятно почему так как канал забит. Как избежать тормоза при копировании по сети ?

Ответов - 22, стр: 1 2 All

Haz: Dima пишет: каждый час и затем этот архив копирую по сети с сервера на архивный комп Дима, а зачем каждый час на архивный комп то ? Держи рабочую почасовку на сервере , а на архивный во внерабочее время по шедулеру с удалением с сервера. Сам так поступаю, средствами ADS полный почасовой бекап базы , а в 2 ночи все уезжает в хранилище и там циклически храниться не старше 2 месяцев

Dima: Haz пишет: Дима, а зачем каждый час на архивный комп то ? Так заказали Игорь , мол на тот случай если упадет основной сервер. Haz пишет: Держи рабочую почасовку на сервере , а на архивный во внерабочее время по шедулеру с удалением с сервера. Такая мысль была , но работают там 24 часа в сутки. Вне рабочее время только с субботы с 17-00 до воскресения 14-00

Andrey: Dima пишет: Как избежать тормоза при копировании по сети ? Делай копирование порциями (блоками 32Кб или 64Кб - вычисли самостоятельно). И делай длительную паузу между копировании порций. А в паузе НЕ ДЕЛАЙ типа INKEY(30) - а то проц грузится...


Dima: Andrey пишет: Делай копирование порциями Да я помню что был где то примерчик у нас на форуме но пока не могу найти.

Haz: Чем копируешь ? Когдато для этой цели использовал RoboCopy - оч грамотно и быстро работает в сети. ли установи Acronis BackUp и забудь про бекапы )) У меня на рабочем компе стоит с инкрементальными бэкапами всех исходников каждый час и с поддержкой до 5 версий

Dima: Haz пишет: Чем копируешь ? Вот этим hb_DynCall( { "CopyFileA", "kernel32.dll", HB_DYN_CALLCONV_STDCALL }, cSource, cDest, 0 ) То есть какие то чужие вспомогательные проги не используются , все свое самописное.

Haz: Dima пишет: все свое самописное. тогда бить архив на тома размером 1.5 МБ и копировать их с таймаутом в 5 мин. должно в итоге за час получиться 10 тормозов длительностью 1.5 секунды ) потерпеть можно Бить можно на сервере и не склеивать на архивном а делать это при необходимости восстановления

Dima: Haz HB_ZIPFILEByTDSpan разве умеет бить на тома ? Смотрю примерчик C:\MiniGUI\SAMPLES\BASIC\Filecopy\ , вариант однако и там же можно вставить задержку. Вот только работает ли Fcreate , Fopen c UNC путями не знаю и надо проверять. Проверил. Пашет fcreate("\\127.0.0.1\Sklad$\test555.txt")

Haz: порезать можно уже готовый ZIP "своим" сплитером из программы

Dima: Haz Тоже вариант

Haz: Dima пишет: Смотрю примерчик C:\MiniGUI\SAMPLES\BASIC\Filecopy\ как вариант пойдет, особенно если докачку там прикрутить в случае падения сети

Dima: Haz пишет: особенно если докачку там прикрутить в случае падения сети Не совсем понял мысль как ее там прикрутить. Думаю и без нее покатит.

petr707: К серверу подключается внешний USB-диск 2 Тбайт и на него все копировать, минуя сеть.

Dima: Haz пишет: Сам так поступаю, средствами ADS полный почасовой бекап базы Должен заметить что средствами ADS копирование идет очень медленно в отличие от связки Clipper + Ads + IPX - тут работало моментально. Поэтому для копирования базы юзаю hb_DynCall( { "CopyFileA", "kernel32.dll", HB_DYN_CALLCONV_STDCALL }, cSource, cDest, 0 ) через RPC NET:

Haz: Dima пишет: Должен заметить что средствами ADS копирование не копирование, а создание копии базы. На сервере очень быстро через cSql := "EXECUTE PROCEDURE sp_BackupDatabase( ... )" или утилитой AdsBackUp.exe получается полная копия всех таблиц и словаря. Которую потом можно развернуть через cSql := "EXECUTE PROCEDURE sp_RestoreDatabase(...) PS. К тому же простое копирование не всегда идет т.к. таблицы залочены пользователями

Dima: а ну тогда да а я тёр про это AdsCopyTable

Haz: если докачку там прикрутить в... имел в виду логику Проверяем есть ли файл приемник , если нет - тупо копируем, если есть - проверяем длину ( и м.б. контрольную сумму по желанию ) . Дальше устанавливаем в источнике указатель файла на длину приемника и дописываем остаток в конец. Тогда если при копировании 100 мб из 150 прошел сбой - то допишем только 50

Dima: Haz пишет: имел в виду логику Понял

Haz: Haz пишет: HB_ZIPFILEByTDSpan разве умеет бить на тома ? умеет, надо задать размер в 7 параметре

Dima: ну как бы глянув в исходник вижу HB_SYMBOL_UNUSED( nSpanSize ) /* NOTE: Spanning not supported. */

Haz: Проверил - работает Create a zip file Syntax HB_ZIPFILEBYTDSPAN()( <cFile> , <cFileToCompress> | <aFiles>, <nLevel> , <bBlock>,<lOverWrite> ,<cPassword>,<iSize>,<lWithPath>,<lWithDrive>) ---> lCompress Arguments <cFile> Name of the zip file <cFileToCompress> Name of a file to Compress, Drive and/or path can be used <aFiles> An array containing files to compress, Drive and/or path can be used <nLevel> Compression level ranging from 0 to 9 <bBlock> Code block to execute while compressing <lOverWrite> Toggle to overwite the file if exists <cPassword> Password to encrypt the files <iSize> Size of the archive, in bytes,default is 1457664 bytes <lWithPath> Toggle to store the path or not <lWithDrive> Toggle to store the Drive letter and path or not Returns <lCompress> .t. if file was create, otherwise .f.

Dima: Поигрался с новой функцией копирования. Если задержку не задавать то на копирование архива в 130 метров уходит 9 секунд. Если вставить задержку hb_releaseCPU() (что то же что hb_idlesleep(0.01)) то на копирование уходит 43 секунды. Видимо увеличивать задержку не стоит так как будет очень медленно. Завтра буду тестить у клиента. Haz пишет: Проверил - работает Create a zip file Понял , буду знать. Век живи , век учись



полная версия страницы