[sql-server] SQL Server에 이미지를 저장 하시겠습니까?

작은 데모 사이트를 만들었고 SQL 서버의 이미지 열 내에 이미지를 저장하고 있습니다. 내가 가진 몇 가지 질문은 …

  • 이것은 나쁜 생각입니까?

  • 사이트가 커지면 내 사이트의 성능에 영향을 줍니까?

대안은 이미지를 디스크에 저장하고 이미지에 대한 참조 만 데이터베이스에 저장하는 것입니다. 이것은 많은 사람들이 겪은 일반적인 딜레마 여야합니다. 나는 충고를 환영하며 실제로 가능하다면 실수를 덜게되어 기쁘다.



답변

Microsoft Research의 To Blob 또는 Not To Blob 이라는 훌륭한 문서가 있습니다.

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

  • 사진이나 문서의 크기가 일반적으로 256KB 미만인 경우 데이터베이스 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 소개를 확인하고 함께 사용해보십시오!


답변

나는이 딜레마에 빠졌고 의견을 찾기 위해 Google에서 상당히 연구했습니다. 내가 찾은 것은 실제로 많은 사람들이 더 큰 이미지를 위해 디스크에 이미지를 더 잘 저장한다는 것을 알았으며 mySQL을 사용하면 특히 PHP와 같은 언어에서 더 쉽게 액세스 할 수 있습니다.

비슷한 질문을 찾았습니다

작은 PNG 이미지 저장을위한 MySQL BLOB vs 파일?

내 마지막 평결은 프로필 사진과 같은 것, 사용자 당 필요한 작은 정사각형 이미지의 경우 mySQL은 hdd에 많은 엄지 손가락을 저장하는 것보다 낫지 만 사진 앨범 및 폴더의 경우 폴더 / 이미지 파일이 더 좋습니다.

그것이 도움이되기를 바랍니다.


답변

이미지를 디렉토리에 저장 한 다음 이미지 파일에 대한 참조를 데이터베이스에 저장하는 것을 선호합니다.

그러나 이미지를 데이터베이스에 저장하는 경우 이미지 열이 별도의 파일에 있도록 데이터베이스를 분할해야합니다.

파일 그룹 사용에 대한 자세한 내용은 http://msdn.microsoft.com/en-us/library/ms179316.aspx를 참조 하십시오 .


답변

웹 서버의 카탈로그가 아닌 데이터베이스에 그림을 저장하는 것이 좋은 이유는 무엇입니까?

클라이언트가 수년간 사용했던 서버의 폴더에 많은 그림이 저장된 응용 프로그램을 만들었습니다.

이제 그들은 당신에게 온다. 서버가 손상되었으므로 새 서버에서 복원해야합니다. 더 이상 이전 서버에 액세스 할 수 없습니다. 그들이 가진 유일한 백업은 데이터베이스 백업입니다.

물론 원본이 있으며이를 새 서버에 간단하게 배포하고 SqlServer를 설치하고 데이터베이스를 복원 할 수 있습니다. 그러나 이제 모든 사진이 사라졌습니다.

SqlServer에 그림을 저장 한 경우 모든 것이 이전과 같이 작동합니다.

그냥 내 2 센트.


답변

SQL Server에 이미지를 저장할 때 ‘image’datatype을 사용하지 않으면 MS에 따라 새 버전의 SQL Server에서 단계적으로 제거됩니다. 사용 VARBINARY (최대) 대신

https://msdn.microsoft.com/en-us/library/ms187993.aspx


답변

다른 옵션은 2012 년에 파일 테이블이라는 https://msdn.microsoft.com/en-us/library/ff929144.aspx입니다.


답변

성능 문제는 유효하지만 실제로 데이터베이스에 이미지를 저장하지 않아야하는 실제 이유는 데이터베이스 관리 이유입니다. 데이터베이스는 매우 빠르게 성장하고 데이터베이스는 단순한 파일 스토리지보다 훨씬 비쌉니다. 데이터베이스 백업 및 복원은 파일 백업 복원보다 훨씬 비싸고 시간이 많이 걸립니다. 한 번에 이미지가있는 데이터베이스보다 작은 데이터베이스를 훨씬 더 빠르게 복원 할 수 있습니다. Azure에서 1TB의 파일 저장소를 1TB 데이터베이스와 비교하면 비용에 큰 차이가 있습니다.