Jump to content
  • 0

Скорость поиска файла


Veseloff
 Share

Question

К PHP вопрос отношения, в общем-то, не имеет, но более подходящего раздела не придумал (в "Для начинающих" как-то стыдно постить).

Ситуация такая: есть сайт, на этом сайте есть N пользователей, у каждого пользователя есть аватарка. Аватарки хранятся, допустим, в папке /avatar с именами вида {айдишник_юзера}.jpg. Где-то слышал, что при достаточно большом N (и, как следствие, большом количестве файлов в папке с аватарами), файлы стоит разбивать по папкам (типа /avatar/1, /avatar/2 и так далее), храня в каждой папке не очень много файлов. Причиной тому, якобы, является скорость нахождения файлов на жестком диске, т.е. если разбить 10000 файлов поровну на 10 папок, то нужный файл найдётся быстрее, чем если все файлы хранятся в одной директории. Ересь или всё-таки правда? В данный момент на сервере ext3 и в первую очередь интересно узнать про неё. Ну и про другие файловые системы тоже, если кто знает.

Link to comment
Share on other sites

20 answers to this question

Recommended Posts

  • 0

Вообще то, ты неправильно продумал систему аватаров. Гляди:

есть таблица юзеров:

id
username
password
avatar

В поле аватар пишется название файла.

И, кстати, если ты думаешь, что преодолеешь порог в 1000 юзеров, то советую аватары хранить в базе

Link to comment
Share on other sites

  • 0
К PHP вопрос отношения, в общем-то, не имеет, но более подходящего раздела не придумал (в "Для начинающих" как-то стыдно постить).

Ситуация такая: есть сайт, на этом сайте есть N пользователей, у каждого пользователя есть аватарка. Аватарки хранятся, допустим, в папке /avatar с именами вида {айдишник_юзера}.jpg. Где-то слышал, что при достаточно большом N (и, как следствие, большом количестве файлов в папке с аватарами), файлы стоит разбивать по папкам (типа /avatar/1, /avatar/2 и так далее), храня в каждой папке не очень много файлов. Причиной тому, якобы, является скорость нахождения файлов на жестком диске, т.е. если разбить 10000 файлов поровну на 10 папок, то нужный файл найдётся быстрее, чем если все файлы хранятся в одной директории. Ересь или всё-таки правда? В данный момент на сервере ext3 и в первую очередь интересно узнать про неё. Ну и про другие файловые системы тоже, если кто знает.

Субъективно (без замеров и вообще обоснований) мне кажется, что количество файлов в папке влияет только на скорость просмотра этой папки (получения её содержимого), а если обращение происходит по заранее известному полному пути, то нет никакой разницы.

Link to comment
Share on other sites

  • 0
И, кстати, если ты думаешь, что преодолеешь порог в 1000 юзеров, то советую аватары хранить в базе

И на страницу с 10-ю - 20-ю постами делать по 10 - 20 лишних запросов к базе ? нет уж увольте. Зачем так базу то нагружать ?

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

Link to comment
Share on other sites

  • 0
И на страницу с 10-ю - 20-ю постами делать по 10 - 20 лишних запросов к базе ? нет уж увольте. Зачем так базу то нагружать ?

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

Дружок, поверь, можно одним запросом получить и аватар и посты и все остальное. Так что проблемы не вижу

Link to comment
Share on other sites

  • 0

А мне кажется Veseloff правильно мыслит.

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

Может конечно и ересь, но мне думается так.

Да и вообще, не логично все в куче хранить.

Link to comment
Share on other sites

  • 0
Дружок, поверь, можно одним запросом получить и аватар и посты и все остальное. Так что проблемы не вижу

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

P.S. Эдмунд Шклярский, я вам не «дружок», мы с вами на брудершафт не пили.

Link to comment
Share on other sites

  • 0
Вы еще скажите, что файлы лучше базы. А вы для меня "дружок", т.к я вас старше в разы. Судя по википедии, мне 54 года :)

Я бредовые холивары не развожу, я говрю не абстрактно, а конкретно про данный случай.

Про возраст: в сети нет возраста, википедия - не официальный источник, но даже если вы мне паспорт покажите, это ничего не поменяет. года никому не дают никаких прав, если тока право на достойную старость :)

Link to comment
Share on other sites

  • 0
Вы еще скажите, что файлы лучше базы.

я вообще считаю абсурдом хранить картинки в базе, зачем тогда файловая система ваще нужна?

может ты еще скажешь, что скрипты в базе хранить надо?!

Edited by vvsh
Link to comment
Share on other sites

  • 0

Так , прекратили балаган, пока не начал раздавать молчанки. По теме - разумеется аватары стоит хранить в файловой системе. теперь на счет количества. в ext-образных (никсовых короче) FS к каждой папке есть файл с перечнем файлов и директорий в нем. соответственно встает вопрос о

1) количестве файлов (надеюсь у вас не будет 100 000? :) )

2) выставлен ли срок кэширования для этих файлов ( может клиенту и не надо часто лазать на сервак - пусть из браузерного кэша получает )

3) часто ли заливаются аватары на сервер? (часто ли изменяется этот файл со списком ваших аватар)

Link to comment
Share on other sites

  • 0

Недавно реализовывал систему, подошёл следующим образом.

Просто накидаю структуру, думаю всё будет понятно.

..123

/1234567890.mp4

/1230987654.mp4

...qwe

/qwertyuiop.mp4

/qweasdzxc.mp4

123 и qwe — каталоги.

Генерируется имя файла, кидается в каталог. Если каталога нет, то он создаётся.

может ты еще скажешь, что скрипты в базе хранить надо?!

Есть целый ряд ситуаций, когда такой финт ушами имеет право быть.

Link to comment
Share on other sites

  • 0
Недавно реализовывал систему, подошёл следующим образом.

Просто накидаю структуру, думаю всё будет понятно.

..123

/1234567890.mp4

/1230987654.mp4

...qwe

/qwertyuiop.mp4

/qweasdzxc.mp4

123 и qwe — каталоги.

Генерируется имя файла, кидается в каталог. Если каталога нет, то он создаётся.

Есть целый ряд ситуаций, когда такой финт ушами имеет право быть.

хех, любопытно ... запишем в блокнотик на память :)

Link to comment
Share on other sites

  • 0

Большое всем спасибо, учту на будущее все советы.

Есть целый ряд ситуаций, когда такой финт ушами имеет право быть.

А вот интересно в каких именно случаях это рационально? Я один раз встречал такое, но так и не понял зачем это было сделано.

Link to comment
Share on other sites

  • 0

Это первым делом удобно.

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

Может конечно и ересь, но мне думается так.

Да и вообще, не логично все в куче хранить.

Тоже верно.

Но если писать полный путь до файла, то выгрузки не будет.

Link to comment
Share on other sites

  • 0
Но если писать полный путь до файла, то выгрузки не будет.

что я и говорил, это если бы вы читали директорию, то разность со скоростью в папке с 10 и 100000 файлами была бы большая

Edited by vvsh
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy