파일 시스템이 아닌 데이터베이스에 파일을 저장합니까?


83

일반적으로 파일 시스템이 아닌 데이터베이스 (특히 mssql)에 파일을 저장하는 것이 성능 저하 중 얼마나 나쁜가요? SQL Server에서 내 파일을 varbinaries로 저장하려는 응용 프로그램 이식성 이외의 이유를 찾을 수 없습니다.

답변:


77

이 답변을 살펴보십시오.

이미지를 DB에 저장-그래, 아니?

기본적으로 사용자 수에 따라 공간 및 성능 저하가 상당히 클 수 있습니다. 또한 웹 서버는 저렴하고 부하를 분산하기 위해 쉽게 추가 할 수있는 반면 데이터베이스는 일반적으로 웹 아키텍처에서 가장 비싸고 확장하기 가장 어려운 부분입니다.

반대되는 예 (예 : Microsoft Sharepoint)가 있지만 일반적으로 데이터베이스에 파일을 저장하는 것은 좋은 생각이 아닙니다.

데스크톱 앱을 작성하거나 대략적으로 얼마나 많은 사용자를 보유하게 될지 알 수없는 한, 공개 웹 사이트와 같이 무작위로 예상 할 수없는 경우 데이터베이스에 파일을 저장하는 데 높은 비용을 지불 할 수 있습니다.


36

SQL Server 2008로 이동할 수있는 경우 두 가지 장점을 모두 제공하는 FILESTREAM 지원을 활용할 수 있습니다. 파일은 파일 시스템에 저장되지만 데이터베이스 통합은 단순히 varchar 필드에 파일 경로를 저장하는 것보다 훨씬 낫습니다. 쿼리는 표준 .NET 파일 스트림을 반환 할 수 있으므로 통합이 훨씬 간단 해집니다.

FILESTREAM 저장소 시작


1
여기에 예약이 있습니다. 특히 확장 성 및 가용성 측면 : 이러한 "블럽"이 저장되는 위치를 어떻게 제어합니까?
Dave Van den Eynde

3
확장 성 및 가용성은 충분히 고려 된 것 같습니다.이 백서 참조 : msdn.microsoft.com/en-us/library/cc949109.aspx
Jon Galloway

2
이 한 가지주의해야 할 점은 데이터베이스에 연결할 때 통합 보안 (예 : Windows 인증)를 사용해야한다는 것입니다 : blogs.msdn.com/b/psssql/archive/2008/04/10/...
스벤 Grosen

22

상황에 따라 다릅니다. 예를 들어, 저는 지방 정부에서 일하고 머그 샷과 같은 이미지를 많이 가지고 있습니다. 사용자 수가 많지는 않지만 데이터에 대한 보안과 감사가 필요합니다. 데이터베이스는이를 더 쉽게 만들고 확장 문제에 부딪히지 않기 때문에 더 나은 솔루션입니다.



3

내 경험상 항상 파일을 파일로 저장하는 것이 좋습니다. 그 이유는 파일 시스템이 파일 저장에 최적화되어있는 반면 데이터베이스는 그렇지 않기 때문입니다. 물론 몇 가지 예외가 있지만 (예를 들어 많이 예고 된 차세대 MS 파일 시스템은 SQL 서버 위에 구축되어야 함) 일반적으로 그것이 제 규칙입니다.


3

성능이 문제이기는하지만 현대의 데이터베이스 설계로 인해 작은 파일의 경우 훨씬 덜 문제가 된 것 같습니다.

성능은 제쳐두고 데이터가 얼마나 밀접하게 결합되어 있는지에 따라 달라집니다. 파일에 데이터베이스의 필드와 밀접한 관련이있는 데이터가 포함되어 있으면 개념적으로 파일에 가깝고 blob에 저장 될 수 있습니다. 잠재적으로 여러 레코드와 관련 될 수있는 정보를 포함하거나 데이터베이스 컨텍스트 외부에서 사용할 수있는 정보가 포함 된 경우 외부에 속합니다. 예를 들어 웹 페이지의 이미지는 링크 된 페이지와는 별도의 요청으로 가져 오므로 외부에 속할 수 있습니다 (특정 디자인 및 보안 고려 사항에 따라 다름).

우리의 타협은, 이것이 최선이라고 약속하지 않습니다. 데이터베이스에 작은 XML 파일을 저장하고 그 밖에 이미지와 기타 파일을 저장하는 것이 었습니다.


작거나 큰 파일을 어떻게 생각하십니까?
ubiquibacon


1

@ZombieSheep에 동의합니다. 한 가지 더-일반적으로 DBMS 공급 업체가 제공하는 모든 기능을 놓치기 때문에 데이터베이스를 실제로 이식 할 필요가 없다고 생각합니다. 다른 데이터베이스로 마이그레이션하는 것이 마지막으로 고려할 사항이라고 생각합니다. 내 $ .02


1

blob (이미지)을 바이트 배열로 구문 분석 한 다음 적절한 파일 이름으로 디스크에 기록한 다음이를 읽는 오버 헤드로 인해이 작업을 너무 자주 수행하는 것을 막을 수 있습니다. 특히 파일이 다소 크다.


1
이 "파일"을 디스크에 쓰고 다시 읽어야한다고 언급 한 곳은 없습니다.
Dave Van den Eynde

이것은 이미지를 나중에 표시해야 할 때, 특히 다른 형식으로 저장되거나 순전히 크기로 인해 긴 시간 동안 메모리에 저장할 수없는 시나리오에서 암시 적 작업입니다.
Jon Limjap

0

모호하지 말고 저장하는 '파일'의 유형이 가장 큰 결정 요인 중 하나라고 생각합니다. 기본적으로 파일로 저장할 수있는 큰 텍스트 필드에 대해 이야기하는 경우 내 선호는 db 스토리지입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.