закачка файла по частям
От: MikelSV http://www.centerix.ru
Дата: 16.10.09 12:52
Оценка:
Разрабатываю программу типа р2р сети, файлы качать.

Задумался над алгоритмом сбора файла из того, что скачалось.
Я бы сказал, что хочется поговорить об этом. Для нахождения лучшего решения.

Рассчитывая на возможность скачивать от нескольких клиентов, начал разрабатывать алгоритм сохранения файла так же частями.
* я так понимаю, что резервирование места заранее в таких программах ну не приветствуется. "лишнего места много не бывает".

На данный момент лучшим вариантом считаю разбитие файла на четкие блоки и даже наверное не меньше 32К и равные 32К*2^x (64К, 128К...).
После полного скачивания блоки записываются в правильном порядке.
Также для каждого блока планируется хеш, для проверки. Да, количество блоков не будет превышать 1024. для маленьких файлов не вижу смысла больше. А вот для больших немного сомневаюсь. Блоки по 2Мб для файла 2Гб, хмм, а может и ничего.


Вот, вроде все просто, но мозг что-то тормозит.


19.10.09 04:03: Перенесено модератором из 'C/C++' — Кодт
Римское правило. Тот, кто говорит, что Это не может быть сделано, никогда не должен мешать тому, кто Это делает.
Осень, ну вы поняли.
Зачем еще один код? А человек?
Re: закачка файла по частям
От: OdesitVadim Украина  
Дата: 16.10.09 12:57
Оценка: 1 (1) +1
Здравствуйте, MikelSV, Вы писали:

MSV>Разрабатываю программу типа р2р сети, файлы качать.


MSV>Задумался над алгоритмом сбора файла из того, что скачалось.

MSV>Я бы сказал, что хочется поговорить об этом. Для нахождения лучшего решения.

MSV>Рассчитывая на возможность скачивать от нескольких клиентов, начал разрабатывать алгоритм сохранения файла так же частями.

MSV>* я так понимаю, что резервирование места заранее в таких программах ну не приветствуется. "лишнего места много не бывает".
У торрентов часто есть опция "резервировать место". плюс есть такое чудо, как разреженные файлы.
MSV>На данный момент лучшим вариантом считаю разбитие файла на четкие блоки и даже наверное не меньше 32К и равные 32К*2^x (64К, 128К...).
А пусть размер определяется по размеру файла и уровню паранои пользователя.
MSV>После полного скачивания блоки записываются в правильном порядке.
заводим ещё один файл, в котором отмечаем какие блоки скачаны, какие качаются. по два бита на блок — хватит. а может и по биту.
пока блок скачивается — это отдельный файл. А может и просто в оперативку, если блок маленький.А вот скачали — вложим в файл.
MSV>Также для каждого блока планируется хеш, для проверки. Да, количество блоков не будет превышать 1024. для маленьких файлов не вижу смысла больше. А вот для больших немного сомневаюсь. Блоки по 2Мб для файла 2Гб, хмм, а может и ничего.
а может почитать как сделали торрент?
Re[2]: закачка файла по частям
От: MShura  
Дата: 16.10.09 14:01
Оценка:
MSV>>Рассчитывая на возможность скачивать от нескольких клиентов, начал разрабатывать алгоритм сохранения файла так же частями.
MSV>>* я так понимаю, что резервирование места заранее в таких программах ну не приветствуется. "лишнего места много не бывает".
OV>У торрентов часто есть опция "резервировать место". плюс есть такое чудо, как разреженные файлы.

Sparse файлы действительно мощная вещь. Однако если целевой файл предполагается будет записан полностью и в произвольном порядке, то использование sparse нецелесообразно.

http://www.rsdn.ru/forum/unix/3516604.1.aspx
Автор: MShura
Дата: 26.08.09
Re[2]: закачка файла по частям
От: CreatorCray  
Дата: 16.10.09 14:02
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

OV>есть такое чудо, как разреженные файлы.

Которые вкупе с торрентом на почти пустом (5% занято было) терабайтном диске умудряются выдавать пятизначные цифири в колонке "колво фрагментов файла" в дефрагментаторе.
Нафиг, нафиг!

OV>а может почитать как сделали торрент?

+1
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: закачка файла по частям
От: Centaur Россия  
Дата: 16.10.09 14:15
Оценка: +2
Здравствуйте, MikelSV, Вы писали:

MSV>Разрабатываю программу типа р2р сети, файлы качать.


Возьмите BitTorrent и не изобретайте велосипед.

MSV>Рассчитывая на возможность скачивать от нескольких клиентов, начал разрабатывать алгоритм сохранения файла так же частями.

MSV>* я так понимаю, что резервирование места заранее в таких программах ну не приветствуется. "лишнего места много не бывает".

