programing

SQL Server에 이미지를 저장하시겠습니까?

closeapi 2023. 6. 30. 22:21
반응형

SQL Server에 이미지를 저장하시겠습니까?

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

  • 나쁜 생각인가요?

  • 사이트가 확장되면 사이트 성능에 영향을 미칩니까?

또는 디스크에 이미지를 저장하고 이미지에 대한 참조만 데이터베이스에 저장하는 방법이 있습니다.이것은 많은 사람들이 겪었던 공통된 딜레마임에 틀림없습니다.저는 조언을 환영하며, 할 수 있다면 실수를 덜 할 수 있다면 정말 기쁠 것입니다.

마이크로소프트 리서치사의 아주 좋은 논문이 있습니다. To Blob or 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 인트로를 확인하고 가지고 놀아보세요!

웹 서버의 카탈로그가 아닌 데이터베이스에 사진을 저장하는 것이 좋은 이유

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

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

물론 소스가 있고 새 서버에 배포하고, SqlServer를 설치하고, 데이터베이스를 복원할 수 있습니다.하지만 이제 모든 사진이 사라졌습니다.

사진을 SqlServer에 저장하면 모든 것이 이전과 같이 작동합니다.

내 2센트야.

저는 이 딜레마에 빠진 적이 있고, 구글에서 의견을 꽤 많이 조사했습니다.제가 발견한 것은 실제로 많은 사람들이 더 큰 이미지를 위해 이미지를 디스크에 저장하는 것을 더 잘 보는 반면, mySQL은 특히 PHP와 같은 언어에서 더 쉽게 액세스할 수 있다는 것입니다.

비슷한 질문을 발견했습니다.

MySQL BLOB 대 작은 PNG 이미지 저장용 파일?

제 최종 판단은 프로필 사진, 사용자당 필요한 작은 사각형 이미지의 경우 mySQL이 엄지손가락 묶음을 HDD에 저장하는 것보다 낫다는 것이었고, 사진 앨범과 같은 경우에는 폴더/이미지 파일이 더 낫다는 것이었습니다.

이미지를 디렉터리에 저장한 다음 이미지 파일에 대한 참조를 데이터베이스에 저장하고 싶습니다.

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

파일 그룹 사용에 대한 자세한 내용은 http://msdn.microsoft.com/en-us/library/ms179316.aspx 에서 확인할 수 있습니다.

SQL Server에 이미지를 저장할 때는 'image' 데이터 유형을 사용하지 마십시오. MS에 따르면 SQL Server의 새 버전에서 단계적으로 삭제됩니다.대신 varbinary(최대) 사용

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

성능 문제는 유효하지만 실제로 이미지를 데이터베이스에 저장하지 않는 것은 데이터베이스 관리를 위한 것입니다.데이터베이스는 매우 빠르게 증가할 것이며 데이터베이스는 단순한 파일 스토리지보다 훨씬 더 많은 비용이 듭니다.데이터베이스 백업 및 복원은 파일 백업 복원보다 훨씬 더 많은 비용과 시간이 소요됩니다.필요한 경우 이미지로 가득 찬 데이터베이스보다 더 작은 데이터베이스를 훨씬 더 빠르게 복원할 수 있습니다.Azure의 1TB 파일 스토리지를 1TB 데이터베이스와 비교하면 엄청난 비용 차이를 알 수 있습니다.

2012년에 File tables(파일 테이블)라는 다른 옵션이 출시되었습니다.

제 경험상, 다른 위치에 저장된 이미지의 URL에 저장하는 것이 간단한 프로젝트를 위한 가장 좋은 방법입니다.

언급URL : https://stackoverflow.com/questions/5613898/storing-images-in-sql-server

반응형