하거나 하지 않기 위하여:저장소의 이미지 데이터베이스에서[중복]

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

  •  03-07-2019
  •  | 
  •  

문제

이 질문은 이미 있는 대답을 여기:

의 컨텍스트에서는 웹 응용 프로그램,내 보는 항상 말을 넣어는 이미지 참조 데이터베이스에서,이미지 자체.나도 동의하는 경향이있는 저장하는 url 에 대이미지 자체에서 DB 는 좋은 아이디어를,그러나 제가 작업하고 있는 지금,우리는 상점의 많은 이미지 데이터베이스에서.

유일한 이유는 나의 생각할 수 있는 것은 아마도 그것은 더욱 안전합니까?당신이 원하지 않는 사람이 직접적인 링크 url?그러나 이 경우에는,항상 확인할 수 있습니다 웹사이트/서버가 처리와 같은 이미지를 처리기에 asp.net 그래서 그 사용자에게 필요한 인증을 보려면 이미지입니다.또한 저는 생각하고 성능을 것으로 상처를 꺼내 이미지 데이터베이스에서.다른 어떤 이유할 수 있을 것이다 이렇게는 좋은 아이디어 스토어는 이미지 데이터베이스에서?


정확한 복제: 사용자 이미지데이터베이스나 시스템관?
정확한 복제: 이미지를 저장하기에서 데이터베이스:이 옳은지 아닌지?
정확한 복제: 저장해야 하는 이미지 데이터베이스에서 또는 폴더를 확인해 주세요.
정확한 복제: 당신은 스토어진 데이터에서 데이터베이스 또는 폴더를 확인해 주세요.
정확한 복제: 저장소로 사진을 파거나 또는 데이터베이스에 대한 웹 응용 프로그램?
정확한 복제: 저장 작은 이미지의 수:덩어리 또는 fs?
정확한 복제: 매장에서 이미지 파일 시스템 또는 데이터베이스?

도움이 되었습니까?

해결책

만약 너라면 때때로 이미지를 검색해야하며 여러 다른 웹 서버에서 사용할 수 있어야합니다. 그러나 나는 그것이 거의 것이라고 생각합니다.

  • 여러 서버에서 사용할 필요가 없다면 파일 시스템에 항상 넣는 것이 좋습니다.
  • 여러 서버에서 사용할 수 있어야하고 실제로 시스템에 어떤 종류의로드가 있으면 일종의 분산 스토리지가 필요합니다.

데이터베이스를 활용하여 시스템에 추가 수준의 복잡성을 추가하지 않을 수있는 Edge Case를 여기에서 이야기하고 있습니다.

그 외에는하지 마십시오.

다른 팁

