Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как быстро скопировать 500 маленьких файлов [D7, WinXP]


Страницы:   1 2 3 4

lessard ©   (2006-09-06 10:46:00) 

Есть 500-600 файлов по 5-6 Кбайт каждый. Как ОЧЕНЬ БЫСТРО скопировать эти файлы в другое место? PS: Место - в сети.... и занимает эта процедура 5-10 сек., надо меньше...


Skyle   (2006-09-06 13:03:00) [21]


> не имею опыта работы с БД, к сожалению...

Я с такойтоже уже не имею

Как там по скорости получилась идея с выборочным копированием?


lessard   (2006-09-06 12:57:00) [22]

Корче получается так: когда юзер загружает базу, файлы формата *.job и *.dxf (двоичные для заданий/записей о выполнении) копируются в папку %APPATH%\cache\*.job и *.dxf соответственно. Когда юзер нажимает сохранить, файлы *.job едут обратно, *.dxf копируются только после завершения сеанса, т.к. всё равно ещё будут изменяться. Я не имею опыта работы с БД, к сожалению...


Skyle   (2006-09-06 12:55:00) [23]

Уменьшение количества файлов явно пойдёт на пользу.
Получение времени файла, Exists и прочее явно будет не медленнее его копирования.

Как я понял, в начале работы база расходится по юзерам, а когда они коммитят изменения, данные ложатся в базу на сервере.

А ты уменьшением времени копирования пытаешься изобразить транзакцию, я правильно понимаю?


lessard   (2006-09-06 12:51:00) [24]

Плохиш, DiamondShark, ребят, мы тут тему обсуждаем... не про скорость работы, явно...


lessard   (2006-09-06 12:49:00) [25]

Объяснял же... у меня при запуске СУБД создаётся локальная копия профиля пользователя (т.к. если рабоают в базе все, тормоза дикие). А при изменении/нажатии "сохранить" это переписывается обратно, сверяясь с текущими изменениями оригинальных файлов. Я вот только не подумал - может не копировать те файлы, которые не были изменены? Или же получение exist/date/time тоже существенно замедлит работу?


Плохиш   (2006-09-06 12:48:00) [26]


> DiamondShark ©   (06.09.06 12:22) [30]
>
> > Головкам не нужно
>
> Это не в ту степь.

В [21] и [22] про сети ничего не говориться, а уточняется как раз другое. Так что сами Вы степью ошиблись.


Skyle   (2006-09-06 12:46:00) [27]


> Как ОЧЕНЬ БЫСТРО скопировать эти файлы в другое место


> файлы физически должны лежать в одном месте


Как-то не коррелируется :(


lessard   (2006-09-06 12:43:00) [28]

Skyle, не в том дело
файлы физически должны лежать в одном месте, а то получится, что один предприятие изменил, сохранить не успел, а другой изменил и сохранил...


StriderMan   (2006-09-06 12:41:00) [29]


> DiamondShark ©   (06.09.06 12:22) [30]
> Самый тормозной винт на порядки быстрее самой быстрой сети.

вот это сомнительно

гигабитный LAN прокачивает за секунду 128 мегабайт. далеко не всякий винт на такое способен.


Skyle   (2006-09-06 12:37:00) [30]


> [34] lessard   (06.09.06 12:30)
> Skyle, сеть не получится. Как я тебе буду обрабатывать запросы
> от кучи пользователей?


А эту обработку на машине пользователя сделать никак нельзя?
Для обработки тоже требуются данные такого же уровня срочности?


Skyle   (2006-09-06 12:36:00) [31]

Тогда ещё вариант:
ставишь везде NTFS, на той машине, с которой данные надо забирать всё собираешь в один многопоточный файл, потом этот файл копируешь, на своей машине читаешь прямо из потоков, также копируешь обратно, разбираешь :)


lessard   (2006-09-06 12:30:00) [32]

Skyle, сеть не получится. Как я тебе буду обрабатывать запросы от кучи пользователей?


lessard   (2006-09-06 12:29:00) [33]

В смысле, будет ли это быстрее?


lessard   (2006-09-06 12:28:00) [34]

DiamondShark, угу.

Стоит ли рассматривать как вариант TCP-транспорт такого типа:

>connect 192.168.0.1 3928
+OK Login, please
>user root
+OK Enter password
>pass password
+OK Logged in, welcome

и потом:

>query dblist.dxf id 1
+OK Transferring started...
sdQ3H50E9HDSKJ3LJBRTELRFB23[RIJEWOFZKLERGBN <-- типа ReadStream

>write dblist.dxf id 1
+OK Enter data for write...
sdjkhljkw345whlferptf23jkr5hlfzelfgdgjdflg23rlsjrdljfkd
+OK Save success

>exit
+OK Bye


Skyle   (2006-09-06 12:26:00) [35]

Качественный скачок даст качественно иное решение ;-)
1. как уже сказали, исключить из процесса сеть
2. разнести копирование и обработку по времени (пусть копируется и обрабатывается не пачкой, а непрерывно)
3. купить EVA-3000 и FiberChannel и поиметь гигабит и общий диск :)


DiamondShark   (2006-09-06 12:22:00) [36]


> Головкам не нужно

Это не в ту степь.
Самый тормозной винт на порядки быстрее самой быстрой сети.


dwar   (2006-09-06 12:20:00) [37]


> Теперь нужно либо распараллелить копирование, либо сделать
> из них один файл..

не думаю что слив в один файл а потом разбор его на 600 мелких +сохранение  займет менше времени, та же лошадь только в порфиль


lessard   (2006-09-06 12:19:00) [38]

StriderMan, клиент-бд стоит у 50 человек в зале. не катит. в новой версии сделаю TCP-обмен. думаю будет лучше.

Skyle, распаралелить в смысле? А сделать файл... была такая идея, даже пробовал ZLib, да не сложилась. Есть ещё варинты?


Плохиш   (2006-09-06 12:18:00) [39]


> lessard   (06.09.06 12:13) [22]


> так большие быстрее копируются

Ну об этом в любой книжке по компьютерам в разделе о работе дисков написано. Головкам не нужно постоянно искать на всём диске требуемое место, да ещё на таблицу раделов/файлов скакать.


dwar   (2006-09-06 12:16:00) [40]


> Есть 500-600 файлов по 5-6 Кбайт каждый

Примерно 3 гига информации 5-10 секунд помоему неплохой результат


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо