Program Club

데이터베이스에 미디어 파일을 저장하는 가장 좋은 방법은 무엇입니까?

proclub 2021. 1. 10. 17:44
반응형

데이터베이스에 미디어 파일을 저장하는 가장 좋은 방법은 무엇입니까?


데이터베이스에 많은 수의 사운드 파일을 저장하고 싶지만 이것이 좋은 방법인지 모르겠습니다. 이런 식으로하는 것의 장단점을 알고 싶습니다.

나는 또한 그 파일들에 "링크"를 가질 가능성에 대해 생각했지만, 아마도 이것은 해결책보다 더 많은 문제를 가지고있을 것입니다. 이 방향에 대한 모든 경험을 환영합니다 :)

참고 : 데이터베이스는 MySQL입니다.


대용량 파일을 저장하는 모든 시스템은 데이터베이스 외부에 저장합니다. 파일에 대한 부분 경로와 함께 파일에 대해 쿼리 가능한 모든 데이터 (제목, 아티스트, 길이 등)를 데이터베이스에 저장합니다. 파일을 검색 할 때가되면 파일 경로를 추출하고 파일 루트 (또는 URL)를 앞에 추가 한 다음이를 반환합니다.

따라서 "a / b / c / 1000"과 같은 부분 경로가 포함 된 "location"열이있을 것입니다.이 열은 " http : // myserver / files / a / b / c /1000.mp3 "

데이터 복구를 위해 필요한 경우 미디어 데이터베이스를 다른 서버 / 디렉토리에 쉽게 지정할 수 있는지 확인하십시오. 또한 데이터베이스를 파일 아카이브의 내용과 다시 동기화하는 루틴이 필요할 수 있습니다.

또한 수천 개의 미디어 파일이있을 경우 하나의 거대한 디렉토리에 모두 저장하지 마십시오. 이는 일부 파일 시스템에서 성능 병목 현상입니다. 대신 여러 개의 균형 잡힌 하위 트리로 나눕니다.


좋은 구현을 사용하는 한 데이터베이스에 저장하는 것이 좋습니다. 데이터베이스의 더 많은 양의 데이터가 성능에 영향을 미치지 않도록하는 방법에 대한 아이디어를 얻으려면이 오래되었지만 좋은 기사를 읽을 수 있습니다.

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

나는 문자 그대로 아무런 문제없이 mysql 데이터베이스에 100 개의 공연을로드했습니다. 디자인과 구현이 핵심입니다. 잘못하면 고통을 받게됩니다.

더 많은 DB 장점 (아직 언급되지 않음) :-부하 분산 된 환경에서 더 잘 작동합니다.-더 많은 백엔드 스토리지 확장 성을 구축 할 수 있습니다.


데이터베이스 사용의 장점 :

  • 사운드 파일을 다른 데이터 비트와 결합하기 쉽습니다.
  • 데이터베이스 보안을 우회하는 파일 I / O 작업 방지.
  • 데이터베이스 레코드가 삭제 될 때 사운드 파일을 삭제하기 위해 분리 작업이 필요하지 않습니다.

데이터베이스 사용의 단점 :

  • 데이터베이스 팽창
  • 데이터베이스는 파일 시스템보다 더 비쌀 수 있습니다.

저는 서로 다른 프로젝트에서 두 가지 방법을 모두 실험 해 보았고 마침내 파일 시스템을 사용하는 것이 더 쉽다는 것을 결정했습니다. 결국 파일 시스템은 이미 파일 저장, 검색 및 인덱싱에 최적화되어 있습니다.

내가 가지고있는 한 가지 팁은 데이터베이스에 파일에 대한 "루트 상대"경로 만 저장 한 다음 프로그램 또는 쿼리 / 저장 프로 시저 / 미들웨어가 설치 특정 루트 매개 변수를 사용하여 파일을 검색하도록하는 것입니다. .

