바이너리 자료 저장 이야기를 메신져로 하다가,
초안 이야기를 게시판에 적는게 나을 것 같아서
기록으로 남겨둡니다.
1. upload 루틴은 그대로 하고, 일단 db에 파일 정보만 저장하고 웹 루틴은 끝낸다.
2. 웹서버가 돌아가는 시스템에서 binary file saver 데몬 하나를 만들고, 그놈은 주기적으로 새로 올라온 binary file 이 있는지 살펴보아, 있으면, 그것을 db에 있는 uploadfiles 테이블의 binary 칼럼에 update 하고, md5sum 값을 웹 쪽 시스템과, db 쪽에 같이 보관해 둔다.
- table insert 작업이 꽤 오래 걸리는 경우, 웹서버에 영향을 주지 말아야하는 것이 첫번째 원칙입니다.
3. 사용자 download 요청이 있으면 기존 루틴에서 md5sum 체크 루틴을 추가하고, 일단 다운로드 디렉토리에 있는 파일과, db에 기록된 그것의 md5sum 값이 같은지 비교하고, 같다면, 그것을 기존 방식대로 download 작업을 하고, 그렇지 않다면, 다시 db에서 select 해서 binary 파일로 만들어둔다.
download count update 때 table lock이 될지 안될지는 테스트를 해봐야겠네요.
(조금 신경 써야할 부분 같습니다)
- binary 자료 select 작업에서 웹서버쪽의 영향이 최소화 되어야함이 첫번째 원칙입니다.
4. binary file 수정 작업은 기존 대로 삭제 뒤 새로 upload 하는 방식을 택한다.
-------------
이런 방식이라면, 이번 사태와 같은 사태가 발생했을 때, 문제를 최소화 할 수 있고, db는 db대로 성능을 최대화 할 수 있을 것같네요.
누가 작업할지는 모르겠지만, - 꼭 누구라고 말은 안함 ^^
한번 멋지게 만들어보시길.
(제가 보기에는 그냥 고가 스토리지 쓰면 그냥 풀려버리는 문제를 -.-)
|