데이터베이스에 이미지를 넣는 장점.

  1. 업무. Blob을 저장하면 다른 DB 데이터와 마찬가지로 커밋 할 수 있습니다. 즉, 동료 메타 데이터와 함께 블로브를 커밋 할 수 있으며 둘이 동기화되어 있음을 확신합니다. 디스크 공간이 부족한 경우? 커밋이 없습니다. 파일이 완전히 업로드되지 않았습니까? 커밋이 없습니다. 어리석은 응용 프로그램 오류? 커밋이 없습니다. 이미지와 관련 메타 데이터를 서로 일치하게 유지하는 것이 응용 프로그램에 중요하다면 DB가 제공 할 수있는 트랜잭션이 도움이 될 수 있습니다.

  2. 관리해야 할 하나의 시스템. 메타 데이터와 얼룩을 백업해야합니까? 데이터베이스를 백업하십시오. 복제해야합니까? 데이터베이스를 복제하십시오. 부분 시스템 고장에서 복구해야합니까? DB를 다시로드하고 로그를 앞으로 굴립니다. DBS가 일반적으로 데이터에 가져 오는 모든 장점 (볼륨 매핑, 스토리지 제어, 백업, 복제, 복구 등)은 블로브에 적용됩니다. 더 일관성, 더 쉬운 관리.

  3. 보안. 데이터베이스에는 활용할 수있는 매우 미세한 입자 보안 기능이 있습니다. 스키마, 사용자 역할, "읽기 전용보기"와 같은 것들조차도 데이터의 하위 집합에 안전하게 액세스 할 수 있습니다. 이러한 모든 기능은 블롭을 들고있는 테이블과도 작동합니다.

  4. 중앙 집중식 관리. #2와 관련이 있지만 기본적으로 DBA (전력이 충분하지 않은 것처럼)는 데이터베이스를 관리합니다. 최신 데이터베이스 (특히 큰 데이터베이스)는 여러 기계에 걸쳐 큰 설치와 매우 잘 작동합니다. 단일 관리 소스는 절차를 단순화하고 지식 전달을 단순화합니다.

  5. 대부분의 최신 데이터베이스는 블롭을 잘 처리합니다. 데이터 계층에서 Blobs의 일류 지원을 사용하면 DB에서 클라이언트로 Blob을 쉽게 스트리밍 할 수 있습니다. 그렇게 할 수있는 작업이 있지만 한 번에 전체 블로브를 "빨아"할 수있는 작업이 있지만 해당 시설이 필요하지 않으면 사용하지 마십시오. DB의 SQL 인터페이스를 연구하고 기능을 활용하십시오. 그것들을 모 놀리학 적으로 취급하는 "큰 줄"처럼 취급 할 이유가없고, 당신의 얼룩을 크고 메모리가 큰 캐시 스매싱 폭탄으로 바꿉니다.

  6. 이미지 용 전용 파일 서버를 설정할 수있는 것처럼 데이터베이스에서 전용 Blob 서버를 설정할 수 있습니다. 전용 디스크 볼륨, 전용 스키마, 전용 캐시 등을 제공합니다. DB의 모든 데이터는 동일하지 않거나 동일하게 동일하게 작동하지 않습니다. 우수한 데이터베이스는 정상적인 제어 수준을 가지고 있습니다.

DB에서 블로브를 제공하는 데 관한 주요 NIT는 HTTP 층이 실제로 모든 HTTP 프로토콜을 활용하여 서비스를 수행하는 것입니다.

많은 순진한 구현은 단순히 Blob을 잡고 소켓 아래에 도매를 버립니다. 그러나 HTTP는 스트리밍 이미지 등에 적합한 몇 가지 중요한 기능을 가지고 있습니다. 특히 클라이언트가 블로브의 "조각"을 요청할 수 있도록 헤더, ETAG 및 청크 전송이 있습니다.

HTTP 서비스가 이러한 모든 요청을 올바르게 존중하고 DB가 매우 훌륭한 웹 시민이 될 수 있는지 확인하십시오. HTTP 서버에서 서빙하기 위해 파일 시스템의 파일을 캐싱하면 "무료로"이러한 장점 중 일부를 얻을 수 있습니다 (좋은 서버는 어쨌든 "정적"리소스를 위해이를 수행하므로). 이미지의 수정 날짜 등과 같은 것들.

예를 들어, 누군가가 2009 년 1 월 1 일에 생성 된 이미지 인 SpaceShuttle.jpg를 요청합니다. 요청 날짜 (예 : 2009 년 2 월 1 일) 파일 시스템에 캐시가 끝납니다. 나중에 이미지는 캐시 (FIFO 정책에서 정화됩니다). 2009 년 3 월 1 일 나중에 누군가가 다시 요청합니다. 글쎄, 이제는 2009 년 3 월 1 일 "날짜 창출"이 있습니다. 전체 시간은 생성 날짜가 실제로 1 월 1 일 이었지만, 특히 캐시가 많이 바뀌면 if-를 사용할 수있는 클라이언트를 볼 수 있습니다. 서버가 실제로 그렇지 않은 경우 리소스가 변경되었다고 생각하기 때문에 수정 된 헤더는 실제로 필요한 것보다 더 많은 데이터를 얻을 수 있습니다.

