Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

자체 관리 배포를 위한 GridFS

GridFSBSON문서 크기 제한인 16MiB를 초과하는 파일을 저장하고 검색하기 위한 사양입니다.

참고

GridFS는 다중문서 트랜잭션을 지원하지 않습니다.

파일 단일 문서 에 저장하는 대신 GridFS 파일 여러 부분 또는 청크[]로1 나누고 각 청크 별도의 문서 로 저장합니다. 기본값 으로 GridFS 255 KiB의 청크 크기를 사용합니다. 즉, GridFS 255 마지막 청크 제외하고 파일 KiB 청크로 나눕니다. 마지막 청크 는 필요한 만큼만 커집니다. 마찬가지로 청크 크기보다 크지 않은 파일에는 필요한 만큼의 공간과 일부 추가 메타데이터 만 사용하는 최종 청크 만 있습니다.

GridFS는 두 개의 컬렉션을 사용하여 파일을 저장합니다. 한 컬렉션은 파일 청크를 저장하고 다른 컬렉션은 파일 메타데이터를 저장합니다.

GridFS 에 파일 쿼리 하면 운전자 필요에 따라 청크를 리어셈블합니다. GridFS 통해 저장된 파일에 대해 범위 쿼리를 수행할 수 있습니다. 또한 비디오 또는 오디오 파일 의 중간으로 '건너뛰기'와 같이 파일의 임의 섹션에서 정보 액세스 수도 있습니다.

GridFS MiB를 초과하는 파일을 저장하는 데 유용할 16 뿐만 아니라 전체 파일 메모리에 로드하지 않고도 액세스 하려는 파일을 저장하는 데에도 유용합니다.GridFS 사용해야 하는 경우도 참조하세요.

MiB보다 큰 파일을 저장하려면 GridFS 사용합니다. 16

경우에 따라 대용량 파일을 저장하는 것이 시스템 수준의 파일 시스템보다 MongoDB 데이터베이스에서 더 효율적일 수 있습니다.

전체 파일의 콘텐츠를 원자 단위로 업데이트해야 하는 경우에는 GridFS를 사용하지 않도록 합니다.대안으로 각 파일의 여러 버전을 저장하고 메타데이터에서 파일의 현재 버전을 지정할 수 있습니다.새 버전의 파일을 업로드한 후 원자 업데이트에서 '최신' 상태를 나타내는 메타데이터 필드를 업데이트할 수 있으며 필요한 경우 나중에 이전 버전을 제거할 수 있습니다.

파일이 모두 16 MiB BSON 문서 크기 제한보다 작은 경우 GridFS 사용하는 대신 각 파일 단일 문서 에 저장하는 것이 좋습니다. BinData 데이터 유형 사용하여 바이너리 데이터를 저장 . BinData 사용에 대한 자세한 내용은 드라이버 설명서를 참조하세요.

GridFS를 사용하여 파일을 저장하고 검색하려면 다음 중 하나를 사용하세요:

  • MongoDB 드라이버입니다. 드라이버에서 GridFS를 사용하는 방법에 대한 자세한 내용은 드라이버 문서를 참조하세요.

  • mongofiles 명령줄 도구입니다. 자세한 내용은 mongofiles 참조 문서에서 확인할 수 있습니다.

GridFS는 파일을 다음과 같은 두 개의 컬렉션에 저장합니다.

  • chunks 바이너리 청크를 저장합니다. 자세한 내용은 chunks 컬렉션을 참조하세요.

  • files 파일의 메타데이터를 저장합니다. 자세한 내용은 files 컬렉션을 참조하세요.

GridFS는 각 버킷 앞에 이름을 지정해 공통 버킷에 컬렉션을 배치합니다. 기본적으로 GridFS는 fs라는 이름이 지정된 버킷이 포함된 컬렉션 두 개를 사용합니다.

  • fs.files

  • fs.chunks

다른 버킷 이름을 선택할 수 있을 뿐만 아니라 단일 데이터베이스에 여러 버킷을 생성할 수도 있습니다. 버킷 이름을 포함한 전체 컬렉션 이름에는 네임스페이스 길이제한이 적용됩니다.

