문서 저장을 위한 권장 위치 - 데이터베이스입니까, 아니면 다른 곳입니까?

StackOverflow https://stackoverflow.com/questions/512262

문제

배경:

우리는 오래 전에 구현된 사내 문서 보관 시스템을 보유하고 있습니다.어떤 이유로든 문서 저장 메커니즘으로 데이터베이스를 사용하는 것이 선택되었습니다.

내 질문은 이것입니다:

문서를 저장하는 가장 좋은 방법은 무엇입니까?대안은 무엇입니까?장점과 단점은 무엇입니까? 답변은 특정 기술이나 플랫폼일 필요는 없으며 일반적인 모범 사례 질문에 가깝습니다.

내 생각:

데이터베이스는 문서 저장용이 아닙니다.파일 시스템이나 타사 문서 관리 시스템을 사용하는 것이 더 나을 수 있습니다.데이터베이스의 문서 저장 비용은 비쌉니다.작업이 느립니다.이것이 논리적 가정입니까?아마도 이것이 최선일지도 모르지만 내 생각에는 더 나은 대안이 있습니다.Oracle BFILE(NAS 또는 SAN의 문서에 대한 링크)이 BLOB/CLOB보다 나을 수 있습니까?

세부:

  • 문서의 종류는 다양합니다(pdf, word, xml)
  • 중간 계층 코드는 .net 2.0 / c#으로 작성되었습니다.
  • 문서는 압축을 통해 BLOB의 Oracle 10g 데이터베이스에 저장됩니다(NAS 스토리지).
  • 파일 크기의 분노
  • 문서 수가 급격히 증가하고 있으며 둔화될 기미가 없습니다.
  • 인서트는 일반적으로 피크 기간 동안 시간당 1000달러에 달합니다.
  • 검색은 일반적으로 피크 기간 동안 시간당 수천 건에 이릅니다.
  • NAS 스토리지 및 SAN 스토리지 사용 가능

업데이트(아래 질문에서):

  • 내 배경은 개발이야
  • 데이터베이스의 파일 옆에 저장된 파일에 대한 관련 메타데이터가 있습니다.
도움이 되었습니까?

해결책

데이터베이스에 문서를 저장하는 유일한 제한은 기술입니다.

관계 데이터베이스 기업의 미션 크리티컬 데이터의 지속적인 저장소입니다. 해당 기능을 수행 할 수있는 방법은 데이터베이스에서 데이터베이스 및 시스템마다 다릅니다. 하지만 이상적으로 그만큼 a의 속성 관계형 데이터베이스 ~이다 예정된 그것을 모두의 상점으로 만들기 위해 엔터프라이즈 데이터. 파일 시스템, 개정 컨트롤러 시스템 및 기타 로컬 스토어 스토리지 시스템에는 특정 이점이있을 수 있지만 엔터프라이즈 데이터 스토리지 용으로 설계되지 않았습니다.

저장중인 문서가 엔터프라이즈 데이터로 자격이있는 경우 (엔터프라이즈를 통해 지속적으로 사용되는 경우) 데이터베이스에 보관하는 것이 논리적입니다. 데이터베이스에 저장하는 데 문제가있는 경우 DBA가 더 나은 솔루션을 찾을 수 있습니다. 성능의 이유로 데이터베이스 밖으로 이동해야 할 수도 있지만 최고의 실습상의 이유로 데이터베이스에서 옮겨야한다고 생각하지 않습니다.

물론 문서가 엔터프라이즈 데이터가 아닌 경우 하나의 응용 프로그램에만 사용되는 경우 데이터베이스에서 옮기는 것도 의미가 있습니다.

다른 팁

내 경험을 바탕으로 데이터베이스에 보관한다고 말합니다. 우리는 두 시스템을이 작업으로 옮겼습니다.

데이터베이스에 넣는 것은 다음을 의미합니다.

  • 여러 서버에서도 쉽게 액세스 할 수 있습니다.
  • 자동으로 백업됩니다 (그렇게하기 위해 별도의 작업이없는 대신)
  • 공간에 대해 걱정할 필요가 없습니다 (사람들은 DB가 디스크를 과도하게 채우는 것을 막기 때문에 문서가 저장되는 위치를 모니터링하는 것을 잊을 수 있습니다).
  • 복잡한 디렉토리 체계가 필요하지 않습니다

