Здравствуйте, MikelSV, Вы писали:
MSV>Разрабатываю программу типа р2р сети, файлы качать.
MSV>Задумался над алгоритмом сбора файла из того, что скачалось. MSV>Я бы сказал, что хочется поговорить об этом. Для нахождения лучшего решения.
MSV>Рассчитывая на возможность скачивать от нескольких клиентов, начал разрабатывать алгоритм сохранения файла так же частями. MSV>* я так понимаю, что резервирование места заранее в таких программах ну не приветствуется. "лишнего места много не бывает".
У торрентов часто есть опция "резервировать место". плюс есть такое чудо, как разреженные файлы. MSV>На данный момент лучшим вариантом считаю разбитие файла на четкие блоки и даже наверное не меньше 32К и равные 32К*2^x (64К, 128К...).
А пусть размер определяется по размеру файла и уровню паранои пользователя. MSV>После полного скачивания блоки записываются в правильном порядке.
заводим ещё один файл, в котором отмечаем какие блоки скачаны, какие качаются. по два бита на блок — хватит. а может и по биту.
пока блок скачивается — это отдельный файл. А может и просто в оперативку, если блок маленький.А вот скачали — вложим в файл. MSV>Также для каждого блока планируется хеш, для проверки. Да, количество блоков не будет превышать 1024. для маленьких файлов не вижу смысла больше. А вот для больших немного сомневаюсь. Блоки по 2Мб для файла 2Гб, хмм, а может и ничего.
а может почитать как сделали торрент?
Здравствуйте, MikelSV, Вы писали:
MSV>Разрабатываю программу типа р2р сети, файлы качать.
Возьмите BitTorrent и не изобретайте велосипед.
MSV>Рассчитывая на возможность скачивать от нескольких клиентов, начал разрабатывать алгоритм сохранения файла так же частями. MSV>* я так понимаю, что резервирование места заранее в таких программах ну не приветствуется. "лишнего места много не бывает".
Неправильно. Я хочу знать, что файл не влезет, сразу, как только начал его качать, или, если файл таки начал качаться, чтобы места гарантированно хватило. Я также хочу, чтобы, когда файл скачается, он был распределён на диске оптимально.
Здравствуйте, MikelSV, Вы писали:
MSV>Разрабатываю программу типа р2р сети, файлы качать.
MSV>Задумался над алгоритмом сбора файла из того, что скачалось.
Насколько я вижу работу своего торрента под виндой — на диске сразу создается файл нужного размера.
Дальше, скорее всего, используется механизм memory mapped files.
Разрабатываю программу типа р2р сети, файлы качать.
Задумался над алгоритмом сбора файла из того, что скачалось.
Я бы сказал, что хочется поговорить об этом. Для нахождения лучшего решения.
Рассчитывая на возможность скачивать от нескольких клиентов, начал разрабатывать алгоритм сохранения файла так же частями.
* я так понимаю, что резервирование места заранее в таких программах ну не приветствуется. "лишнего места много не бывает".
На данный момент лучшим вариантом считаю разбитие файла на четкие блоки и даже наверное не меньше 32К и равные 32К*2^x (64К, 128К...).
После полного скачивания блоки записываются в правильном порядке.
Также для каждого блока планируется хеш, для проверки. Да, количество блоков не будет превышать 1024. для маленьких файлов не вижу смысла больше. А вот для больших немного сомневаюсь. Блоки по 2Мб для файла 2Гб, хмм, а может и ничего.
Вот, вроде все просто, но мозг что-то тормозит.
19.10.09 04:03: Перенесено модератором из 'C/C++' — Кодт
Римское правило. Тот, кто говорит, что Это не может быть сделано, никогда не должен мешать тому, кто Это делает.
Осень, ну вы поняли.
Зачем еще один код? А человек?
MSV>>Рассчитывая на возможность скачивать от нескольких клиентов, начал разрабатывать алгоритм сохранения файла так же частями. MSV>>* я так понимаю, что резервирование места заранее в таких программах ну не приветствуется. "лишнего места много не бывает". OV>У торрентов часто есть опция "резервировать место". плюс есть такое чудо, как разреженные файлы.
Sparse файлы действительно мощная вещь. Однако если целевой файл предполагается будет записан полностью и в произвольном порядке, то использование sparse нецелесообразно.
Здравствуйте, OdesitVadim, Вы писали:
OV>есть такое чудо, как разреженные файлы.
Которые вкупе с торрентом на почти пустом (5% занято было) терабайтном диске умудряются выдавать пятизначные цифири в колонке "колво фрагментов файла" в дефрагментаторе.
Нафиг, нафиг!
OV>а может почитать как сделали торрент?
+1
Здравствуйте, MikelSV, Вы писали:
MSV>* я так понимаю, что резервирование места заранее в таких программах ну не приветствуется. "лишнего места много не бывает".
Не знаю, как у кого, но лично с моей стороны — приветствуется.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
> а может почитать как сделали торрент?
это не интересно. нет места для творчества и полета мысли.
Все знать, оно конечно хорошо, но скучно.
>Неправильно. Я хочу знать, что файл не влезет, сразу, как только начал его качать, или, если файл таки начал качаться, чтобы места гарантированно хватило. Я также хочу, чтобы, когда файл скачается, он был распределён на диске оптимально.
Если у вас много места, то конечно лучше зарезервировать сразу.
Но мне не настолько повезло, и битвы за место идет постоянно. Для меня ужасно хорошо, что файл не займет сразу все место. Особенно, если он потом висит недокаченным куском.
А еще резервирование всего места сразу очень не радует. Не знаю, как сейчас, но раньше очень нервировало, что пока место выделяется невозможно работать.
>Sparse файлы действительно мощная вещь. Однако если целевой файл предполагается будет записан полностью и в произвольном порядке, то использование sparse нецелесообразно.
Не хочу вызвать ненависть у человека, добавившего 2гиговый файл по ошибке.
Хотя щас уже не те скорости. А тогда комп трещал винтом в районе полуминуты для выделения где-то 200мегов.
Надо потестировать, как щас со скоростями.
Кстати: >Которые вкупе с торрентом на почти пустом (5% занято было) терабайтном диске умудряются выдавать пятизначные цифири в колонке "колво фрагментов файла" в дефрагментаторе.
У меня до 1024 блоков, которые должны выделяться полностью. Это должно спасти от кучи фрагментов. Да и их минимальные размеры 32К.
Римское правило. Тот, кто говорит, что Это не может быть сделано, никогда не должен мешать тому, кто Это делает.
Осень, ну вы поняли.
Зачем еще один код? А человек?
gh2>Насколько я вижу работу своего торрента под виндой — на диске сразу создается файл нужного размера. gh2>Дальше, скорее всего, используется механизм memory mapped files.
memory mapped files не спасут от тормозов при непоследовательной записи обычного файла.
Спасет только sparse, но ценой фрагментации файла.
Здравствуйте, MShura, Вы писали:
MS>memory mapped files не спасут от тормозов при непоследовательной записи обычного файла. MS>Спасет только sparse, но ценой фрагментации файла.
Отсутствие тормозов при записи в случае со sparse аукнутся дикими тормозами при чтении огромного колва фрагментов.
Уж не знаю что лучше
Я бы предпочёл грамотный write cache и preallocated файлы.
Например как в том же uTorrent
MS>>memory mapped files не спасут от тормозов при непоследовательной записи обычного файла. MS>>Спасет только sparse, но ценой фрагментации файла.
CC>Отсутствие тормозов при записи в случае со sparse аукнутся дикими тормозами при чтении огромного колва фрагментов. CC>Уж не знаю что лучше CC>Я бы предпочёл грамотный write cache и preallocated файлы. CC>Например как в том же uTorrent
В случае Windows XP+/NTFS есть полезная функция именно для этого случая
SetFileValidData
К сожалению она требует определенных привилегий
Если они есть, то