chunks [1] 컬렉션의 각 문서는 GridFS에서 표현되는 별개의 파일 청크를 나타냅니다. 이 컬렉션의 문서 양식은 다음과 같습니다. 이 컬렉션의 문서 양식은 다음과 같습니다.

{
"_id" : <ObjectId>,
"files_id" : <ObjectId>,
"n" : <num>,
"data" : <binary>
}

컬렉션 chunks 문서에는 다음 필드가 포함되어 있습니다.

chunks._id

청크의 고유 ObjectId입니다.

chunks.files_id

_id 컬렉션에 명시된 '상위' 문서의 files입니다.

chunks.n

청크의 시퀀스 번호입니다. GridFS는 0부터 시작하여 모든 청크에 번호를 매깁니다.

chunks.data

청크의 페이로드는 BSON Binary 유형입니다.

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.length

문서의 크기(바이트)입니다.

files.chunkSize

각 청크의 크기(바이트)입니다. GridFS는 마지막 청크를 제외하고 문서를 필요한 크기의 청크 chunkSize로 나눕니다. 기본값 크기는 255KiB입니다.

files.uploadDate

문서가 GridFS에 처음 저장된 날짜입니다. 이 값은 Date 유형입니다.

files.md5

더 이상 사용되지 않습니다.

MD5 알고리즘은 FIPS 140-2에 의해 금지되어 있습니다. MongoDB 드라이버는 MD5 지원을 중단하고 향후 릴리스에서 MD5 생성을 제거할 예정입니다. 파일 다이제스트가 필요한 애플리케이션은 이를 GridFS 외부에서 구현하고 files.metadata에 저장해야 합니다.

명령에 의해 반환된 전체 파일 filemd5 의 MD 해시입니다. 이 값의5 String 유형은 입니다.

files.filename

선택 사항. 사람이 읽을 수 있는 GridFS 파일의 이름입니다.

files.contentType

더 이상 사용되지 않습니다.

선택 사항GridFS 파일에 유효한 MIME 유형입니다. 애플리케이션 전용입니다.

GridFS 파일의 MIME 유형과 관련된 정보를 저장하려면 files.metadata를 사용하세요.

files.aliases

더 이상 사용되지 않습니다.

선택 사항. 별칭 문자열의 배열입니다. 애플리케이션 전용입니다.

별칭 정보를 저장하려면 files.metadata 를 사용합니다.

files.metadata

선택 사항. 메타데이터 필드 모든 데이터 유형 수 있으며 저장 하려는 추가 정보를 보유할 수 있습니다. files 컬렉션 의 문서에 임의의 필드를 추가하려면 메타데이터 필드 의 객체 에 추가합니다.

GridFS 효율성 위해 및 컬렉션 각각에 인덱스를 chunks files 사용합니다. GridFS 사양을 준수하는 드라이버는 이러한 인덱스를 자동으로 생성합니다. 애플리케이션 에 맞게 추가 인덱스를 생성할 수도 있습니다.

GridFS는 files_idn 필드를 사용하여 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 } );

GridFSfilenameuploadDate 필드로 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 에는files 및 의 두 가지 컬렉션을 고려해야 chunks 합니다.

chunks 컬렉션을 샤딩하려면 { files_id : 1, n : 1 } 또는 { files_id : 1 }을(를) 샤드 키 인덱스로 사용합니다. files_idObjectId이며 단조롭게 변경됩니다.

업로드 성공적인 를 확인하기 위해 를 실행 하지 filemd5 않는 MongoDB 드라이버의 경우 컬렉션 chunks 에 해시 샤딩 사용할 수 있습니다.

MongoDB 운전자 를 실행하는 경우 해시 filemd5 샤딩 사용할 수 없습니다. 자세한 내용은 서버-9888 를 참조하세요.

files 컬렉션은 크기가 작고 메타데이터만 포함되어 있습니다. GridFS에 필요한 키 중 어느 것도 샤드된 환경에서 균등하게 배포되는 데 적합하지 않습니다. files를 샤딩되지 않은 상태로 두면 모든 파일 메타데이터 문서를 하나의 샤드에 보관할 수 있습니다.

files 컬렉션을 반드시 샤딩해야 하는 경우 가능하면 애플리케이션 필드와 함께 _id 필드를 사용합니다.

돌아가기

Google Cloud KMS

이 페이지의 내용