2008-12-02 4 views
20

SQL Server 2008은 전자 상거래 웹 사이트의 이미지 저장소로 사용할 수 있습니까? 다양한 크기와 각도의 제품 이미지를 저장하는 데 사용됩니다. 웹 서버는 이러한 이미지를 출력하여 클러스터 된 ID로 테이블을 읽습니다. 총 이미지 크기는 약 10GB이지만 확장 할 필요가 있습니다. 파일 시스템을 사용하는 것보다 많은 이점을 볼 수 있지만 O (1) 조회가없는 SQL 서버는 사이트에 많은 트래픽이있는 경우 최상의 솔루션이 아닌지 걱정됩니다. 병목 일까? 어떤 생각이나 다른 옵션은 무엇입니까?SQL Server를 이미지 저장소로 사용

+0

얼마나 큰 Kb의 이미지가 있습니까? 가장 큰 1 %는 얼마나 큰가요? 이미지의 잠재적 크기에 상한선이 있습니까? – Anthony

답변

27

10Gb는 엄청난 양의 데이터가 아니므로 데이터베이스를 저장하고 큰 문제는 없지만 파일 시스템을 사용하는 것이 현명한 성능을 발휘할 수 있으며 안전 관리가 더 좋습니다 DB (백업 및 일관성)를 사용합니다.

SQL Server 2008의

The FILESTREAM Attribute

, 당신이 VARBINARY 컬럼에 FILESTREAM 특성을 적용하고, SQL 서버 수 있습니다 행복하게

는 SQL 서버 2008과 함께, 당신은 당신의 케이크를 가질 수 있도록한다 해당 열의 데이터를 로컬 NTFS 파일 시스템에 저장합니다. 파일 시스템에 데이터를 저장하면 다음과 같은 두 가지 주요 이점이 있습니다.

  • 성능은 파일 시스템의 스트리밍 성능과 일치합니다.
  • BLOB 크기는 파일 시스템 볼륨 크기로만 제한됩니다.

그러나 열은 SQL Server의 다른 BLOB 열과 마찬가지로 관리 될 수 있으므로 관리자는 SQL Server의 관리 기능 및 보안 기능을 사용하여 BLOB 데이터 관리를 관계형 데이터베이스의 나머지 데이터와 통합 할 수 있습니다 파일 시스템 데이터를 별도로 관리 할 필요가 없습니다.

SQL Server에서 FILESTREAM 열로 데이터를 정의하면 데이터베이스의 관계형 데이터와 물리적으로 파일 시스템에 저장된 비정형 데이터 간의 데이터 수준 일관성을 유지할 수 있습니다. FILESTREAM 열은 BLOB 열과 완전히 동일하게 작동합니다. 즉, 백업 및 복원, SQL Server 보안 모델과의 완전한 통합 및 전체 트랜잭션 지원과 같은 유지 관리 작업의 전체 통합을 의미합니다.

응용 프로그램 개발자는 두 가지 프로그래밍 모델 중 하나를 통해 FILESTREAM 데이터를 사용할 수 있습니다. Transact-SQL을 사용하여 표준 BLOB 열과 마찬가지로 데이터에 액세스하고 조작 할 수 있습니다. 또는 Transact-SQL 트랜잭션 의미와 함께 Win32 스트리밍 API를 사용하여 일관성을 보장 할 수 있습니다. 즉, FILESTREAM에 대한 표준 Win32 읽기/쓰기 호출을 사용할 수 있습니다. BLOB는 파일 시스템의 파일과 상호 작용할 때와 동일합니다.

SQL Server 2008에서 FILESTREAM 열은 로컬 디스크 볼륨에만 데이터를 저장할 수 있으며 투명 암호화 및 테이블 반환 매개 변수 같은 일부 기능은 FILESTREAM 열에 대해 지원되지 않습니다. 또한 로그 전달이 지원 되기는하지만 데이터베이스 스냅 숏이나 데이터베이스 미러링 세션에서 FILESTREAM 열을 포함하는 테이블을 사용할 수 없습니다.

