문제
추가하는 일부 기능이 내 사이트에는 사용자가 업로드할 수 있는 자신의 프로필,사진,그래서 내가 궁금해하는 여부에 대한 데이터베이스에 저장할로 BLOB,거나 그들에게 파일 시스템입니다.
내가 찾는 질문에 이와 비슷한 여기: 이미지를 저장하기 DB:이 옳은지 아닌지, 지만,응답을 주었어 더 많은 사람들을 향해 많은 기대 또는 수천 수백만 명의 이미지하는 반면,나는 자세한 우려에 대한 작은 이미지(Jpeg 파일까지 어쩌면 150x150 픽셀),고 작은 숫자들:아마도 하나 또는 두 개의 천.
무엇인가에 대한 감정을 DB BLOB 대 파일시스템에 대한 이 시나리오? 어떻게 클라이언트로 이동을 가진 캐싱에서 이미지 DB 대 파일시스템에서?
면 덩에 저장된 DB 이동하는 방법-가에 대해 알아야 할 가 저장할?이후 나는 상상 대부분의 내용되지 않습 업로드한 사진을 만들어야 하는 user_pics
테이블의(외부)가 일정 users
테이블이 필요합니까?
편집:내가 다 이 질문하기 때문에,그것은 지 중복의 두 가지 당신을 연결을 시도합니다.이 질문에 대해 구체적으로 장점/단점을 사용하여 DB 또는 FS 소수에 대한 이점 유의하여 주시기 바랍니다.위에서 말한 대로 다른 질문을 대상으로 필요한 사람들을 저장할 수천명의 큰 이미지입니다.
해결책
답변 부속 질문의:
어떻게 클라이언트로 이동을 가진 캐싱에서 이미지 DB 대 파일시스템에서?
를 위한 데이터베이스:가 last_modified 필드에서 당신의 데이터베이스입니다.를 사용하여 마지막 수정하는 HTTP 헤더 그래서 클라이언트 브라우저 캐시할 수 있습니다.을 보내주십시오 적절한 응답을 때 브라우저는 요청에 대한 이미지는 경우에"새로운"(한 기억이 없어요 그것이 무엇이라고;어떤 HTTP 요청 헤더).
파일 시스템:같은 일을 하지만,파일의 수정된 시간입니다.
면 덩에 저장된 DB 이동하는 방법-가에 대해 알아야 할 곳에 저장할?이후 나는 상상 대부분의 내용되지 않습 업로드한 사진을 만들어야 하 user_pics 테이블의(외부)가 일반 사용자 경우 테이블이 필요합니까?
나 BLOB 와 관련된 메타데이터에서 자신의 테이블과 함께 몇 가지 종류의 사이의 관계 그리고 귀하의 사용자가이다.이렇게 쉽게 만들 것입을 최적화하는 테이블에 저장 방법에 대한 데이터를 만드는 일을 줄이고 잎은 객실에 대한 확장성(예:일반적으로"파일"table).
다른 팁
한때 PDF 파일에 대한 작은 DMS와 비슷한 질문에 직면했습니다. 시나리오는 귀하와 다릅니다. 최대의 최대는 최대 10MB의 크기를 가진 100 개의 파일 일 수 있습니다. 프로필 사진에 대해 기대하는 것이 아닙니다. 그러나 친구가 나에게 돌려 준 대답은 당신의 사건에도 적용됩니다.
각 스토리지 시스템을 사용하여 설계된 작업에 사용하십시오.
가게 데이터 안에 데이터 베이스. 가게 파일 안에 파일 시스템.
이것은 궁극적 인 대답 (*)이 아니라 스타터에게 좋은 경험 법칙입니다.
Aaron Digulla가 그의 대답에서 말하면서 Windows FS가 느리고 때로는 신뢰할 수없는 것에 대해 들어 본 적이 없습니다. 그러한 문제가 있다면, 이것은 확실히 고려되어야합니다. 그러나 아바타 그림의 경우, 그것은 나를 중요하게 만들지 않습니다.
(*) 알고 있는데, 42 ...
서빙의 관점에서, 서빙을 위해 코드를 작성하고, 백업 절차 등을 작성하는 것의 관점에서 더 편리한 것은 무엇입니까? 당신은 다른 사람의 정답이 아니라 당신을위한 정답을 원합니다.
내 관점에서 볼 때 데이터베이스 외부에 남을 수있는 것은 밖에 남아 있어야합니다. 매일 복제하거나 백업하지 않는 파일 시스템 또는 별도의 테이블 일 수 있습니다. 데이터베이스를 훨씬 가볍게 만들고 느리게 성장하며 이해하고 유지하기가 더 쉽습니다.
MSSQL에있는 경우 Blob이 별도의 데이터 파일에 저장되어 있는지 확인하십시오. 다른 모든 것과 같이 기본이 아닙니다.
Windows에서 데이터베이스에 최대한 많이 넣으십시오. 파일 시스템은 다소 느리고 때로는 신뢰할 수 없습니다.
Linux에는 더 많은 옵션이 있습니다. 여기에서는 큰 파일을 파일 시스템으로 옮기고 DB에 이름을 유지해야합니다. Ext3 또는 ReiseFS와 같은 최신 파일 시스템을 사용하는 경우 성능이 뛰어난 작은 파일을 많이 만들 수도 있습니다.
또한 데이터에 액세스 할 수있는 방법을 고려해야합니다. DB에 모든 것이있는 경우 하나의 액세스 경로가 있고 다른 권한 세트에 대해 걱정할 필요는 없지만 읽기/쓰기 블로브의 추가 복잡성을 처리해야합니다. 많은 DBS에서 블로브를 검색 할 수 없습니다.
파일 시스템에서는 파일이 DB에 저장된 경우 불가능한 데이터에서 다른 도구를 실행할 수 있습니다.
데이터베이스에 저장할 것입니다.
- 백업/복원이 쉽습니다 (백업 파일과 데이터베이스에도 Point-in-Time 복구가 더 복잡합니다)
- DB의 거래는 당신이없는 파일 이름을 지적하지 않아야한다는 것을 의미합니다.
- 누군가가 Dodgy 이미지 업로드 해킹을 통해 서버에 스크립트를 넣는 교활한 방법을 찾을 가능성이 적습니다.
소수의 이미지에 대해 이야기하고 있기 때문에 사용 편의성/관리는 링크 된 질문에서 논의되는 성능 문제를 선호해야합니다.
데이터베이스에 저장하는 관리 이점이 있다고 생각합니다. 다른 데이터와 일관되게 복원 할 수 있습니다. 쓸모없는 데이터를 삭제하는 것을 잊지 않을 것입니다 (음, 가능하지만 조금 덜 가능합니다). 데이터베이스를 다른 컴퓨터로 마이그레이션하면 이미지가 함께 이동합니다. 그것.