| >1) Если в одной папке накопится более 1000 подпапок, то это равносильно наличию 1000 файлов в этой
>папке? И если да, то какой тогда смысл в подпапке для каждого файла?
Никакого, если будет по одной директории на файл, вот если несколько - другое дело, например, все изображения статьи в отдельной папке или пару сотен файлов в отдельной папке (распределять можно хэшем).
2. Не совсем, если в папке 89 у вас лежит сотня файлов, а в папке 88 другая сотня файлов. А таких промежуточных папок в вас допустим 256, как это справедливо указано в следующем вопросе. Искать в 100 файлах сильно проще, чем в 25600 (т.е. если мы все свалим в одну кучу).
3. Потому MD5-хэш это на самом деле последовательность шестнадцатеричных чисел, которые изменяются в диапазоне от 0 до 9 и от a до f. Т.е. в десятичном числе 89 каждая из двух цифр может меняться в диапазоне от 0 до 9 (10 x 10 = 10 значений), а в шестнадцатеричных от 0 до f (16 значений). Если бы это было десятичное число, то оно менялось от 00 до 99 - 100 значений, а шестнадцатеричное изменяется от 00 до ff (16 x 16 = 256 значений). Если у вас есть инженерный калькулятор, переключите его в режим шестнадцатеричных чисел и введите ff, а потом переведите в десятичный режим и получите 256. Т.е. два символа md5-хэша могу принимать 256 разных значений и количество папок у вас не может превышать это число.
4. Если у вас пользователь не грузит десятков тысяч файлов, вы не получаете никакого преимущества, так как уже разбили файлы по пользователям и вряд ли они будут грузить тысячи файлов. А вот если вы все файлы пользователей храните в одной папке - смысл есть. Плюс смотрите, допустим вы написали настолько популярную систему, что у вас получился второй Facebook или твиттер и у вас зарегистрировался миллиард пользователей. Каждый загрузил по 100 файлов в среднем. Вас уже не спасет один уровень вложения, вам придется брать вторую цифру и внутри первой папки делать еще разбиение, а потом еще. Ну и понятно, что вы просто не поместите эту груду информации на один сервер. Скорее всего, конечно, у вас будет некое облако, но если вы захотите хранить изображения на отдельных серверах, то разбиение по хэшу позволит разбросать вам их равномерно, а вот user_1, user_2, user_3 уже нет - потребуется отдельный сервис, который будет брать путь к изображению и вычислять где он там реально лежит в кластере. В общем пока у вас сервер один, все это кажется пустой тратой времени, а вот когда у вас пяток серверов только под аватарки пользователей, такая схема становится гораздо полезнее. Впрочем в современных облачных хранилищах все это уже не так актуально, так как там объекты, доступ к которым индексируется, вряд ли вы будете тенанты по MD5 создавать... хотя все может быть, зависит от того, как разрастется ваш сервис. | |