데이터베이스에서 문서가있었습니다. 많은 문서에 문제가됩니다. Linux의 일반 디렉토리는 하나의 블록이며 일반적으로 4K입니다. 우리는 디렉토리를 가지고있었습니다 58MB 파일이 너무 많아서 (평평한 디렉토리, 계층 구조는 없었습니다). 그건 있었다 그 많은 간접 블록. 삭제하는 데 1 시간 이상이 걸렸습니다. 디렉토리에서 파일 수를 얻는 데 몇 분이 걸렸습니다. 끔찍했습니다. 이것은 ext3에 있습니다.

필요한 파일 시스템을 사용하면 다음과 같습니다.

  • 별도의 백업 메커니즘 (DB 백업에서)
  • 물건을 동기화하려면 (따라서 파일이 없으면 DB에 레코드가 존재하지 않음)
  • 스토리지를위한 계층 구조 (위에 나열된 문제를 방지하기 위해 디렉토리가 10,000 파일로 끝나지 않음)
  • 클러스터가 필요한 경우 다른 서버에서 볼 수있는 방법 (아마도 NFS 또는 그와 같은 일부).

정말 고통입니다. 사소한 수의 문서에 대해서는 내가 본 것에 기초하여 파일 시스템에 대해 권장합니다.

나는 선호한다 파일 시스템에 문서를 저장하십시오 그리고 데이터베이스에 파일 및 관련 파일 메타 데이터에 대한 링크 저장.

대안보다 더 편리하고 유지 관리가 더 쉽고 저렴한 것으로 입증되었습니다.

대부분의 엔터프라이즈 클래스 문서 관리 시스템은 객체 파일을 데이터베이스에 저장하지 않습니다. 당신 때문에 ~할 수 있다 당신을 의미하지 않습니다 ~해야 한다. 확장 성과 성능이 중요하고 큰 문서 세트가있는 경우 DB에 객체를 저장하는 데 매우주의해야합니다. 다음을 고려하세요:

문서 이미징의 경우 2 억 TIFF 파일은 비교적 크지 만 거대한 시스템으로 간주 될 수 있습니다. 대규모 시스템은 10 억 개가 넘는 객체 파일을 가질 수 있습니다. 예를 들어, 비트로 정상 TIFF 당 20kb의 객체 파일 스토리지가있을 수 있습니다. DB 백업은 얼마나 걸리나요? 쿼리는 얼마나 걸리나요? 이 객체에 대한 액세스 빈도는 얼마입니까? 이러한 객체의 액세스 빈도가 높은 경우 파일을 제공하는 데 모든 시간을 소비하는 고급 DB 서버를 원하십니까? 수백만 개의 물체가 있다면 객체가 DB에 저장되는 솔루션을 구조하는 방법에 대해 매우 대담해야합니다.

이제 200m TIFF 파일을 PDF 파일로 변환해야한다고 가정 해 봅시다. 데이터베이스 서버가 각 객체 파일을 변환 프로세스에 제공하는 데 시간을 낭비하고 결과를 다시 절약 할 때 솔루션을 무릎에 가져올 준비를하십시오.

예를 들어, SharePoint는 DB에 객체를 저장하는 것으로 유명합니다. SharePoint는 확장 성 문제로 유명합니다.

내 대답 :
소형 시스템 (<1m 파일)의 경우 DB에 파일을 저장하는 것을 고려할 수 있습니다. 대형 시스템 (> 1m 파일)의 경우 DB에 파일을 저장하는 것이 실수입니다.

데이터베이스 자체에 파일을 저장하는 데있어 가장 큰 관심사는 백업 및 기타 DB 유지 관리 작업의 크기와 복잡성을 관리하는 것입니다.

이러한 어려움을 완화하는 한 가지 전략 (적어도 MS SQL에서)은 다른 드라이브에 저장된 별도의 데이터베이스 파티션을 만드는 것입니다.

그런 다음 데이터 스키마를 분리하여 메타 데이터를 분리하십시오 ~에 대한 파일은 하나의 파티션에 있으며 실제 Blob 파일은 별도의 파티션에 있습니다.

이 파티션은 다른 일정으로 백업되거나 별도로 복구 될 수 있습니다.

