Что лучший способ состоит в том, чтобы сохранить медиа-файлы на базе данных?

54
задан Benjamin 5 June 2014 в 06:51
поделиться

7 ответов

Каждая система, которую я знаю этого, хранит большие количества больших файлов, хранит их внешне к базе данных. Вы храните все queryable данные для файла (заголовок, художник, длина, и т.д.) в базе данных, наряду с частичным путем к файлу. Когда пора получить файл, Вы извлекаете путь файла, предварительно ожидаете некоторый корень файла (или URL) к нему и возврат это.

Так, у Вас был бы столбец "местоположения", с частичным путем в нем, как "a/b/c/1000", на который Вы тогда отображаетесь: " http://myserver/files/a/b/c/1000.mp3 "

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

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

89
ответ дан Mark Bessey 7 November 2019 в 07:47
поделиться

Я думаю, храня их в базе данных, в порядке, пока Вы используете хорошую реализацию. Можно прочитать эту более старую, но хорошую статью для идей о том, как сохранить большие объемы данных в базе данных от влияния на производительность.

http://www.dreamwerx.net/phpforum/?id=1

я имел буквально 100's концертов, загруженных в mysql базах данных без любых проблем. Разработка и реализация является ключевой, сделайте это неправильно, и Вы пострадаете.

[еще 114] Преимущества DB (не уже упомянутый): - работы лучше в загрузке сбалансировали среду - можно создать в большем количестве масштабируемости устройства хранения данных бэкенда

16
ответ дан DreamWerx 7 November 2019 в 07:47
поделиться

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

одна подсказка, которую я имел бы об этом, должна только сохранить "корневой относительный" путь к файлу в базе данных, затем иметь Вашу программу, или Ваш запрашивает/хранит использование procedures/middle-ware установка определенный корневой параметр для получения файла.

, Например, при хранении XYZ.Wav в C:\MyProgram\Data\Sounds\X\ полный путь был бы

C:\MyProgram\Data\Sounds\X\XYZ.Wav

, Но Вы сохранили бы путь и или имя файла в базе данных как:

X\XYZ.Wav

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

C:\MyProgram\Data\Sounds\

, Конечно, откуда Вы разделяете корень пути к базе данных, ваше дело. Тот путь при перемещении установки программы Вы не должны обновлять базу данных.

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

9
ответ дан CMPalmer 7 November 2019 в 07:47
поделиться

Преимущества использования базы данных:

  • Легкий присоединиться к звуковым файлам с другими битами данных.
  • файл Предотвращения i/o операции та обходная безопасность базы данных.
  • Никакая потребность в разделительных операциях для удаления звуковых файлов, когда записи базы данных удалены.

Недостатки использования базы данных:

  • чрезмерное увеличение размера Базы данных
  • Базы данных могут быть более дорогими, чем файловые системы
9
ответ дан Kluge 7 November 2019 в 07:47
поделиться

Вы могли сохранить их как БЛОБЫ (или LONGBLOBs) и затем получить данные, когда Вы хотите, на самом деле получают доступ к медиа-файлам.

или

Вы могли просто сохранить медиа-файлы на диске и сохранить метаданные в DB.

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

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

я храню от относительного пути каждого файла в DB наряду с другими метаданными о файлах. Основной путь может тогда быть изменен на лету, если я должен переместить фактические данные к другому диску (или локальный или через путь UNC).

Это - то, как я делаю это. Я уверен, что у других будут идеи также.

4
ответ дан itsmatt 7 November 2019 в 07:47
поделиться

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

  • Более низкое управление наверху - использует единственный инструмент для резервного копирования / восстанавливают и т.д.
  • Никакая возможность для базы данных и файловой системы, чтобы быть вне синхронизации
  • Транзакционная возможность (в случае необходимости)

Некоторые недостатки

  • аварийные завершения RAM серверов баз данных с бесполезным мусором, который это могло использовать для хранения строк, индексирует и т.д.
  • , Делает резервные копии DB очень большими, следовательно менее управляемыми
  • Не столь удобный как файловая система для обслуживания клиентам (например, с веб-сервером)
<час>

Что относительно производительности? Ваш пробег может варьироваться. Файловые системы чрезвычайно варьируются, так базы данных в их производительности. В некоторых случаях файловая система победит (вероятно, с меньшим количеством больших файлов). В некоторых случаях DB мог бы быть лучше (возможно, с очень большим количеством небольших файлов).

В любом случае, не волнуйте, делайте то, что кажется лучшим в то время.

базы данных Some предлагают встроенный веб-сервер для обслуживания блобов. Во время записи MySQL не делает.

4
ответ дан MarkR 7 November 2019 в 07:47
поделиться

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

1
ответ дан Josh Kodroff 7 November 2019 в 07:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: