2014-02-14 4 views
8

data-url을 mongoDB 에 저장 하시겠습니까? 파일을 저장하거나 GridFS를 사용하는 것이 좋습니다.Mongo DB에 데이터 URL 저장하기

데이터 URL : 내가 저장하고있는 파일의

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMcAAAEsCAYAAAB38aczAAAgAElEQV 

모든 JPG 또는 PNG이며, 크기는 1MB 미만이다.

이것은 나쁜 실행으로 간주되고 읽기 작업과 쓰기 작업 모두에 대해 성능상의 영향이 무엇인지 궁금합니다. 1) 별도의 컬렉션 2)를 컬렉션의 메타 데이터로 저장합니다.

작은 파일 저장에 대한 다른 제안이 있습니다.

답변

6

먼저 이진 데이터를 완벽하게 저장할 수있는 데이터베이스에 base64로 인코딩 된 데이터를 저장하지 않겠습니다. 그것은 단지 공간 낭비 일뿐입니다. base64 표현이 아닌 이미지를 저장하십시오 (예 : data : "VBORw0KGgoAAAANSUhEUgAAA..."이 아니라, data : BinData("VBORw0KGgoAAAANSUhEUgAAA...")). 전자는 MongoDB의 문자열이고, 후자는 이진 데이터입니다. Base64는 크기를 33 % 늘립니다.

그 외에도 괜찮은 것 같습니다. 트레이드 오프는 모든 데이터와 여러 요청을 수집하는 1 건의 요청입니다. 더 큰 용량의 데이터를 저장하는 단점은 모든 데이터가 잠시 동안 RAM에 있어야하지만 1MB에서는 문제가 아닌 것입니다.

그러나 이미지가 필요없는 상황에서는 문서를 가져 오지 않아야합니다. 1MB는 지나치게 많지 않지만 읽기가 많은 컬렉션의 경우 재앙입니다.

+0

감사합니다. 필자의 상황에서는 이미지를 포착하는 것이 거의 필요하지 않으며 컬렉션에 대해 많은 읽기가 필요한 쿼리가 수행됩니다. 내 모든 기존 검색어에 대해 제외를 지정하는 것은 좋지 않다고 생각합니다. 그래서 내 옵션은 1) 내 파일 서버에 이미지를 저장하는 것, 2) 별도의 컬렉션에 바이너리 데이터를 저장하고, refs를 생성하고, 필요할 때 mongoose의 populate를 사용하여 이미지를 얻는 것처럼 보입니다. – TaylorMac

+0

별도의 컬렉션과 같은 사운드가 가장 적합합니다. 나는 두번째 콜렉션이 호출되는 애완 동물 프로젝트에서 같은 개념을 사용합니다 ...'Images' ;-) 잘 작동하고이 사용 패턴을 위해 GridFS보다 낫습니다. – mnemosyn

+0

이 기술로 성공했음을 알고 있습니다. 당신의 지식에 대해 다시 감사드립니다. – TaylorMac

관련 문제