캐시 생성 날짜를 실제 생성 날짜와 동기화하면 문제가 적을 수 있습니다.

그러나 요점은 전체 문제에 대해 "좋은 웹 시민"이기 때문에 생각해야 할 것이며, 당신과 당신의 고객을 잠재적으로 대역폭 등을 구할 수 있다는 것입니다.

나는 방금 DB의 비디오를 제공하는 Java 프로젝트를 위해이 모든 것을 겪었고 그것은 모두 치료를합니다.

내가 이해하는 대부분의 데이터베이스 전문가들이 십자가 자신의 손가락과 히스에서 당신은 이미지를 저장하는 경우에 데이터베이스(또는 그것을 언급하).네,있는 성능과 저장 의미할 때 사용하여 데이터베이스로 저장소에 대한 대형 블록의 이진 데이터의 어떤 종류(이미지는 경향이 가장 일반적인 비트의 데이터 수 없는 표준화된).그러나,가장 확실한 상황이 데이터베이스 저장소의 이미지 뿐만 아니라 하지만 허용가능 는 것이 좋습.

예를 들어,일리 있는 응용 프로그램 사용자는 이미지를 연결하는 여러 가지 다른 점의 보고서는 그들은 쓰고 있었고,그 이미지를 인쇄할 수 있도록 했을 때 그것을 이루어졌다.이러한 보고서에 이를 통해 SQL Server 복제,었을 것이라고 소개되는 거대한 두통을 시도하는 관리 이러한 이미지와 파일의 경로를 통해 여러 시스템과 서버의 어떤 종류와 신뢰성이다.저장 데이터베이스에서 그들을 우리에게 모든 것을"무료"및 보고 도구를하지 않았는 파일 시스템 이미지를 검색합니다.

저의 일반적인 조언은 자신을 한 가지 접근 방식이나 다른 접근 방식으로 제한하지 않는 것입니다. 상황에 맞는 기술로 가십시오. 파일 시스템은 파일 저장에 매우 능숙하며 데이터베이스는 요청시 물린 크기의 데이터 덩어리를 제공하는 데 매우 능숙합니다. 반면에, 회사의 제품 중 하나는 응용 프로그램의 전체 상태를 데이터베이스에 저장해야하므로 파일 첨부 파일도 그곳에 들어가는 것을 의미합니다. DB Server (SQL Server 2005)를 통해 대규모 고객 및 데이터베이스에서도 관찰 가능한 성능 문제를 해결하지 못했습니다.

Microsoft의 SQL 2008은 Filestream 기능을 통해 두 세계의 최고를 제공합니다. 확인할 가치가 있습니다. http://technet.microsoft.com/en-us/library/bb933993.aspx

이미지를 데이터베이스에 저장하는 장점 중 하나는 시스템 전체에 걸쳐 휴대용이며 파일 시스템 레이아웃에서 독립적이라는 것입니다.

가장 간단 / 가장 성능 / 가장 확장 가능한 솔루션은 이미지를 파일 시스템에 저장하는 것입니다. 보안이 우려되는 경우 웹 서버에서 액세스 할 수없는 위치에 넣고 보안을 처리하고 파일을 제공하는 스크립트를 작성하십시오.

웹/앱 서버와 DB 서버가 다른 컴퓨터라고 가정하면 DB에 이미지를 넣어 몇 번의 타격을 입을 수 있습니다. 각 이미지에 대한 연결. 마지막 요점에 대해 더 걱정할 것입니다. 사이트에서 많은 이미지를 제공하는 경우 웹 서버가 많은 DB 연결을 소비하고 연결 풀을 소진 할 수 있습니다.

