GridFS 는 BSON문서 크기 제한인 16MiB를 초과하는 파일을 저장하고 검색하기 위한 사양입니다.
참고
GridFS는 다중문서 트랜잭션을 지원하지 않습니다.
파일 단일 문서 에 저장하는 대신 GridFS 파일 여러 부분 또는 청크[]로1 나누고 각 청크 별도의 문서 로 저장합니다. 기본값 으로 GridFS 255 KiB의 청크 크기를 사용합니다. 즉, GridFS 255 마지막 청크 제외하고 파일 KiB 청크로 나눕니다. 마지막 청크 는 필요한 만큼만 커집니다. 마찬가지로 청크 크기보다 크지 않은 파일에는 필요한 만큼의 공간과 일부 추가 메타데이터 만 사용하는 최종 청크 만 있습니다.
GridFS는 두 개의 컬렉션을 사용하여 파일을 저장합니다. 한 컬렉션은 파일 청크를 저장하고 다른 컬렉션은 파일 메타데이터를 저장합니다.
GridFS 에 파일 쿼리 하면 운전자 필요에 따라 청크를 리어셈블합니다. GridFS 통해 저장된 파일에 대해 범위 쿼리를 수행할 수 있습니다. 또한 비디오 또는 오디오 파일 의 중간으로 '건너뛰기'와 같이 파일의 임의 섹션에서 정보 액세스 수도 있습니다.
GridFS MiB를 초과하는 파일을 저장하는 데 유용할 16 뿐만 아니라 전체 파일 메모리에 로드하지 않고도 액세스 하려는 파일을 저장하는 데에도 유용합니다.GridFS 사용해야 하는 경우도 참조하세요.
GridFS를 사용해야 하는 경우
MiB보다 큰 파일을 저장하려면 GridFS 사용합니다. 16
경우에 따라 대용량 파일을 저장하는 것이 시스템 수준의 파일 시스템보다 MongoDB 데이터베이스에서 더 효율적일 수 있습니다.
파일 시스템이 디렉터리의 파일 수를 제한하는 경우 GridFS를 사용하여 필요한 만큼 많은 파일을 저장할 수 있습니다.
전체 파일 메모리에 로드하지 않고 대용량 파일의 일부에 액세스 하려면 GridFS 사용합니다.
파일과 메타데이터 동기화된 상태로 여러 시스템 및 시설에 걸쳐 배포하려면 GridFS 사용하세요.MongoDB 지리적으로 분산된 복제본 세트를 통해 파일과 해당 메타데이터
mongod여러 시설에 있는 인스턴스에 배포합니다.
전체 파일의 콘텐츠를 원자 단위로 업데이트해야 하는 경우에는 GridFS를 사용하지 않도록 합니다.대안으로 각 파일의 여러 버전을 저장하고 메타데이터에서 파일의 현재 버전을 지정할 수 있습니다.새 버전의 파일을 업로드한 후 원자 업데이트에서 '최신' 상태를 나타내는 메타데이터 필드를 업데이트할 수 있으며 필요한 경우 나중에 이전 버전을 제거할 수 있습니다.
파일이 모두 16 MiB BSON 문서 크기 제한보다 작은 경우 GridFS 사용하는 대신 각 파일 단일 문서 에 저장하는 것이 좋습니다. BinData 데이터 유형 사용하여 바이너리 데이터를 저장 . BinData 사용에 대한 자세한 내용은 드라이버 설명서를 참조하세요.
GridFS 사용
GridFS를 사용하여 파일을 저장하고 검색하려면 다음 중 하나를 사용하세요:
MongoDB 드라이버입니다. 드라이버에서 GridFS를 사용하는 방법에 대한 자세한 내용은 드라이버 문서를 참조하세요.
mongofiles명령줄 도구입니다. 자세한 내용은mongofiles참조 문서에서 확인할 수 있습니다.
GridFS 컬렉션
GridFS는 파일을 다음과 같은 두 개의 컬렉션에 저장합니다.
chunks바이너리 청크를 저장합니다. 자세한 내용은chunks컬렉션을 참조하세요.files파일의 메타데이터를 저장합니다. 자세한 내용은files컬렉션을 참조하세요.
GridFS는 각 버킷 앞에 이름을 지정해 공통 버킷에 컬렉션을 배치합니다. 기본적으로 GridFS는 fs라는 이름이 지정된 버킷이 포함된 컬렉션 두 개를 사용합니다.
fs.filesfs.chunks
다른 버킷 이름을 선택할 수 있을 뿐만 아니라 단일 데이터베이스에 여러 버킷을 생성할 수도 있습니다. 버킷 이름을 포함한 전체 컬렉션 이름에는 네임스페이스 길이제한이 적용됩니다.
chunks 컬렉션
chunks [1] 컬렉션의 각 문서는 GridFS에서 표현되는 별개의 파일 청크를 나타냅니다. 이 컬렉션의 문서 양식은 다음과 같습니다. 이 컬렉션의 문서 양식은 다음과 같습니다.
{ "_id" : <ObjectId>, "files_id" : <ObjectId>, "n" : <num>, "data" : <binary> }
컬렉션 chunks 문서에는 다음 필드가 포함되어 있습니다.
chunks._id청크의 고유 ObjectId입니다.
chunks.data청크의 페이로드는 BSON
Binary유형입니다.
files 컬렉션
files collection 컬렉션의 각 문서는 GridFS의 파일을 나타냅니다.
{ "_id" : <ObjectId>, "length" : <num>, "chunkSize" : <num>, "uploadDate" : <timestamp>, "md5" : <hash>, "filename" : <string>, "contentType" : <string>, "aliases" : <string array>, "metadata" : <any>, }
files 컬렉션 내의 문서에는 다음 필드 중 일부 또는 전부가 포함되어 있습니다.
files._id이 문서의 고유 식별자입니다.
_id는 원본 문서에 대해 선택한 데이터 유형입니다. MongoDB 문서의 기본 유형은 BSON ObjectId입니다.
files.chunkSize각 청크의 크기(바이트)입니다. GridFS는 마지막 청크를 제외하고 문서를 필요한 크기의 청크
chunkSize로 나눕니다. 기본값 크기는 255KiB입니다.
files.md5더 이상 사용되지 않습니다.
MD5 알고리즘은 FIPS 140-2에 의해 금지되어 있습니다. MongoDB 드라이버는 MD5 지원을 중단하고 향후 릴리스에서 MD5 생성을 제거할 예정입니다. 파일 다이제스트가 필요한 애플리케이션은 이를 GridFS 외부에서 구현하고
files.metadata에 저장해야 합니다.명령에 의해 반환된 전체 파일
filemd5의 MD 해시입니다. 이 값의5String유형은 입니다.
files.contentType더 이상 사용되지 않습니다.
선택 사항GridFS 파일에 유효한 MIME 유형입니다. 애플리케이션 전용입니다.
GridFS 파일의 MIME 유형과 관련된 정보를 저장하려면
files.metadata를 사용하세요.
files.aliases더 이상 사용되지 않습니다.
선택 사항. 별칭 문자열의 배열입니다. 애플리케이션 전용입니다.
별칭 정보를 저장하려면
files.metadata를 사용합니다.
GridFS Indexes
GridFS 효율성 위해 및 컬렉션 각각에 인덱스를 chunks files 사용합니다. GridFS 사양을 준수하는 드라이버는 이러한 인덱스를 자동으로 생성합니다. 애플리케이션 에 맞게 추가 인덱스를 생성할 수도 있습니다.
chunks 인덱스
GridFS는 files_id 및 n 필드를 사용하여 chunks 컬렉션에서 고유한 복합 인덱스를 사용합니다. 이렇게 하면 다음 예시와 같이 청크를 효율적으로 조회할 수 있습니다.
db.fs.chunks.find( { files_id: myFileID } ).sort( { n: 1 } )
GridFS 사양을 준수하는 드라이버는 읽기 및 쓰기 (write) 작업 전에 이 인덱스 존재하는지 자동으로 확인합니다. GridFS 애플리케이션 의 특정 동작에 대해서는 관련 운전자 설명서를 참조하세요.
이 인덱스가 없는 경우 mongosh:를 사용하여 다음 작업을 실행하고 인덱스를 만들 수 있습니다:
db.fs.chunks.createIndex( { files_id: 1, n: 1 }, { unique: true } );
files 인덱스
GridFS는 filename 및 uploadDate 필드로 files 컬렉션의 인덱스를 사용합니다. 이 인덱스를 사용하면 다음 예시와 같이 파일을 효율적으로 조회할 수 있습니다.
db.fs.files.find( { filename: myFileName } ).sort( { uploadDate: 1 } )
GridFS 사양을 준수하는 드라이버는 읽기 및 쓰기 (write) 작업 전에 이 인덱스 존재하는지 자동으로 확인합니다. GridFS 애플리케이션 의 특정 동작에 대해서는 관련 운전자 설명서를 참조하세요.
이 인덱스가 없는 경우 mongosh:를 사용하여 다음 작업을 실행하고 인덱스를 만들 수 있습니다:
db.fs.files.createIndex( { filename: 1, uploadDate: 1 } );
| [1] | (1, 2) GridFS의 맥락에서 청크라는 용어의 사용은 샤딩의 맥락에서 청크라는 용어 사용과 관련이 없습니다. |
GridFS 샤딩
GridFS 에는files 및 의 두 가지 컬렉션을 고려해야 chunks 합니다.
chunks 컬렉션
chunks 컬렉션을 샤딩하려면 { files_id : 1, n : 1
} 또는 { files_id : 1 }을(를) 샤드 키 인덱스로 사용합니다. files_id는 ObjectId이며 단조롭게 변경됩니다.
업로드 성공적인 를 확인하기 위해 를 실행 하지 filemd5 않는 MongoDB 드라이버의 경우 컬렉션 chunks 에 해시 샤딩 사용할 수 있습니다.
MongoDB 운전자 를 실행하는 경우 해시 filemd5 샤딩 사용할 수 없습니다. 자세한 내용은 서버-9888 를 참조하세요.
files 컬렉션
files 컬렉션은 크기가 작고 메타데이터만 포함되어 있습니다. GridFS에 필요한 키 중 어느 것도 샤드된 환경에서 균등하게 배포되는 데 적합하지 않습니다. files를 샤딩되지 않은 상태로 두면 모든 파일 메타데이터 문서를 하나의 샤드에 보관할 수 있습니다.
files 컬렉션을 반드시 샤딩해야 하는 경우 가능하면 애플리케이션 필드와 함께 _id 필드를 사용합니다.