방금 설명한대로 GridFS를 사용하기 시작했습니다.
지금까지 경험 한 바에 따르면 GridFS의 가장 큰 장점은 별도의 파일 저장 시스템이 필요 없다는 것입니다. 우리의 전체 퍼시스턴스 계층은 이미 Mongo에 들어 있으므로, 다음 논리적 단계는 파일 시스템을 거기에 저장하는 것입니다. 플랫 네임 스페이스는 단지 흔들리고, 당신이 원하는 메타 데이터를 기반으로 파일을 불러올 수있는 풍부한 쿼리 언어를 허용합니다. 우리의 응용 프로그램에서 우리는 모든 소유권 정보를 임베디드 한 'appdata'객체를 사용했습니다.
NoSQL 파일 저장소, 특히 GridFS에서 고려해야 할 또 다른 사항은 다른 데이터와 함께 분할 및 확장한다는 것입니다. mongo 서버 안에 전체 DB 키 - 값 저장소가 있다면, 결국 더 많은 머신으로 서버 클러스터를 확장해야한다면 결국 파일 시스템도 커질 것입니다.
바이너리 데이터 자체가 고전적인 디렉토리 기반 파일 시스템에 익숙한 잠재 고객 인 덩어리로 나뉘어지기 때문에 약간의 '블랙 박스'를 느낄 수 있습니다. 이것은 RockMongo와 같은 관리자 프로그램의 도움으로 완화됩니다.
모두 이미지를 GridFS에 저장하는 것은 문서 자체를 삽입하는 것만큼이나 쉽습니다. 모든 주요 언어의 드라이버가 대부분 당신을 위해 처리합니다. 우리 환경에서 우리는 엔드 포인트에서 이미지 업로드를 가져오고 PIL을 사용하여 크기 조정을 수행했습니다. 그런 다음 이미지를 mongo에서 가져 와서 다른 끝점에서 데이터를 출력하고 jpeg로 mimetyped했습니다.
행운을 빈다.
편집 :
가 GridFS에 업로드 당신에게 사소한 파일의 예를 제공하려면, 여기 PyMongo, 파이썬 라이브러리에있는 간단한 방법입니다. 당신이 당신의 쿼리 응용 프로그램에 대한 사용자 지정과 관련된 정보를 기반으로 할 경우 정말 도움이 될 수있는, 좋아하는 경우에
from pymongo import Connection
import gridfs
binary_data = 'Hello, world!'
db = Connection().test_db
fs = gridfs.GridFS(db)
#the filename kwarg sets the filename in the mongo doc, but you can pass anything in
#and make custom key-values too.
file_id = fs.put(binary_data, filename='helloworld.txt',anykey="foo")
output = fs.get(file_id).read()
print output
>>>Hello, world!
는 또한 사용자 정의 값에 대해 조회 할 수 있습니다.
try:
file = fs.get_last_version({'anykey':'foo'})
return file.read()
catch gridfs.errors.NoFile:
return None
이
는 어원이 단지 몇 가지 간단한 예, 다른 언어 (PHP, 루비 등) 모든 많이 용 드라이버입니다.
나는 그것의 REST 프레임 워크 슬링과 함께 잭 래빗 갈 것
시스템에 입력되는 파일의 양이 매우 많은 응용 프로그램에서는 항상 옵션이되는 것은 아닙니다. BLOB는 전체 파일로 저장되고 청크되지 않으므로 행 값이 실제로 커질 수 있고 DB 백업이 기하 급수적으로 커질 수 있습니다. 이 옵션을 사용하기 전에 항상 복제 고려 사항과 입력 볼륨을 고려해야합니다. – DeaconDesperado