사진을 파일로 저장하거나 웹 앱용 데이터베이스에 저장 하시겠습니까?


124

내 질문은 상당히 일반적이며 100 % 답변이 없을 수도 있다는 것을 알고 있습니다. 많은 사진과 많은 양의 트래픽을 포함하는 ASP .NET 웹 솔루션을 구축 중입니다. 나는 정말로 성과를 얻고 싶다.

그림을 데이터베이스 나 파일 시스템에 저장해야합니까? 그리고 대답에 관계없이 나는 왜 특정 방법을 선택하는지에 더 관심이 있습니다.

감사합니다, 스테판

DUPLICATE : DB에 이미지 저장-그래, 아니? , 어떻게 파일 시스템에 이미지를 저장 , 이미지의 작은 숫자를 저장 : BLOB 또는 FS를? 그리고 아마 다른 것.


댓글 : 좋은 답변을 많이 주셔서 감사합니다. 100 % 데이터베이스 기반 솔루션이 마음에 들더라도 파일 기반 솔루션을 선택하겠습니다. 오늘날 데이터베이스 등으로 내가 원하는 것을 할 수있는 좋은 해결책이있는 것 같지만 그렇게하지 않는 데에는 몇 가지 이유가 있습니다.

  • 나는 호스팅 솔루션을 사용할 것이며 엄청난 양의 스토리지 (10GB)가 있지만 데이터베이스 용으로 300MB 만 있습니다. DB에 추가 스토리지 비용이 많이 듭니다.

  • 나는 DB 전문가가 아니며 DB 설정을 제어하지도 않습니다. DB 기반 솔루션은 모양대로 사용자 지정 구성이 필요할 수 있습니다.

자체 서버에서 사이트를 운영하려면 DB 기반 솔루션을 고려할 수 있습니다. 고마워, 스테판


1
사용중인 데이터베이스를 지정하십시오.
Gerrie Schenck

1
이후 버전의 MSSQL을 사용하려고합니다.
StefanE

1
@StefanE, 파일 시스템은 모든 의도와 목적에 맞게 파일 스토리지에 최적화 된 특수 데이터베이스입니다.
LukeH

답변:


175

파일 시스템에 사진을 저장하고 데이터베이스에 사진 위치를 저장합니다.

왜? 때문에...

  1. 사진을 정적 파일로 제공 할 수 있습니다.
  2. 사진을 가져 오는 데 데이터베이스 액세스 또는 애플리케이션 코드가 필요하지 않습니다.
  3. 성능을 향상시키기 위해 다른 서버에서 이미지를 제공 할 수 있습니다.
  4. 데이터베이스 병목 현상을 줄입니다.
  5. 데이터베이스는 궁극적으로 데이터를 파일 시스템에 저장합니다.
  6. 이미지는 파일 시스템에 저장 될 때 쉽게 캐시 될 수 있습니다.

1
또한 SQL Server에서 이미지를 "이미지"필드로 저장할 때 SQL이 실제로 수행하는 작업입니다. 디스크 어딘가에 파일에 대한 포인터를 저장합니다. 이것이 8KB 페이지 제한에 도달하는 방법입니다.
Zhaph-Ben Duguid

9
이것은 실제로 SQL Server 2008로 해결되었습니다. "파일 시스템의 성능을 활용하고 동시에 유지 관리 할 수 있는 새로운 유형의 FILESTREAM technet.microsoft.com/en-us/library/bb895234.aspx 구조화되지 않은 데이터와 이에 상응하는 구조화 된 데이터 간의 트랜잭션 일관성 "
kristof

네, 맞아요. 내 질문은 얼룩의 크기가 얼마입니까? 또는 얼마나 많은 메모리를 저장할 수 있습니까?
Ameer 2013 년

11

최근에 개발 한 프로젝트에서 이미지 (및 모든 종류의 이진 문서)를 데이터베이스 테이블의 이미지 열로 저장했습니다.

데이터베이스에 파일을 저장하는 것의 장점은 데이터베이스 (= 메타 데이터)와 하드 디스크 (= 파일 스토리지) 간의 동기화가 내장되어 있지 않기 때문에 레코드가 삭제 되어도 하드 디스크에 참조되지 않은 파일로 끝나지 않는다는 것입니다. 수동으로 프로그래밍해야합니다.

오늘날의 기술을 사용하여 이미지를 SQL Server 2008 FILESTREAM 열 (적어도 다음 프로젝트에서 수행 할 작업)에 저장하는 것이 좋습니다.이 열은 데이터베이스에 데이터를 저장하고 별도의 파일에 대용량 바이너리를 갖는 이점을 결합하기 때문입니다 ( 최소한 광고에 따라;))


아직 Filestream 기능을 테스트 했습니까?
StefanE

