За последние 24 часа нас посетили 18405 программистов и 1635 роботов. Сейчас ищут 1602 программиста ...

Алгоритм хранения большого количества изображений на сервер

Тема в разделе "Решения, алгоритмы", создана пользователем Riddick, 10 июл 2010.

  1. Riddick

    Riddick Активный пользователь

    С нами с:
    13 июн 2008
    Сообщения:
    80
    Симпатии:
    0
    Адрес:
    Россия
    Доброго времени суток!
    Вот интересует вопрос: как хранить на сервере изображения(например фотография пользователя размером 100кб. максимум) в очень большой количестве(5 миллионов).

    Вообще признаюсь, этот вопрос увидел на сайте одной фирмы, в качестве теста(причем и на стажера и на старшего php программиста вопросы одни и те же были))). Необходимо предложить свой алгоритм. Может быть есть статьи, если кто знает киньте пожалуйста ссылку. В Google искал не нашел, может не правильные запросы вводил.

    Да и сейчас работаю над одним проектом, разработкой доски объявлений, там тоже хотелось бы сделать как можно правильнее, чтобы не легла она, если зайдет больше 200 пользователей одновременно. Уже, а то 2 раза подобное слышал...

    Всем спасибо, за внимание и, возможно, за поделенный со всеми свой опыт :)
     
  2. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    то есть ты боишься, что ФС будет тупить из-за большого кол-ва файлов? ну разбивай на папки. К примеру у тебя картинка получает имя от хеша - md5/sha1. Берешь 1-2 символа от имени файла, создаешь такую же папку и в нее картинку кладешь.
     
  3. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    а папка это не файл? ;)
    разбивать по папкам имеет смысл только для удобства использования имхо
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    пять лямов в папке...
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ext4 позволяет 4 миллиарда файлов в папке.
    А папок:
     
  6. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    вопрос в типе ФС и количестве изображений в папке на этой ФС, когда не будут ощущаться тормоза ни для вытягивания картинки из папки, ни при определении нужной папки.

    Допустим у нас данные о картинке хранятся в БД. Запрос идёт напрямую к конкретному файлу, т.е. всяких тормозных листингов и создания списков не будет. В одной папке положим 1000 картинок, тогда для 5 млн картинок имеем 5000 папок. Можно, папки так же сложить по 500-1000 штук в отдельную. Таки имеем 5-10 внешних каталогов.
    Не так много, в принципе. Если кому не в лом - проверьте на практике ;)
     
  7. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    я бы не клал больше 50к файлов в одну папку, после моих тестов екст4, когда в папке 50 гигов и 1700 000 файлов, либо винт наелся либо фс :)

    все стоит раком, в дц все не могу выбраться, сгонять да посмотреть чо там))

    но я бы не стал)

    разбивать в подпапки да и все
     
  8. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Встаёт 2 проблемы:
    * Проблема кол-ва файлов в папке. Я обычно делаю не более 10к папок/файлов на одном уровне.
    * Траффик. WEB сервер может не справится и не смочь отдавать такое кол-во трафика, тогда нужно ещё и разделять по WEB серверам всё.
     
  9. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    не совсем. При предложенном мной разбиении папок будет немного (не более M = 16 * 16 ?). Зато в каждой папке будет по N / M картинок

    ото нефиг было кинопоиск/торрентсру парсить)
     
  10. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    Koc
    тсссссссссс
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    типа так - если generateHash() выдает строки из десятичных цифр, то емкость до миллиарда файлов, но не более 1000 в каждой папке:
    PHP:
    1.     private function _targetName()
    2.     {
    3.         do {
    4.             $this->rand9 = $this->generateHash(9);
    5.             $ret = $this->buildString('{$uploadDir}{$rand9:0,3}/{$rand9:3,3}/{$rand9:6,3}.dat');
    6.         } while(file_exists($ret));
    7.         return $ret;
    8.     }
    9.  
     
  12. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    я было подумал уж, что пхп умеет строчки вырезать как в баше ... незаметил ' .... жаль :)

    а то ты меня обнадежил :))
     
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    пыха дура - ну ты в курсе. приходится делать за неё. это фрагмент из файл-менеджера, который пишу в данный момент. чтобы не разводить оффтопик, создам тему на пiха.ру
    (а то здесь всё строго, аж жуть)
     
  14. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    artoodetoo
    будут Vfs-классы, где каждая папка-файл - объект?
     
  15. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    нет … в моей схеме достаточно одного объекта Storage и одного RecordManager
     
  16. Riddick

    Riddick Активный пользователь

    С нами с:
    13 июн 2008
    Сообщения:
    80
    Симпатии:
    0
    Адрес:
    Россия
    Спасибо:) Так и буду делать