0

전자 상거래 웹 사이트와 같은 경우, 이미지가 데이터베이스의 BLOB 저장소에 저장 될 가능성이 높습니다. 조숙 한 최적화에 관여하고 싶지는 않지만 내 이미지가 내 데이터와 함께 쉽게 구성 될 수 있다는 이점과 이동성이 매우 뛰어나므로 전자 상거래와 같은 이점이 있습니다.

0

이미지의 색인이 생성되면 조회가 큰 문제가되지 않습니다. 확실하지는 않지만 파일 시스템에 대한 조회가 O (1)이고, O (n)과 같습니다 (파일 시스템에 의해 색인이 생성 된 것으로 생각하지 않습니다).

이 설정에서 내가 걱정하는 점은 데이터베이스의 크기이지만 올바르게 관리하면 큰 문제가되지 않을 것이고 큰 장점은 데이터베이스 (데이터베이스)를 백업하고 걱정하지 않아도된다는 것입니다 디스크상의 파일들에 관해서.

0

일반적으로 좋은 해결책은 이미지를 파일 시스템에 저장하고 메타 데이터 (파일 이름, 크기, 마지막 업데이트 시간, 기타 필요한 것)를 데이터베이스에 저장하는 것입니다.

이렇게 말한 결과,이 문제에 대한 "올바른"해결책은 없습니다.

+1

SQL 2008까지는 "올바른"해결책이 없습니다. 다른 답변보기 - SQL 2008에는 FILESTREAM이라는 새로운 구조가 있습니다. – Anthony

3

체크 아웃 당신이 찾고있는 정확하게 MS 리서치에서이 백서 (http://research.microsoft.com/research/pubs/view.aspx?msr_tr_id=MSR-TR-2006-45)

그들은 세부 사항. 짧은 버전은 파일 시스템에 데이터를 저장하는 것보다 1MB를 초과하는 파일 크기가 성능을 저하시키기 시작한다는 것입니다.

+1

이 백서는 2006 년 6 월에 마지막으로 업데이트되어 SQL Server 2005에만 적용됩니다. –

1

조회에 대한 O(log n)이 문제가 될 것으로 생각됩니다. 10GB의 이미지가 있다고 가정 해보십시오. 평균 이미지 크기가 50KB라고 가정하면 이미지는 200,000 장입니다. 200K 행의 테이블에서 색인 된 룩업을 수행하는 것은 문제가되지 않습니다. 실제로 디스크에서 이미지를 읽고 앱과 클라이언트로 전송하는 데 필요한 시간과 비교하면 작은 편입니다.

데이터베이스의 이미지를 데이터베이스에 저장하는 것과 데이터베이스의 경로를 파일 시스템의 파일에 저장하는 것의 일반적인 장단점을 고려해 볼 가치가 있습니다. 예를 들어 행이 삭제 될 때 데이터베이스 순종 트랜잭션 격리에

  • 이미지는 자동 물론 이미지 파일 만 경로 이름을 저장하는 데이터베이스보다 큰 등, 이미지 10GB의와
  • 데이터베이스를 삭제합니다. 백업 속도 및 기타 요소가 적절합니다.
  • 응용 프로그램을 통해 데이터베이스에서 이미지를 제공 할 때 응답에 MIME 헤더를 설정해야합니다.
  • 파일 시스템의 이미지는 웹 서버 (예 : Apache mod_mmap)에서보다 쉽게 ​​캐싱되거나 lighttpd와 같은 더 희박한 웹 서버에서 제공 될 수 있습니다. 이것은 실제로 실제로 큰 이익입니다.
+0

마지막 요점은 실제로 매우 중요합니다. S3와 같은 오프 사이트 저장소 또는 CDN으로 이미지를 이동하는 상황을 고려하십시오. – Min

+0

http://nginx.net/에서 도움이되는 또 다른 도구를 확인하십시오. 그것은 응답 측면에서 아파치를위한 일종의 프록시입니다. 흥미 롭 군! –

관련 문제