예를 들어 XYZ.Wav를 C : \ MyProgram \ Data \ Sounds \ X \에 저장하면 전체 경로는 다음과 같습니다.

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

그러나 데이터베이스에 경로 및 또는 파일 이름을 다음과 같이 저장합니다.

X\XYZ.Wav

다른 곳에서는 데이터베이스 나 프로그램의 구성 파일에 다음과 같은 SoundFilePath와 같은 루트 경로를 저장합니다.

C : \ MyProgram \ Data \ Sounds \

물론 데이터베이스 경로에서 루트를 분리하는 위치는 사용자에게 달려 있습니다. 이렇게하면 프로그램 설치를 이동하면 데이터베이스를 업데이트 할 필요가 없습니다.

있을려고하는 경우 또한, 많은 파일이 하나의 디렉토리 내 작은 예에있는 파일의 수백 또는 수천 (포함와 바람을하지 않도록, 경로를 해싱의 몇 가지 방법을 찾을의 첫 번째 문자를 기반으로 서브 디렉토리가있다 파일 이름이지만 더 깊이 들어가거나 임의의 해시를 사용할 수 있습니다). 이것은 검색 인덱서도 행복하게 만듭니다.


BLOB (또는 LONGBLOB)로 저장 한 다음 실제로 미디어 파일에 액세스하고자 할 때 데이터를 검색 할 수 있습니다.

또는

미디어 파일을 드라이브에 저장하고 메타 데이터를 DB에 저장할 수 있습니다.

나는 후자의 방법에 의지합니다. 나는 이것이 세계에서 전반적으로 어떻게 수행되는지 모르지만 다른 많은 사람들이 똑같이 할 것이라고 생각합니다.

링크 (데이터에 대한 부분 경로)를 저장 한 다음이 정보를 검색 할 수 있습니다. 드라이브에서 물건을 쉽게 옮기고 계속 액세스 할 수 있습니다.

파일에 대한 다른 메타 데이터와 함께 각 파일의 상대 경로를 DB에 저장합니다. 실제 데이터를 다른 드라이브 (로컬 또는 UNC 경로를 통해)로 재배치해야하는 경우 기본 경로를 즉석에서 변경할 수 있습니다.

그게 내가하는 방법입니다. 나는 다른 사람들도 아이디어를 가질 것이라고 확신합니다.


Blob을 사용하여 파일을 저장하는 몇 가지 이점

  • 관리 오버 헤드 감소-단일 도구를 사용하여 백업 / 복원 등
  • 데이터베이스와 파일 시스템이 동기화되지 않을 가능성 없음
  • 트랜잭션 기능 (필요한 경우)

몇 가지 단점

  • blows up your database servers' RAM with useless rubbish it could be using to store rows, indexes etc
  • Makes your DB backups very large, hence less manageable
  • Not as convenient as a filesystem to serve to clients (e.g. with a web server)

What about performance? Your mileage may vary. Filesystems are extremely varied, so are databases in their performance. In some cases a filesystem will win (probably with fewer larger files). In some cases a DB might be better (maybe with a very large number of smallish files).

In any case, don't worry, do what seems best at the time.

Some databases offer a built-in web server to serve blobs. At the time of writing, MySQL does not.


Store them as external files. Then save the path in a varchar field. Putting large binary blobs into a relational database is generally very inefficient - they only use up space and slow things down as caches are filled are unusable. And there's nothing to be gained - the blobs themselves cannot be searched. You might want to save media meta data into the the database though.


A simple solution would be to just store the relative locations of the files as strings and let the filesystem handle it. I've tried it on a project (we were storing office file attachments to a survey), and it worked fine.


The best way to storing audio/video files, you can use any distributed storage that can be local or on cloud.

https://min.io/

for cloud: AWS S3

ReferenceURL : https://stackoverflow.com/questions/154707/what-is-the-best-way-to-store-media-files-on-a-database

반응형