1
실제로 DB 레코드를 삭제할 때 파일 시스템에서도 삭제하도록 코딩 할 수 있습니다. 그래서 DB가 아닌 FS에 저장하는 것이 좋습니다
kailash19

9

격언은 항상 "파일 시스템의 파일, 데이터베이스의 파일 메타 데이터"였습니다.


6

파일을 파일로 저장하는 것이 좋습니다. 다른 데이터베이스는 Blob 데이터를 다르게 처리하므로 백엔드를 마이그레이션해야하는 경우 문제가 발생할 수 있습니다.

impages를 제공 할 때 서버에 이미 존재하는 파일에 <img src =를 제공하는 것이 데이터베이스 필드에서 임시 파일을 만들고 <img 태그를 가리키는 것보다 빠를 것입니다.

이 답변은 귀하의 질문을 인터넷 검색하고 http://databases.aspfaq.com/database/should-i-store-images-in-the-database-or-the-filesystem.html 에서 의견을 읽음으로써 찾았습니다.


1
추천 게시물이 약간 오래된 것 같습니다.
devio

6

나는 일반적으로 다음과 같은 이유로 데이터베이스에 이진 파일을 갖고 싶습니다.

  • 데이터 무결성 : 참조되지 않은 파일 없음, 연결된 파일없이 db에 경로 없음
  • 데이터 일관성 : 데이터베이스 덤프를 취하면 그게 다입니다. 아니오 "이 데이터 디렉토리를 targz하는 것을 잊었습니다."

4

데이터베이스에 이미지를 저장하면 단일 이미지를 제공하기위한 DB 오버 헤드가 추가되고 해당 수준으로 성장할 경우 대체 스토리지 (S3, Akami)로 오프로드하기가 어렵습니다. 데이터베이스에 저장하면 지금 이동해야하는 DB 일 뿐이므로 앱을 다른 서버로 훨씬 쉽게 이동할 수 있습니다.

디스크에 이미지를 저장하면 대체 저장소로 쉽게 오프로드하고 이미지를 정적 요소로 만들어 이미지를 캐시 할 수 있도록 웹 앱에서 HTTP 헤더를 엉망으로 만들 필요가 없습니다. 단점은 앱을 다른 서버로 이동하는 경우 이미지도 이동하는 것을 기억해야한다는 것입니다. 쉽게 잊혀지는 것.


3

웹 기반 응용 프로그램의 경우 이미지를 저장하는 데 파일 시스템을 사용하면 성능이 향상됩니다. 이렇게하면 애플리케이션 내의 여러 수준에서 이미지 캐싱을 쉽게 구현할 수 있습니다. 이미지를 데이터베이스에 저장하면 몇 가지 이점이 있지만 대부분의 경우 이러한 이점은 클라이언트 기반 응용 프로그램과 함께 제공됩니다.


0

지금까지 이미 좋은 답변에 더 추가하기 위해. 당신은 여전히 웹 수준에서 모두 캐싱의 혜택을 얻을 수 어쩌면 당신이 데이터베이스에 당신에게 이미지를 유지 경로를 이동하는 경우 데이터베이스 수준.

나는 데이터베이스의 경우 이미지와 관련된 텍스트 데이터와 관련하여 이미지를 저장하는 방법과 데이터베이스가 쿼리를 캐시 할 수 있도록 이미지에 대한 액세스를 특정 쿼리에 저장할 수 있다면 이것을 달성 할 수 있다고 생각합니다 (이론은 그렇습니다 그 부분에 대해 나를 핵무기로 자유롭게 느끼십시오).

웹 측에서는 질문이 asp.net으로 태그가 지정되었으므로 http 처리기를 사용하여 이미지를 제공하는 경로로 갈 것이라고 생각합니다. 그러면 프레임 워크의 모든 이점을 자유롭게 사용할 수 있으며 이미지에 대한 키를 http 처리기에 전달하기 만하면 도메인 로직을 깔끔하게 유지할 수 있습니다.


-1

파일을 저장할 개별 NoSql 데이터베이스를 선택하는 것은 어떻습니까?

@chburd가 언급했듯이 데이터 무결성, 데이터 일관성을 제공합니다.

rdbms는 여전히 작게 유지됩니다.


-1
  1. 다음은 Eclipse파일 시스템에 이미지를 저장하고 해당 메타 데이터를 DB에 보관하는 단계별 예제 (일반적인 접근 방식, Spring 구현, )입니다-http: //www.devmanuals.com/tutorials/java/spring/spring3/mvc /Spring3MVCImageUpload.html
  2. 여기도 예가 있습니다. //www.journaldev.com/2573/spring-mvc-file-upload-example-tutorial-single-and-multiple-files
  3. 또한이 프로젝트의 코드베이스 ( https://github.com/jdmr/fileUpload)를 조사 할 수 있습니다 . 컨트롤러에 주의 하십시오 .
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.