애플리케이션이 여러 서버에서 실행되면 이미지의 참조 사본을 데이터베이스에 저장 한 다음 파일 시스템에 주문형으로 캐시합니다. 그렇게하는 것은 파일 시스템을 측면으로 동기화하려고하는 것보다 엉덩이에 오류가 발생하기 쉬운 통증이 적습니다.

응용 프로그램이 단일 서버에 있으면 파일 시스템을 고수하고 데이터베이스에 데이터 경로를 유지하도록하십시오.

대부분의 SQL 데이터베이스는 물론 이미지를 염두에두고 설계되지 않았지만 데이터베이스에 포함하는 것과 관련된 일정량의 편의성이 있습니다.

예를 들어, 이미 데이터베이스를 실행 중이고 복제가 구성된 경우. RSYNC 또는 NFS 기반 파일 시스템 복제를 작동시키지 않고 즉시 HA 이미지 저장소가 있습니다. 또한 디스크에 파일을 작성하기 위해 많은 웹 프로세스 (또는 새로운 서비스 설계)가 있으면 복잡성이 약간 증가합니다. 실제로 그것은 단지 더 움직이는 부분입니다.

최소한 이미지에 대한 '메타'데이터를 유지하는 것이 좋습니다 (예 : 모든 권한, 소유 한 권한 등) 및 실제 데이터가 다른 테이블로 분리되어 다른 데이터 저장소로 전환하기가 상당히 쉽습니다. 라인. 어떤 종류의 CDN 또는 캐싱과 결합하면 한 점까지의 성능이 상당히 좋은 성능을 제공해야 하므로이 애플리케이션이 얼마나 확장 가능한지, 구현 용이성으로 균형을 잡는 방법에 달려 있습니다.

URL을 저장할 필요가 없습니다 (안전하지 않은 경우). 다른 곳에서 이미지를 참조하는 고유 한 ID를 저장할 수 있습니다.

데이터베이스 스토리지는 파일 시스템보다 비용이 더 비싸고 비용이 많이 드는 경향이 있습니다. 따라서 많은 이미지를 데이터베이스에 저장하지 않습니다.

데이터베이스에 이미지 데이터가 저장된 경우 재해 복구는 절대적으로 재미 있지 않습니다. 데이터를보다 신뢰할 수 있도록 데이터를 배포하는 더 나은 방법을 찾는 것이 좋습니다. 물론 모든 오버 헤드 (위에서 언급 한)는 복제 할 때 곱합니다 ...

그냥하지 마세요!

이것은 정말로 키스처럼 보입니다 (단순한 멍청한 멍청한) 문제. 파일 시스템은 사진 파일 저장을 쉽게 처리하도록 만들어졌지만 데이터베이스에서는 쉽게 수행 할 수 없으며 데이터를 쉽게 엉망으로 만들 수 있습니다. 파일 보안에 대해 걱정할 수있을 때 SQL과 렌더링의 성능과 모든 어려움을 겪는 이유는 무엇입니까? NFS 또는 CIFS와 함께 혼합 시스템을 처리 할 수도 있습니다. 파일 시스템은 성숙한 기술입니다. 훨씬 단순하고 강력합니다.

데모 응용 프로그램을 위해 데이터베이스에 이미지를 저장했습니다. 내가 한 이유는 보안이었습니다. 큰 문제는 아니라고 기록하는 레코드를 삭제하는 것이 큰 문제가 아니지만 문제가되지 않았을 수도있는 파일을 삭제했습니다!

성능이 문제가된다면 Rogue 파일 삭제가 실질적인 가능성인지 아닌지를 조사했을 것입니다.

정기적으로 데이터베이스를 꺼내는 이미지 인 경우 항상 파일 시스템을 사용하려고합니다.

한 번에 한 번 꺼내야하는 이미지라면 데이터베이스에 저장하면 인생이 더 쉬워지면 전혀 문제가 없습니다.

  • 데이터 데이터베이스
  • 파일 용 파일 시스템
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top