За последние 24 часа нас посетили 16950 программистов и 1663 робота. Сейчас ищут 862 программиста ...

Как лучше организовать хранение файлов (фотографий)

Тема в разделе "PHP и базы данных", создана пользователем Bezlepkin, 17 окт 2013.

  1. Bezlepkin

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

    С нами с:
    22 авг 2012
    Сообщения:
    56
    Симпатии:
    0
    Привет! Есть несколько типов материала. К каждому из них будет прекреплчться изображения, в некоторых mp3.
    Как лучше хранить эти файл? Одна таблица для mp3 вторая для фотографий, а потом по йдишникам материала делать выборку, или запихивать в поле таблицы материала?
     
  2. Golodnyi

    Golodnyi Новичок

    С нами с:
    11 окт 2013
    Сообщения:
    63
    Симпатии:
    0
    Адрес:
    Кемерово
    Зависит от БД, если в БД есть специальноые средства хранения файлов, как в PostgreSQL, тогда вполне приемлемо хранить сами файлы в бд, если речь о MySQL, тогда я бы лучше хранил в файловой системе.
    Ну и в целом я бы не рекомендовал 2 таблицы для файлов, 1-ой вполне достаточно.
     
  3. Bezlepkin

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

    С нами с:
    22 авг 2012
    Сообщения:
    56
    Симпатии:
    0
    Я имел в виду не файлы :) А данные о них, адреса, айдишник, и т.д. Если в одной, не будет ли потом много времени тратиться на запрос, если колличество записей будем большим?
     
  4. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    если хранить не сами файлы а именно инфу о них то делай так как удобнее ее потом отображать - например в таблице будет имя файла, описание, какието теги - то лучше хранить отдельно фотки отдельно мп3.
    а если только имя будет храниться то проще делать в одну таблицу
    на скорость это никак не повлияет даже если там будет миллиард записей
     
  5. Golodnyi

    Golodnyi Новичок

    С нами с:
    11 окт 2013
    Сообщения:
    63
    Симпатии:
    0
    Адрес:
    Кемерово
    Можно разработать структуру чтоб хранить всю информацию о файлах, в одной таблице и будет все удобно) на скорость это конечно повлияет, но я думаю у автора не будет таких объемов данных, чтоб падение скорости было заметно.
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Это ведь всё файлы. Почему бы не сделать таблицу files и держать там все общие для любый файлов атрибуты: имя под которым сохранено, оригинальное имя, размер, id пользователя-хозяина и т.д. Так ты избежишь дублирования однотипных операций. Возможно тебе понадобится дополнительно иметь таблицы для специфических свойств фото, другую для музыки... Когда понадобится, будешь делать JOIN этих таблиц с таблицей files.
    Все просто!

    Я непонял фразу про "запихивать в поле таблицы материала" -- это чего куда?
     
  7. Bezlepkin

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

    С нами с:
    22 авг 2012
    Сообщения:
    56
    Симпатии:
    0
    Ну это когда есть таблица например "Обьявления" В ней id, title, description, created и т.д. И сделать еще поле для фотографий.
     
  8. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    оказывается что нет - смотри выше
     
  9. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    хрень какая-то
    ты вместо "поле для фотографии" используй "id вложенного файла. он будет хоть фотографией, хоть порнографией, что угодно.

    Добавлено спустя 2 минуты 28 секунд:
    а лучше наоборот в file вставить поле id_announce, тогда можно будет в одной объяве делать несколько файлов-вложений.
     
  10. Bezlepkin

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

    С нами с:
    22 авг 2012
    Сообщения:
    56
    Симпатии:
    0
    Спасибо за ответы!
     
  11. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    на всякий случай поясняю: здесь никто не хранит файлы в базе. таблица files хранит описания файлов: имя, размер и проч. )))
     
  12. Bezlepkin

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

    С нами с:
    22 авг 2012
    Сообщения:
    56
    Симпатии:
    0
    Да я просто не так выразился
     
  13. Golodnyi

    Golodnyi Новичок

    С нами с:
    11 окт 2013
    Сообщения:
    63
    Симпатии:
    0
    Адрес:
    Кемерово
    пчму это, я храню файлы именно в базе, если использую PostgreSQL
     
  14. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    ок, ты исключение ) при случае расскажи почему.
     
  15. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    да, он чудненький =)
     
  16. Golodnyi

    Golodnyi Новичок

    С нами с:
    11 окт 2013
    Сообщения:
    63
    Симпатии:
    0
    Адрес:
    Кемерово
    потому что в PostgreSQL есть специальные функции для работы с файлами, там не блоб поля, а специальное хранилище, а в бд хранится просто ID файла, для доступа к нему, преимущество в целостности данных, при удалении строки с информацией о файле автоматически удаляется файл из бд, ну и наоборот, файл сам по себе никуда не денется. Целостность данных основная проблема, когда файлы лежат в ФС.
     
  17. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    да, файлы могут осиротеть, т.к. файловая система в транзакцию не попадает. на самом деле BLOB и FILE объекты в некоторых СУБД тоже лежат вне транзакций и не факт что проблема не сохраняется. про PostgreSQL не знаю - не скажу.

    но если подумать хорошенько, то осиротевший файл это 1) редкость, 2) жрать не просит и 3) вычислить его не составляет труда. можно в кроне раз в месяц прогонять профилактику.

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