[sql-server] SQL Server에 파일 저장

내가 아는 오래된 질문이지만 SQL Server 2012에서는 마침내 데이터베이스에 파일을 저장하는 것이 괜찮습니까, 아니면 데이터베이스에서 파일에 대한 참조만으로 파일 시스템에 실제로 보관해야합니까?

요즘 데이터베이스에 저장하는 것이 허용되는 것으로 간주되면 가장 효과적인 방법은 무엇입니까?

암호화를 적용 할 계획이므로 처리 속도가 매우 빠르지 않다는 점에 감사드립니다.



답변

Microsoft Research에서 To Blob 또는 Not To Blob 이라는 좋은 논문이 있습니다.

수많은 성능 테스트 및 분석 후 결론은 다음과 같습니다.

  • 사진이나 문서의 크기가 일반적으로 256K 미만인 경우 데이터베이스 VARBINARY 열에 저장하는 것이 더 효율적입니다.

  • 사진이나 문서의 크기가 일반적으로 1MB를 초과하는 경우 파일 시스템에 저장하는 것이 더 효율적입니다 (SQL Server 2008의 FILESTREAM 속성을 사용하면 여전히 트랜잭션 제어 및 데이터베이스의 일부).

  • 이 둘 사이에는 사용 용도에 따라 약간의 토스 업이 있습니다.

사진을 SQL Server 테이블에 저장하기로 결정한 경우 해당 사진을 저장하기 위해 별도의 테이블을 사용하는 것이 좋습니다. 직원 사진을 직원 테이블에 저장하지 말고 별도의 테이블에 보관하십시오. 이렇게하면 쿼리의 일부로 직원 사진을 항상 선택할 필요가 없다는 가정하에 직원 테이블을 간결하고 비열하며 매우 효율적으로 유지할 수 있습니다.

파일 그룹의 경우 파일 및 파일 그룹 아키텍처 에서 소개를 확인하십시오. 기본적으로 처음부터 큰 데이터 구조를위한 별도의 파일 그룹으로 데이터베이스를 만들거나 나중에 추가 파일 그룹을 추가합니다. “LARGE_DATA”라고 부르겠습니다.

이제 VARCHAR (MAX) 또는 VARBINARY (MAX) 열을 저장해야하는 새 테이블을 만들 때마다 대용량 데이터에 대해이 파일 그룹을 지정할 수 있습니다.

 CREATE TABLE dbo.YourTable
     (....... define the fields here ......)
     ON Data                   -- the basic "Data" filegroup for the regular data
     TEXTIMAGE_ON LARGE_DATA   -- the filegroup for large chunks of data

파일 그룹에 대한 MSDN 소개를 확인하고 사용해보십시오!


답변

없다 여전히 간단한 대답은. 시나리오에 따라 다릅니다. MSDN에는 결정에 도움이되는 설명서가 있습니다.

여기에서 다루는 다른 옵션이 있습니다. 파일 시스템에 직접 저장하거나 BLOB에 저장하는 대신 SQL Server 2012에서 FileStream 또는 파일 테이블을 사용할 수 있습니다. 파일 테이블의 장점은 당연한 것 같습니다 (하지만 개인적으로 직접 경험 한 경험은 없습니다. .)

이 기사는 확실히 읽을 가치가 있습니다.


답변

FILESTREAM에서 읽을 수 있습니다 . 다음은 결정에 도움이되는 문서의 정보입니다.

다음 조건에 해당하는 경우 FILESTREAM 사용을 고려해야합니다.

  • 저장되는 개체는 평균적으로 1MB보다 큽니다.
  • 빠른 읽기 액세스가 중요합니다.
  • 응용 프로그램 논리에 중간 계층을 사용하는 응용 프로그램을 개발하고 있습니다.

더 작은 개체의 경우 데이터베이스에 varbinary (max) BLOB를 저장하면 스트리밍 성능이 향상되는 경우가 많습니다.


답변