이미지를 데이터베이스에 한 번 블로브로 저장했으며 처음 이미지에서 배치 작업을 수행해야 할 때 후회했습니다. 파일 시스템에서 수행하는 것이 훨씬 쉬웠을 것입니다. 또한, 당신이 언급했듯이, 문서가 파일 시스템에 거주하는 경우 문서를 검색하는 것이 훨씬 빠릅니다.

내 간단한보기 : 파일 시스템은 파일을 저장해야하며 관계형 데이터베이스는 관계형 데이터를 저장해야합니다.

이진 파일을 파일 시스템에 저장하십시오. 스토리지 및 검색 작업을위한 ASP.NET 응용 프로그램을 만듭니다. 웹 앱 (문서 버전, 다중 계층 보안 등)을 사용하면 화려할 수 있습니다. 이것이 DOC 관리 산업의 합의라고 생각합니다.

"문서 수는 급격히 증가하고 있기 때문에"이것이 대규모가되고있는 것처럼 보입니다. 타사, 외부인 솔루션 (예 : http://kofax.com/capture/ - 나는 이것에 대한 광범위한 경험이 있습니다!) 당신을 위해 "더러운 일"을 할 수 있습니다. 또는 더 나은 아직,이 사람들과 같은 SaaS를 보는 것을 고려하십시오. http://www.edocumentsolutionsllc.com/

:-)

파일에 액세스하고 편집하고 다시 저장하려면 문서를 .doc와 같은 파일로 저장하세요.

백업하고 재현할 수 있는 실제 기록 사본을 원하는 경우 문서를 .pdf 또는 .tiff와 ​​같은 파일로 저장하십시오.

파일과 관련된 모든 정보(날짜, 작성자, 위치 등)를 데이터베이스에 저장하세요.

나는 항상 데이터베이스에 문서의 핵심 정보와 파일 경로를 저장하지만 문서 자체는 절대로 저장하지 않습니다. 전체 문서가 데이터베이스에 있지 않아야합니다.

이를 통해 해당 문서를 사용하는 데 훨씬 더 유연성이 있습니다. 예를 들어, 계층화 된 백업 스토리지 및 전담 메커니즘을 사용하고 싶으십니까? Oracle Blobs에서 시도해보십시오.

데이터베이스에 문서를 저장하는 데있어 볼 수있는 유일한 장점은 해당 문서를 다른 환경으로 쉽게 이동할 수 있다는 것입니다. 그 외에도, 나는 이미 언급 한 모든 이유로 그것을하지 않을 것입니다.

개인 전문 지식 : 귀하는 DB 관리자입니까 아니면 프로그래머입니까?

보안 : 데이터베이스 및 파일 시스템의 경우 데이터베이스의 하나의 설정입니다. 우연히 파일을 이동/삭제하는 사람의 우려입니까? 복잡한 설정에서 관리자는 파일을 다른 서버로 이동하고 공유 또는 매핑을 변경하도록 선택할 수 있습니다. 나는 이런 일이 결코 일어나지 않을 것입니다.

이 영역에서는 새로운 데이터베이스가 개선되고 있습니다.

문서를 전복 또는 기타 버전 제어 시스템에 저장하는 것을 고려하십시오. 좋은 백업, 이전 버전의 문서 및 화려한 네트워크 액세스를 볼 수있는 기능이 있습니다. 보다 "전복에 대한 나의 삶".

반대로 나는 몇 가지 이유로 데이터베이스에서 스토리지를 위해 갈 것입니다.

  1. 더 간단한 백업 전략
  2. 데이터베이스에 저장된 문서는 색인화 및 검색 할 수 있습니다.
  3. 파일이 이동/보안 변조에 대해 걱정할 필요가 없습니다.
  4. 충돌시기 다른 서버로 쉽게 포업 할 수 있습니다.
  5. 정부가 X 년 전으로 거슬러 올라가는 데이터를 저장 해야하는 경우 데이터베이스를 사용하여이를 관리하는 것이 훨씬 쉽습니다.

데이터베이스는 데이터를 저장하기 위해 만들어졌습니다. 파일은 단지 데이터 일뿐입니다.

파일 시스템에 파일을 저장하는 데 이점이 있다고 말했지만, 주요 데이터베이스 성능은 더 좋고 크기가 줄어 듭니다. SQL Server 2008을 사용하면 Filestream을 사용하여 두 세계를 모두 최대한 활용할 수 있습니다. 이 백서를 읽으십시오 자세한 내용은

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top