일반적으로 파일 시스템이 아닌 데이터베이스 (특히 mssql)에 파일을 저장하는 것이 성능 저하 중 얼마나 나쁜가요? SQL Server에서 내 파일을 varbinaries로 저장하려는 응용 프로그램 이식성 이외의 이유를 찾을 수 없습니다.
답변:
이 답변을 살펴보십시오.
기본적으로 사용자 수에 따라 공간 및 성능 저하가 상당히 클 수 있습니다. 또한 웹 서버는 저렴하고 부하를 분산하기 위해 쉽게 추가 할 수있는 반면 데이터베이스는 일반적으로 웹 아키텍처에서 가장 비싸고 확장하기 가장 어려운 부분입니다.
반대되는 예 (예 : Microsoft Sharepoint)가 있지만 일반적으로 데이터베이스에 파일을 저장하는 것은 좋은 생각이 아닙니다.
데스크톱 앱을 작성하거나 대략적으로 얼마나 많은 사용자를 보유하게 될지 알 수없는 한, 공개 웹 사이트와 같이 무작위로 예상 할 수없는 경우 데이터베이스에 파일을 저장하는 데 높은 비용을 지불 할 수 있습니다.
SQL Server 2008로 이동할 수있는 경우 두 가지 장점을 모두 제공하는 FILESTREAM 지원을 활용할 수 있습니다. 파일은 파일 시스템에 저장되지만 데이터베이스 통합은 단순히 varchar 필드에 파일 경로를 저장하는 것보다 훨씬 낫습니다. 쿼리는 표준 .NET 파일 스트림을 반환 할 수 있으므로 통합이 훨씬 간단 해집니다.
여기서 질문은 무엇입니까?
최신 DBMS SQL2008은 BLOB를 테이블에 고정하는 것이 아니라 다양한 방식으로 BLOB를 처리합니다. 물론 장단점이 있으며 조금 더 깊이 생각해야 할 수도 있습니다.
늦게까지 (?) Jim Gray까지 흥미로운 논문입니다.
내 경험상 항상 파일을 파일로 저장하는 것이 좋습니다. 그 이유는 파일 시스템이 파일 저장에 최적화되어있는 반면 데이터베이스는 그렇지 않기 때문입니다. 물론 몇 가지 예외가 있지만 (예를 들어 많이 예고 된 차세대 MS 파일 시스템은 SQL 서버 위에 구축되어야 함) 일반적으로 그것이 제 규칙입니다.
성능이 문제이기는하지만 현대의 데이터베이스 설계로 인해 작은 파일의 경우 훨씬 덜 문제가 된 것 같습니다.
성능은 제쳐두고 데이터가 얼마나 밀접하게 결합되어 있는지에 따라 달라집니다. 파일에 데이터베이스의 필드와 밀접한 관련이있는 데이터가 포함되어 있으면 개념적으로 파일에 가깝고 blob에 저장 될 수 있습니다. 잠재적으로 여러 레코드와 관련 될 수있는 정보를 포함하거나 데이터베이스 컨텍스트 외부에서 사용할 수있는 정보가 포함 된 경우 외부에 속합니다. 예를 들어 웹 페이지의 이미지는 링크 된 페이지와는 별도의 요청으로 가져 오므로 외부에 속할 수 있습니다 (특정 디자인 및 보안 고려 사항에 따라 다름).
우리의 타협은, 이것이 최선이라고 약속하지 않습니다. 데이터베이스에 작은 XML 파일을 저장하고 그 밖에 이미지와 기타 파일을 저장하는 것이 었습니다.
성능 문제가 예상되는 중간 에 http://www.freshlogicstudios.com/Products/Folders/에 대해 varbinary로 저장하기로 결정했습니다 . 나는 그것이 얼마나 잘 풀 렸는지에 대해 즐겁게 놀랐다고 말할 수 있습니다.
blob (이미지)을 바이트 배열로 구문 분석 한 다음 적절한 파일 이름으로 디스크에 기록한 다음이를 읽는 오버 헤드로 인해이 작업을 너무 자주 수행하는 것을 막을 수 있습니다. 특히 파일이 다소 크다.