1. PHP / Говнокод #8380

    +154

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    function getDirName($artistId)
        {
            $dirName = 1;
            $startNumber = 500;
            $result = false;
    
            while(!$result) {
                if ($artistId <= $startNumber) {
                    $result = true;
                }
                else {
                    $dirName++;
                    $startNumber += 500;
                }
            }
    
            return $dirName;
        }

    Весь прикол такой, что фотки на сервере лежат по 500 штук и зная id артиста можно узнать в какой из директории лежит его фотка. Вместо того чтобы написать, что то типа - $dirName = round($artistId / 500); я выдумал вот такую несуразицу :)

    Запостил: dev6alexander, 01 Ноября 2011

    Комментарии (20) RSS

    • а зачем их вообще в кучу мешать? )
      Ответить
      • Нет Вы не поняли, картинки для уменьшения нагрузки на сервер были разнесены на разные директории. Т.е у артистов у которых id менее или равен 500 фотки хранятся в в директории с именем - 1. И так далее:
        1,2,3,etc
        Ответить
        • все равно не понял, как картинки для уменьшения нагрузки на сервер могут быть разнесены на разные директории?
          имхо один хрен, их там 10 или 1000 в директории.
          а для уменьшения нагрузки нужно разносить пхп-код, бд и статичные файлы по разным серверам, разве нет?
          Ответить
          • С разносом данных согласен. Но в данном случае пока нет средств на это :(
            А насчет кол-ва файлов - попробуйте в одну директорию положить примерно 100 000 файлов и более. апач будет страшно тормозить при прямом обращеннии к ним. (насчет Nginx напоминать не надо)
            Ответить
            • > попробуйте в одну директорию положить примерно 100 000 файлов и более. апач будет страшно тормозить при прямом обращеннии к ним.
              попробовал - скопировал одну картинку на 100 000 файлов, положил в директорию апача и попробовал достучаться до 100 000 ого через апач - он и глазом не моргнул, выдал картинку, не показывая при этом дисковой активности
              Ответить
          • Резон есть: git, к примеру, воздаёт для хранения объектов каталоги (имя из двух символов по первым символам хэша) как раз с целью повышения производительности.
            Ответить
            • думаю, таким образом так повышается производительность отслеживания изменений, а не скорость доступа по известному пути
              Ответить
              • Скорость доступа к файлам в каталоге уменьшается при увеличении количества этих файлов. В NTFS логарифмически, в ext3 порядка роста не знаю.
                Ответить
                • теоретически да, это и понятно, но практически, думаю, замедление вовсе не по этой причине - только если хард пора увольнять
                  Ответить
              • За счёт чего, по вашему, увеличится производительность отслеживания изменений?
                Ответить
          • по-моему, это просто пиздец головного мозга

            там небось mod_rewrite и index.php который костылит все функции httpd, а теперь схватились за головку - НАГРУЗКА
            Ответить
            • вполне возможно, что, для полного счастья, статика отдается скриптом
              Ответить
          • В остальном с вами согласен: это скорее тонкая микрооптимизация, сначала нужно устранять проблемы на других уровнях системы.
            Ответить
    • с самого начала мой вопрос был такой: зачем фотки кидать в кучу, а потом их искать, если их можно распихать по папкам таким образом, что папка известна из имени файла?
      например, по алфавиту - скажем a\a\c для файлов aac*, или точно так же для числовых идентификаторов
      Ответить
      • Я вообще-то и не говорил, что файлы лежат в куче! Они уже расфосованы по директориям.
        Ответить
      • Насчет падения скорости при хранении большого числа файлов вот, что нашел на скорую руку:
        http://habrahabr.ru/blogs/webdev/115161/

        http://www.gentoo.ru/content/vopros-pro-bystrodeystvie-pri-bolshom-kolichestve-faylov-v-kataloge
        Ответить
        • речь идет о поиске, создании листинга и прочих стараний (особенно Windows Explorer начинает себя очень плохо чувствовать), это не касается прямого доступа к одиночному файлу
          + по вашей же ссылке есть исследование http://habrahabr.ru/blogs/webdev/115161/#comment_3725721
          Ответить
          • Вот хроший комментарий к комментарию написаным вами - http://habrahabr.ru/blogs/webdev/115161/#comment_3725814

            Приглядитесь к тем результатам которые вы мне показываете. Как вы видите скорость чтения файла (не листинга) очевидно растет + к этому если у вас высокий трафик это будет очень заметно. Оговорюсь сразу доступ к файлам у меня прямой без скриптов и .htaccess. Это очевидный факт не пойму о чем вы спорите
            Ответить

    Добавить комментарий