MongoDB의 기본 저장 형식 BSON

  • 데이터는 BSON(Binary JSON) 형식의 문서로 저장
  • BSON 문서의 크기 제한은 16MB
  • 크기 제한을 넘기는 파일은 저장할 수 없음

 

MongoDB의 파일 저장 시스템 GridFS

  • MongoDB에 BSON 크기 제한인 16MB를 넘기는 파일을 저장하고 검색하는 데에 사용
  • 파일을 여러 개의 청크로 나누어 각각의 청크를 별도의 문서로 저장
  • 기본적으로 GridFS는 255 kB의 기본 청크 크기 → GridFS는 마지막 청크를 제외하고 파일을 255 kB의 청크로 나눔
  • MongoDB의 청크 파티셔닝: https://www.mongodb.com/ko-kr/docs/manual/core/sharding-data-partitioning/
  • GridFS는 두 개의 컬렉션을 사용하여 파일을 저장
    • fs.chunk: 바이너리 청크를 저장 
    • { "\_id" : <ObjectId>, //청크의 고유 객체 ID "files\_id" : <ObjectId>, // 청크가 속한 파일을 식별 "n" : <num>, // 청크의 순서 번호 "data" : <binary> // 실제 파일 데이터 }
    • fs.files: 파일의 메타데이터를 저장
      {
       "\_id" : <ObjectId>,
       "length" : <num>,
       "chunkSize" : <num>,
       "uploadDate" : <timestamp>,
       "filename" : <string>,
       "metadata" : <any>,
       }

 

GridFS 사용 (python)

client = MongoClient(host="localhost", port=27017)

db = client['customDB'] # 데이터베이스 생성

fs = gridfs.GridFS(db) # 생성될 DB를 지정하여 GridFS 인스턴스 생성

... # 파일 생성

file_id = fs.put(file_content, filename="custom_name") # 파일 이름 지정(선택)하여 파일 저장, 리턴 값은 저장된 파일의 id

'데이터베이스 메모' 카테고리의 다른 글

[MongoDB] 알게 된 내용 정리  (0) 2024.07.10

컬렉션에 한 번에 다수의 데이터를 삽입하는 명령

collection.insert_many(데이터들)

현재 구현 방식에서는 고유 인덱스가 겹치면 데이터를 넣지 않아야하기 때문에 Duplicate Exception을 catch하는 방식을 활용한다.

insert_many의 경우 하나의 데이터라도 Exception이 발생하면 삽입을 중단하기 때문에

collection.insert_many(데이터들, ordered=False)

매개변수 ordered를 False로 지정하여 중단이 되지 않도록 해야한다.

'데이터베이스 메모' 카테고리의 다른 글

[MongoDB] MongoDB에 파일 저장하기 - GridFS  (0) 2024.07.16

+ Recent posts