2010-11-25 4 views
0

파일을 저장하는 것이 더 나은 방법입니까? 파일을 데이터베이스에 직접 저장하거나 해당 파일의 위치에 직접 저장 하시겠습니까?데이터베이스에 파일을 저장해야합니까, 아니면 해당 파일의 위치 만 저장해야합니까?

+0

어떤 데이터베이스를 사용하고 있습니까? –

+0

놀랍습니다.이 질문은 여전히 ​​공개 토론/토론에 있습니다. 그리고 그것은 중복이 아닙니다. 음 ... –

답변

2

답변을 너무 빨리 받으면 더 많은 잠재 고객의 답변을 얻을 수 없습니다.

에 따라 다릅니다. 몇 가지 사항을 고려해야합니다.

  1. 당신이 적절하게 모양을 처리하지 않음을 의미하는 미키 마우스 프리웨어 데이터베이스가있는 경우

    , (모든 SELECT의 모양을 읽을은 별도의 영역에서 모양을 저장하지 않습니다) 외부 파일을 보관.

  2. 엔터프라이즈 데이터베이스가있는 경우 데이터베이스 안의 모양을 유지하는 데 아무런 문제가 없습니다. 이것들은 모든 SELECT에서 BLOB를 읽지 않습니다. 블롭을 얻기위한 추가 읽기는 "성능" "문제"가 아닙니다.

  3. 대부분의 데이터베이스는 8k 또는 16k가 아닌 2k 페이지입니다. 귀하의 페이지 크기가 더 큰 경우, 마지막 페이지의 사용하지 않은 부분, blob 당 약간의 낭비가있을 것입니다.

  4. 데이터베이스에 얼룩을 유지하는 단점은 데이터베이스 백업이 훨씬 커진다는 것입니다. 일부 엔터프라이즈 데이터베이스는 페이지가 변경되지 않았 음을 확인하고 증분 백업에서 제외합니다. 다른 것들은 증분이 없다.

  5. 데이터베이스에 얼룩을 유지하는 이점은 데이터 및 참조 무결성입니다. 행을 얼룩과 동기화하지 못하게하는 문제는 없습니다.

    • 작년에 데이터베이스에 130GB의 데이터가 있었고 데이터베이스 외부에 700GB의 데이터가 저장되어있었습니다. 10 년 동안의 문제가 있었을 때, 그들은 총알을 물리 치고 문서를 db로 옮겼습니다. 매우 많은 중복과 잘못된 참조가 있었기 때문에 참조가 절대적으로 정확하다고 가정 되었기 때문에 단순한 작업 (길지만 단순)으로 간주되었던 것이 무엇인지 짐작할 수 있습니다. 그 결과 데이터베이스는 630GB 였고, 100GB의 속이있었습니다. 2K 페이지 크기. 댓글

      1. 슬래시 또는 백 슬래시
        쉬운에

응답. 데이터베이스에서 슬래시 만 저장하십시오. 대상 시스템을 식별하는 방법이 필요하고 IsWindoze 표시기가 필요합니다. Filename을 찾은 레벨이 아닌 테이블 계층 구조에서 상위 레벨이어야합니다. 표시기가 설정된 경우 Filename 열을보고하거나 표시 할 때마다 슬래시를 백 슬래시로 변경하십시오.
DriveLetter과 유닉스에는없는 콜론에서 비슷한 문제가 발생합니다.

+0

감사합니다 형제, 나는 severals를 읽은 후에 대답을 받아 들일 것이 좋습니다. –

+0

다른 종류의 OS에있을 수있는 시스템에 파일을 저장해야하며, 파일의 물리적 경로에 대한 슬래시 (/) 또는 백 슬래시 (/)가 있습니다. –

+1

@ 추석 : 감사. 내 답변에 응답을 추가했습니다. – PerformanceDBA

4

데이터베이스에 파일을 저장하지 마십시오. 대부분은 잘 처리하지 못합니다.

+1

그냥 추가하는 것은 일반적으로 나쁜 생각입니다. 원격으로 실행 가능할 때가되면 기록이 메모리에 있음을 보장 할 수있는 데이터베이스를 다루는 것입니다. 당신이 그것을 필요로 할 때, 거기에서 봉사했습니다. 그러나 거의 모든 상황에서 파일 시스템이 더 나은 환경입니다. – Arantor

+0

파일 시스템이 수년간 이것에 아주 좋은 동안 나는 10MB의 DB보다 큰 파일을 저장하기가 어렵습니다. –

+0

아직도 MySQL의 BLOB 및 CLOB가 무엇인지 모르겠습니까? –

0

선호하는 방법은 파일을 파일 시스템에 저장하고 파일 위치를 데이터베이스에 저장하는 것입니다. 이것은 데이터베이스가 물리적으로 디스크에 공간을 할당하는 방법 (일반적으로 8k 또는 16k 청크)과 관련이 있습니다. 거기에 대용량 파일을 삭제하면 데이터베이스가 다른 메커니즘을 사용하여 파일을 저장합니다 (SQL Server는이 파일을 row overflow data이라고 부름). 일반적으로 이러한 종류의 페이지는 일반 테이블에서 제외되므로 행에 대한 모든 논리적 읽기는 디스크에서 두 개의 물리적 읽기를 발생시킵니다. 말할 필요도없이 이것은 성능에 좋지 않습니다.

1

늦게 답변 : 엔진에 따라 다릅니다.

  • 1990 년부터 SQL Server 용으로 2K의 페이지 크기가 사용되지 않았습니다. 오라클은 기본적으로 8K, SQL Server는 8K입니다. Sybase AFAIK만이 지난 세기에 있습니다. 오라클은

  • SQL Server와 오라클의 서비스 디스크와

내가 '백업 압축에 BFILE

와 이상 할 것처럼

  • SQL Server는, 두 세계의 최고를 결합한 FILESTREAM을 제공합니다 적어도 PostgresSQL은 비슷한 기능을 제공합니다.

    참고 : 이것은 주로 PerformanceDBA의 FUD에 대한 대안을 제공하는 것입니다.

  • 관련 문제