Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Раскидать файлы по папкам

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

KurkSS

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Имеем - будет хранить более 40 млн файлов.
 
Для одной папки этого много. Сейчас имя файла это sha1 от его оригинального имени
(которое естественно не случайно - а)часто расширение файла ави мп3 ехе... б)путь к файлу(логический) - тоже не случайная величина, и может получиться что для 20 млн из 40 это одно и тоже. тоесть хеш берём от строки ХХХХХХХХХХ-рандом-УУУУ
где Х часть и У часть константа.)
 
если пойти стандартным путём, брать первые три символа от хеша
substr(sha1('XXXXXXX-random-YYYYY'),0,3) - насколько можно быть увереным что я получу то что ожидаю
 
4096 папок, и в каждой расномерно расложены файлы (получиться по 10 000 на папку)
 
что не получиться что 100 папок будет содержать по 100 000 файлов.
????
 
и вопрос другой.
сам sha1 не быстрая функция.
 
ктото может подсказать быстрый и хороший способ.
 
ВХОД - имя файла полное PATH1/path2/.../pathN/file.ext
 
ВЫХОД
sys_file_name - системное имя по которому НЕЛЬЗЯ востановить оригинальное имя файла - естественно уникальное поле для базы данных.
sub_folder - при котором получим равномерное распределение файлов.
 
ЗЫ
вариант как на одном форуме - subfolder = autoincrement_field(pk) DIV 1000 (нацело)
не подходит. ибо после удаления и закачки новых файлов мы получим на 40 млн файлов 40 млн подпапок.
 
Добавлено:
НАПОМНИАЮ
 
ВХОД - имя файла полное PATH1/path2/.../pathN/file.ext  
этот путь, это логическая структура, не связан с физическим хранением.
 
грубо говоря пользователь сам себе придумывает красивое имя для
foto.jpg -типо  
 
/foto/my/2012/summer/july/Ibitca/ya-goliy/dlya_Veri/photoshop/prikol/mocha_v_golovu_idet_naporom/ya_durak/foto.jpg

Всего записей: 73 | Зарегистр. 22-05-2008 | Отправлено: 12:47 21-08-2013
XPEHOMETP

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подозреваю по описанию, что это FTP-хостинг для МР3-файлов, закачиваемых зарегистрированными юзверями. Которых явно будет не 40 лимонов. На каждого юзверя свою папку - не решение?

Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 14:50 21-08-2013
karlss0n



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KurkSS
Разбиение по папкам именно через полученный HASH нужно делать?
 
Для равномерного распределения можно было бы сделать следующее:
1. Задать кол-во папок.  
2. Завести табличку с описанием этих папок, в том числе поле со счётчиком файлов
3. Раскидывать файлы по кругу (а лучше запросом более свободный слот выбирать) во все папки, с файлом сохранять его физический путь.
4. При удалении файла у нас всегда есть папка, можно счётчик скрутить для этой папки
 
Тогда распределение будет управляемо.
 
Второй вариант - ввести в название файла время (милисекунды например) в открытом виде вместо random, в сутках 86.4 млн, следовательно для 4096 папок нужно делить на 21100. Но тут сложно будет добиться равномерного распределения. Какой алгоритм не бери распределение будет неуправляемо, т.к. нет ни одной константы в генерации имени файла.
 
Вам нужно постараться выделить больше параметров. Имени файла недостаточно.
 

Всего записей: 136 | Зарегистр. 12-07-2004 | Отправлено: 14:51 21-08-2013 | Исправлено: karlss0n, 14:53 21-08-2013
KurkSS

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
не ребятки...давайте поднапрягёмся.
 
придумать нужно. даже наверно можно найти гуглом, только чёрт знает по каким словам. по очевидным - ничего не нашол дельного(простого)
 
из сложных примеров.
шифрование twofish - там для полного секьюрити используеться много раундов обработки блока, но уже при 4 раундах на выходе получаем последовательность из которой вырезая (нам надо 12 бит, а там по 16 байт блоки) - ну скажем для средних байтов беря байты через один и беря 2 средних бита - получаем таки равномернораспределёную случайную величину в 12 бит.
 
но шифрование это долгая песня. нам бы попроще.
 
ЗЫ
нащот разбияния по папкам.
 
хочеться чтобы мы отдельно не вели учот в каких подпапках какие файлы.
 
тоесть определение подпапки должно быть на основании имени файла. знаем имя, выщитываем быстро подпапку.
 
имена файлов это хешированное значение логического имени.
 
Добавлено:
=========================
И нет, это не фтп хостинг, а именно веб .
 
и нет не музыка, а имено случайны пользовательские файлы.
 
статистика показывает что разрешая юзерам хранить своё барахло, получаем 250Кб средний размер файла.
 
если на сервере 10Тб размер для этого барахла, это таки 40млн файлов.

Всего записей: 73 | Зарегистр. 22-05-2008 | Отправлено: 23:09 21-08-2013
karlss0n



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот не факт, что извращаясь с хэшированием будет быстрее, чем сделать запрос к табличке.  
И опять же: НИКОГДА не получить абсолютно равномерного заполнения при хэшировании, т.к. на название файла  влиять нет возможности.
 

Всего записей: 136 | Зарегистр. 12-07-2004 | Отправлено: 12:48 22-08-2013 | Исправлено: karlss0n, 12:53 22-08-2013
Dmitry

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
karlss0n

Цитата:
Вот не факт, что извращаясь с хэшированием будет быстрее, чем сделать запрос к табличке.  
И опять же: НИКОГДА не получить абсолютно равномерного заполнения при хэшировании, т.к. на название файла  влиять нет возможности.

 
Криптостойкая хэш-функция (типа SHA1) специально спроектирована так чтобы давать как можно более равномерное распределение хэшей при самых минимальных изменениях во входных данных. Так что мне кажется что идея вполне жизнеспособная. Стоит попробовать.

Всего записей: 81 | Зарегистр. 24-09-2003 | Отправлено: 09:23 06-09-2013
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Раскидать файлы по папкам


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru