파일을 DB에 저장하는것에 있어서.
글쓴이: osanha / 작성시간: 월, 2009/04/06 - 2:56오후
문득, 궁금하네요...
어떤 게시판 웹사이트가 있다고 했을때. 일반적으론 텍스트는 DB에 저장하고 파일은 그냥 파일시스템에 저장하고 경로를 DB에 저장하지요.
만약, 텍스트가 검색쿼리라던지 여러가지 SQL 에 의존적인 기능이 전혀 필요없이 단지 저장하고, 읽어가기만 한다면..바이너리 파일과 다를바 없는 조건인듯 한데
이럴때, 파일로 저장하는게 나을까요 아니면 DB에 저장하는게 나을까요? 만약 DB라고 한다면 역으로 바이너리 파일은 왜 DB에 넣으면 비 효율적이라고들 할까요?
크기의 차이? 갯수의 차이? 둘다 엄청나게 갯수가 많다면?
Forums:
파일로 놔두는것과 DB
파일로 놔두는것과 DB 에 넣는것에 가장 큰 차이점은 저장에 드는 비용이라고 생각합니다.
업로드 된 파일이 적합하여 파일로 저장하는 경우 mv 해서 원하는 경로에 옮겨넣으면 끝이지만,
DB 에 넣으려면 파일스트림을 한번 읽어서 저장해야 되죠.
그만큼 DB 커넥션도 오래 잡고 있겠고요.
응용프로그램에서 그렇게 하는 이유는 웹인터페이스도 없고,
업로드 자체가 DB 접속을 직접 하는 것이므로 웹환경과는 달리
그렇게 해도 손해(?)가 없기 때문이겠지요.
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/
https://xenosi.de/
test
test
저같은 경우..
단순히 파일을 저장하는 목적이라면 DB에 넣을 필요는 없지요. 윗분 말씀처럼 득보다 실이 많거든요.
DB를 사용할 때의 장점을 고려해서 판단하세요. DB를 사용할 때의 이득은,
1. 인증을 적용하기 쉽다.
게시판에서 글을 파일로 저장한다면... 보통은 누구나 볼 수 있게 되죠. 비슷한 의미에서, 만약 업로드한 바이너리
파일에 대한 인증이 필요하다고 할 때, 가장 쉽게 구현할 수 있는 방법은 바이너리 파일을 DB에 넣는 것입니다.
(웹 환경에서 DB에 있는 바이너리 데이터를 사용할 때에는, 파일로 떨구지 않고 바로 header를 조작해서 클라이언트에
전달할 수 있습니다. 이 과정에서 인증 여부를 체크할 수도 있구요.)
2. 파일 많을 땐 속도가 더 빠르다.
게시글 하나에 파일 하나라면.. 나중에 이거 골치아파집니다. 파일 개수가 많아지면 느려지죠. 특히 ext3같은 곳에서는요.
(RHEL은 ext3만 보증했는데 요즘에도 그러는지...)
역으로 발상해서, 굉장히 많은 파일에 접근해야 하면 DB를 이용하는 방법도 있습니다. 파일시스템으로 DB를
이용하는 프로젝트도 있을 정도니까요. (MySQL로 5억개의 데이터를 인덱스 태워서 select하면 0.02초 걸리더군요. 데이터 넣는데
23시간, 인덱스 만드는데 2시간이 걸리긴 했지만요.... ㅋ)
3. 편하다.
DB에 넣으면 관리하기 편하죠. 기능 확장하기도 편하구요. 관점에 따라서 다르기는 하겠지만, 백업도 편리할 수 있구요.
http://wiki.kldp.org/wiki.php/superwisdom
사용법상의 차이?
이미 절반의 답은 말씀하셨으니, 부연을 설명을 붙이자면.
일반 text는 query 구성이나 결과처리가 간단한 반면,
binary는 chunk 구성해서 입/출력하기가 좀 귀찮죠.
만약, text가 열라 크고 검색이 필요 없다면
말씀하신 binary처럼 하는 것이 나을 거고요.
괜히 DB의 managed storage를 이용할 필요 없겠죠.
음.. pdf파일을 디비에 저장하고 파싱하는 과정...
음 가령 XML 형식에 맞춰 디비와 스크립트를 구성하고 이에 따라 파일을 업로드하면, 규격에 맞게 디비에 저장. 이를 JSON을 통해 파싱해주는 과정을 생각해봤는데 어떤가요..??
댓글 달기