문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

GridFS.

이 페이지의 내용

  • GridFS를 사용해야 하는 경우
  • GridFS 사용
  • GridFS 컬렉션
  • GridFS 인덱스
  • GridFS 샤딩

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

참고

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

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

GridFS는 두 개의 컬렉션을 사용하여 파일을 저장합니다. 한 컬렉션은 파일 청크를 저장하고 다른 컬렉션은 파일 메타데이터를 저장합니다. GridFS 컬렉션 섹션에서 각 컬렉션에 대해 자세히 설명합니다.

GridFS에 파일을 쿼리하면 드라이버가 필요에 따라 청크를 재조립합니다. GridFS를 통해 저장된 파일의 범위 쿼리를 수행할 수 있습니다. 또한 동영상이나 오디오 파일 중간에 '건너뛰기'와 같이 파일의 임의 섹션에서 정보에 액세스할 수도 있습니다.

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

MongoDB에서는 16MB보다 큰 파일을 저장할 때 GridFS를 사용합니다.

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

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

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

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

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

  • mongofiles 명령줄 도구입니다. 문서는 mongofiles 참조를 참조하세요.

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

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

  • fs.files

  • fs.chunks

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

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

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

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

chunks._id

청크의 고유 객체 ID입니다.

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 객체 ID입니다.

files.length

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

files.chunkSize

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

files.uploadDate

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

files.md5

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

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

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

files.filename

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

files.contentType

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

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

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

files.aliases

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

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

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

files.metadata

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

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

GridFS는 files_idn 필드를 사용하여 chunks 컬렉션에서 고유한 복합 인덱스를 사용합니다. 이렇게 하면 다음 예제와 같이 청크를 효율적으로 조회할 수 있습니다.

db.fs.chunks.find( { files_id: myFileID } ).sort( { n: 1 } )

GridFS 사양 을 준수하는 드라이버 읽기 및 쓰기 작업 전에 이 인덱스가 존재하는지 자동으로 확인합니다. 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 사양 을 준수하는 드라이버 읽기 및 쓰기 작업 전에 이 인덱스가 존재하는지 자동으로 확인합니다. GridFS 애플리케이션의 특정 동작에 대해서는 관련 드라이버 설명서를 참조하세요.

이 인덱스가 없는 경우 mongosh 을 사용하여 다음 작업을 실행하여 인덱스를 생성할 수 있습니다.

db.fs.files.createIndex( { filename: 1, uploadDate: 1 } );
[1](1, 2) GridFS의 맥락에서 청크라는 용어의 사용은 샤딩의 맥락에서 청크라는 용어 사용과 관련이 없습니다.

GridFS와 관련하여 fileschunks의 두 가지 컬렉션을 고려해야 합니다.

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

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

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

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

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

← 저널링 관리