2009-11-30 4 views
3

SQL Server 2008에 많은 양의 이미지 데이터를 저장하는 가장 좋은 방법은 무엇입니까? 5 기가의 저장 공간을 사용하여 약 50,000 개의 이미지를 저장할 예정입니다. 현재 나는 열이있는 단일 테이블을 사용하여이 일을 해요 :이 삽입 것 같아 내 예상 총 용량 중 10 %는 오랜 시간이 소요되기 때문에 나는 걱정많은 수의 이미지를 저장하기위한 SQL Server 테이블 구조

ID: int/PK/identity 
Picture: Image 
Thumbnail: Image 
UploadDate: DateTime 

. 일반적인 이미지는 약 20k - 30k입니다. 이 데이터를 저장하는 더 나은 논리 구조가 있습니까? 또는 데이터로드를 수용하기 위해 클러스터링 또는 다른 IT 솔루션을 조사해야합니까?

+0

왜 각 이미지에 경로를 저장하는 대신 데이터베이스에 이미지를 저장 하시겠습니까? 파일 시스템은 파일을 훌륭하게 처리합니다. – dnagirl

+0

@dnagirl - 호기심, 파일과 메타 데이터 레코드를 어떻게 동기화합니까? 이미지가 자주 변경되는 경우 (버전 관리를 사용한 사진 편집), db 및 파일 백업을 복원하면 고아 데이터가 생성 될 것이라고 생각합니까? – JeffO

+0

20-30K의 전형적인 크기로 테이블에 저장할 수 있습니다. 그러나 사용되지 않는 "IMAGE"유형 대신 VARBINARY (MAX)를 사용하십시오! –

답변

4

Image는 다음 VARBINARY(MAX) 필드를 사용하고 FILESTREAM 옵션을 추가하는 것을 고려한다, DB에 이미지를 저장하기로 결정하면 그것은 SQL 서버 2005 년부터 VARBINARY(MAX)로 대체 된 SQL 서버 2008에서 사용되지 않는 데이터 형식입니다.

스트리밍 데이터에 대한

, 이미지처럼, FILESTREAMthis white paper에 따라, 혼자 VARBINARY(MAX)보다 훨씬 빠른이 스트리밍 성능을 달성하기 위해

Filestream vs. varbinary(max) performance http://i.msdn.microsoft.com/cc949109.image002(en-us).gif

주 당신이 당신의 디자인에 적절한 API를 사용하여 받아야합니다 Win32 handle of the BLOB.FILESTREAM 열 (INSERTS 포함)에 대한 업데이트는 VARBINARY(MAX)보다 느립니다.

4

DB 또는 DB가 아닌 경우, 그 질문입니다.

DB의 이미지로 여기 종교 전쟁을 시작합니다.

의견은 SQL 2000으로 분할되지만 2005 년 이상은 BLOB를 저장하는 데 꽤 괜찮은 일을합니다. MS SQL Server를 저장소로 사용하는 SharePoint 설치 수를 살펴보십시오. 나는 작은 이미지 저장을 위해서만이 길을 갈 것이다.

DB에 넣는다면 결국 이미지를 데이터와 분리해야합니다. 개발자가 SELECT *을 쓸 때 IO 및 인스턴스를 줄이기 위해 이미지와 관련된 데이터를 분리해야합니다. 의지).

SQL 2008에서 FILESTREAM을 확인하십시오.이 내용을위한 것입니다.

  • DB 저장, 백업, 복원, 유지 보수 라이센스가 DB에
  • 저장소에서 얻을 harded됩니다
  • 비싼 : 여기

    당신이 고려할 수 있습니다 파일 시스템 대 DB에 대한 몇 가지 다른 점입니다
  • 디스크
  • 당신은/DB에서 설정 이미지를 얻기 위해 코드를 작성해야합니다 가속화 될 수
  • 디스크에 이상 - 디스크에 필요하지를
+0

db와 파일간에 백업 복원을 어떻게 동기화 하시겠습니까? 자주 변경되고 버전 제어가 필요한 이미지를 관리하는 응용 프로그램에서는이 작업이 어려울 수 있습니다. 파일과 메타 데이터 레코드가 꺼져있는 것처럼 보입니다. – JeffO

+0

기반 모델을 업데이트하기 위해 삽입 기반 모델을 선호합니다. 따라서 사용자가 새 이미지를 가지고 있다면 레코드를 덮어 쓰지 않고 새 행을 추가하고 이전 행에는 do-not-use 플래그를 표시하도록 선택합니다. 필자는 파일과 데이터베이스에 단일 트랜잭션으로 기록해야합니다. 즉, 특정 시점에 항상 동기화됩니다. –

2

새로운 Filestream 기능을 SQL Server 2008에서 확인하십시오. 기본적으로 blob (read : image) 데이터를 모든 읽기 및 쓰기 작업시 SQL 버퍼에 데이터를 읽지 않아도 데이터베이스에 저장할 수 있습니다. SQL Server는 파일 시스템을 사용하여 대형 파일을 SQL 페이지 대신 저장합니다. 이렇게하면 대용량 파일의 읽기 및 쓰기 시간이 훨씬 빨라질 수 있습니다. 무엇보다이 모든 것이 후드에서 발생하기 때문에 기존의 저장된 procs를 파일 스트림 열을 사용하여 변경하지 않아도됩니다. 코드 샘플 및 성능 프로파일 링에 대해서는 here을 참조하십시오.

관련 문제