![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как быстро скопировать 500 маленьких файлов [D7, WinXP]
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 секунд помоему неплохой результат