2010-02-04 5 views
4

내 웹 사이트에 업로드 된 문서에 관한 디자인 결정을 내 렸습니다. 어딘가에 파일 서버에 저장하거나 데이터베이스 (MSSQL 2005)에 BLOB로 저장할 수 있습니다. 설계 결정에 차이가 나는 경우이 문서는 기밀로 유지되며 일정 수준의 보호가 있어야합니다. 파일 서버 또는 DB에 문서를 저장할 때 고려해야 할 사항은 무엇입니까?

내가 생각 한 고려 사항

은 다음과 같습니다 나는 합리적인 의미 해결할 수없는 파일 서버에 저장

  1. , HUUUUUUUGE의 단일 디렉토리에 버려진 파일의 숫자 모두, 따라서 느린 액세스 할 수 있습니다 디렉토리 트리 구조에 대한 정의
  2. OTOH, 필자는 파일 서버가 DB보다 압축을 다소 잘 처리 할 수 ​​있다고 추측합니다 ... 아니면 틀린가요?
  3. 필자의 본능은 DB의 보안 성은 파일 서버의 보안보다 강력하다고 말하지만, 필연적인지는 확실하지 않습니다.
  4. DB에 테라 바이트 급 BLOB가 있으면 성능에 어떤 영향을 미치는지 모릅니다.

여기에 몇 가지 권장 사항을 알려 주시면 감사하겠습니다. 감사!

+1

대부분의 파일 시스템은 하나의 디렉토리에있는 파일의 수에 제한이, 이것 좀 봐. 한계에 부딪치지 않도록 서브 디렉토리를 동적으로 빌드해야 할 수도 있습니다 ... http://sk-leo.com/is_there_a_limit_to_what_a_single_folder_or_directory_can_hold.html –

답변

7

SQL Server 2005에서는 VARBINARY(MAX)을 사용하여 파일을 데이터베이스 테이블에 저장하거나 외부에 보관할 수 있습니다.

데이터베이스 외부에 두는 명백한 단점은 데이터베이스가 실제로 어떤 일이 발생하는지 제어 할 수 없다는 것입니다. 그들은

SQL 서버 2008 당신이 데이터베이스 테이블 외부 파일을 떠날 수 있습니다 VARBINARY(MAX) 유형에 FILESTERAM 속성을 도입,하지만 여전히 데이터베이스의 트랜잭션 제어 ..... 삭제, 이동, 이름 변경 될 수 있습니다 - 예. 디스크에서 파일을 삭제할 수 없으며 파일은 데이터베이스의 필수 부분이므로 복사되고 백업됩니다. 필요하다면 좋겠지 만 거대한 백업을 만들 수 있습니다! :-)

SQL Server 2008 출시는 데이터베이스에 직접 물건을 저장할시기와 FILESTREAM을 사용해야하는 시점에 대한 "우수 사례"를 제시했습니다. 이들은 다음과 같습니다

  • 파일의 크기는 일반적으로 적은 256 이상 KB 인 경우, 데이터베이스 테이블은 파일 크기가 1메가바이트 이상 전형적으로, 또는 2GB 이상 될 수 있다면 가장 좋은 방법
  • 입니다 크기는 다음 FILESTREAM (또는 귀하의 경우 : 보통 오래된 파일 시스템)에 부정적인 쿼리의 성능에 영향을하지 않기 위해, 그것은 종종있어,

또한 두 마진간에 파일을위한 최선의 선택

  • 없이 추천입니다 대용량 파일을 별도의 테이블에 저장하는 것이 좋습니다. 커다란 얼룩을 쿼리하는 일반 테이블에 포함 시키십시오. 실제로는 메가 바이트의 문서 나 이미지가 필요한 경우에만 쿼리 할 수있는 별도의 테이블을 만드십시오.

    그래서 어디에서 시작해야할지 생각해 볼 수 있습니다!

  • +0

    + 답 신용 : 다른 아주 좋은 답변 중 가장 균형 잡힌 답변이었습니다. 가장 큰 그림과 함께. 감사! –

    +0

    +1, FILESYSTEM이 아마도 최선의 해결책 일 것입니다. 그러나 언급되지 않은 다른 대안 (SQL 2005에서도)은 'IMAGE' 데이터 유형의 칼럼이며 본질적으로 varbinary와 같은 크기는 아닙니다. (실제로 SQL은 내부적으로 다른 위치에 저장된 원시 이미지 데이터에 "포인터"만 저장합니다.) – AviD

    +0

    P. 내가 사용 해본 또 다른 옵션은 API를 통해 Sharepoint를 파일 저장소로 사용하는 것입니다. 이렇게하면 버전 관리, 전체 텍스트 파일 검색, 암호화 등을 투명하게 얻을 수 있습니다 (필요한 경우). – AviD

    1

    인기있는 주제 뒤에 "많이 달라집니다"가 있습니다. 문서가 민감하고 비밀 스럽다고 말했기 때문에 팔목에서 데이터베이스에 저장하는 것이 좋습니다.다음은 몇 가지 이유입니다.

    • 잠재적으로 향상된 보안. 데이터베이스보다는 파일 시스템을 해킹하는 것이 더 쉽습니다.
    • 더 나은 볼륨 컨트롤. 한 폴더에 수천 개의 파일이있는 운영 체제에서는 데이터베이스가 깜박임없이 한 테이블에서 수백만 행을 차지할 수 있습니다.
    • 더 나은 검색 및 검색. 데이터를로드 할 때 열을 범주화하거나 전체 텍스트 인덱싱을 시도하여 실제 문서를 스캔하십시오.
    • 백업이 더 효율적일 수 있습니다. 백업 계획에 다른 데이터베이스를 추가하기 만하면됩니다 (물론 공간 세부 정보를 작성한 후에는 덮어 씁니다). 그리고 이러한 백업 파일은 중요한 문서를 읽으려는 사람에게 난해한 또 다른 계층입니다.
    • SQL Server 2008에는 여기에 도움이되는 데이터 압축 옵션이 있습니다. 그, 또는 응용 프로그램이 그것을합니까?

    SQL Server 2008에는 여기에 도움이 될 수있는 파일 스트림 데이터 형식이 있지만 상황에 대한 권장 사항을 제공하기에는 익숙하지 않습니다.

    3

    파일 시스템 솔루션을 고려해보십시오. 그 이유는 다음과 같습니다

    • 빠르고 쉽게 배포 할 OS를 활용할 수
    • 당신이 정기적으로 콘솔 기반 도구를 사용할 수 있다는 것을 의미 (디버깅의 경우 귀중한) 파일에 대한 더 나은 액세스 할 수 있습니다 예를 들어 분산 파일 시스템을 사용하는로드는 하드웨어 RAID 등을 통해 중복을 추가합니다.
    • 사용자는 OS 액세스 제어 목록을 이용하여 권한을 적용 할 수 있습니다.
    • 당신이 당신의 디렉토리에있는 항목의 많은 양에 대해 걱정하는 경우 데이터베이스

    방해하지 않는, 당신은 항상 분기 스키마를 만들 수 있습니다. 예를 들면 : 당신은 단지 하나에 파일을 덤핑을 시작하기 전에

    filename : hello.txt 
    filename md5: 2e54144ba487ae25d03a3caba233da71 
    final filesystem position: /path/2e/54/hello.txt