Неправильно. Я хочу знать, что файл не влезет, сразу, как только начал его качать, или, если файл таки начал качаться, чтобы места гарантированно хватило. Я также хочу, чтобы, когда файл скачается, он был распределён на диске оптимально.
Re: закачка файла по частям
От: ДимДимыч Украина http://klug.org.ua
Дата: 16.10.09 15:17
Оценка:
Здравствуйте, MikelSV, Вы писали:

MSV>* я так понимаю, что резервирование места заранее в таких программах ну не приветствуется. "лишнего места много не бывает".


Не знаю, как у кого, но лично с моей стороны — приветствуется.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[2]: закачка файла по частям
От: MikelSV http://www.centerix.ru
Дата: 16.10.09 16:04
Оценка:
> а может почитать как сделали торрент?
это не интересно. нет места для творчества и полета мысли.

Все знать, оно конечно хорошо, но скучно.

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

Если у вас много места, то конечно лучше зарезервировать сразу.
Но мне не настолько повезло, и битвы за место идет постоянно. Для меня ужасно хорошо, что файл не займет сразу все место. Особенно, если он потом висит недокаченным куском.

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

>Sparse файлы действительно мощная вещь. Однако если целевой файл предполагается будет записан полностью и в произвольном порядке, то использование sparse нецелесообразно.

Не хочу вызвать ненависть у человека, добавившего 2гиговый файл по ошибке.
Хотя щас уже не те скорости. А тогда комп трещал винтом в районе полуминуты для выделения где-то 200мегов.

Надо потестировать, как щас со скоростями.


Кстати:
>Которые вкупе с торрентом на почти пустом (5% занято было) терабайтном диске умудряются выдавать пятизначные цифири в колонке "колво фрагментов файла" в дефрагментаторе.
У меня до 1024 блоков, которые должны выделяться полностью. Это должно спасти от кучи фрагментов. Да и их минимальные размеры 32К.
Римское правило. Тот, кто говорит, что Это не может быть сделано, никогда не должен мешать тому, кто Это делает.
Осень, ну вы поняли.
Зачем еще один код? А человек?
Re: закачка файла по частям
От: gh2  
Дата: 18.10.09 13:05
Оценка: :)
Здравствуйте, MikelSV, Вы писали:

MSV>Разрабатываю программу типа р2р сети, файлы качать.


MSV>Задумался над алгоритмом сбора файла из того, что скачалось.


Насколько я вижу работу своего торрента под виндой — на диске сразу создается файл нужного размера.
Дальше, скорее всего, используется механизм memory mapped files.
Re[2]: закачка файла по частям
От: MShura  
Дата: 18.10.09 13:55
Оценка:
gh2>Насколько я вижу работу своего торрента под виндой — на диске сразу создается файл нужного размера.
gh2>Дальше, скорее всего, используется механизм memory mapped files.

memory mapped files не спасут от тормозов при непоследовательной записи обычного файла.
Спасет только sparse, но ценой фрагментации файла.
Re[3]: закачка файла по частям
От: CreatorCray  
Дата: 18.10.09 23:38
Оценка:
Здравствуйте, MShura, Вы писали:

MS>memory mapped files не спасут от тормозов при непоследовательной записи обычного файла.

MS>Спасет только sparse, но ценой фрагментации файла.

Отсутствие тормозов при записи в случае со sparse аукнутся дикими тормозами при чтении огромного колва фрагментов.
Уж не знаю что лучше
Я бы предпочёл грамотный write cache и preallocated файлы.
Например как в том же uTorrent
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: закачка файла по частям
От: MShura  
Дата: 19.10.09 11:42
Оценка:
MS>>memory mapped files не спасут от тормозов при непоследовательной записи обычного файла.
MS>>Спасет только sparse, но ценой фрагментации файла.

CC>Отсутствие тормозов при записи в случае со sparse аукнутся дикими тормозами при чтении огромного колва фрагментов.

CC>Уж не знаю что лучше
CC>Я бы предпочёл грамотный write cache и preallocated файлы.
CC>Например как в том же uTorrent

В случае Windows XP+/NTFS есть полезная функция именно для этого случая
SetFileValidData
К сожалению она требует определенных привилегий
Если они есть, то

+ SetFilePointer
+ SetEndOfFile
+ SetFileValidData

и вуаля все проблемы решены:
Не нужны sparse и тормозов нет при произвольной записи
Re[3]: закачка файла по частям
От: Pavel Dvorkin Россия  
Дата: 22.10.09 10:16
Оценка:
Здравствуйте, MShura, Вы писали:

MS>Sparse файлы действительно мощная вещь.


До тех пор, пока не окажется, что в нем все больше и больше непустых кусков, а места на диске не хватает...
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.