문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ /

고정 사이즈 컬렉션

이 페이지의 내용

  • 개요
  • 행동
  • 제한 사항 및 권장 사항
  • 절차

고정 사이즈 컬렉션은 삽입 순서에 따라 문서를 삽입하고 조회하는 고처리량 작업을 지원하는 고정 크기 컬렉션입니다. 고정 사이즈 컬렉션은 순환 버퍼와 유사한 방식으로 작동합니다. 컬렉션이 할당된 공간을 채우면 컬렉션에서 가장 오래된 문서를 덮어써 새 문서를 위한 공간을 만듭니다.

고정 사이즈 컬렉션 생성에 대한 자세한 내용은 createCollection() 또는 create을 참조하세요.

고정 사이즈 컬렉션에 대한 대안으로 MongoDB의 TTL(Time To Live) 인덱스를 고려해 보세요. TTL 설정을 통해 컬렉션에서 데이터 만료에 설명된 대로 이러한 인덱스를 사용하면 날짜로 입력된 필드 값과 인덱스의 TTL 값을 기반으로 일반 컬렉션에서 데이터를 만료하고 제거할 수 있습니다.

TTL 인덱스는 고정 사이즈 컬렉션과 호환되지 않습니다. 컬렉션에 인덱스를 만들 수 있지만 mongod 은 만료된 문서를 삭제하지 않습니다.

고정 사이즈 컬렉션은 삽입 순서의 보존을 보장합니다. 따라서 쿼리는 인덱스가 없어도 삽입 순서대로 문서를 반환할 수 있습니다. 이러한 인덱싱 오버헤드가 없으면 고정 사이즈 컬렉션은 더 높은 삽입 처리량을 지원할 수 있습니다.

고정 사이즈 컬렉션은 새로운 문서를 위한 공간을 확보하기 위해 스크립트나 명시적인 제거 작업 없이 컬렉션에서 가장 오래된 문서를 자동으로 제거합니다.

고정 사이즈 컬렉션에 사용할 수 있는 다음과 같은 사용 사례를 살펴 보세요.

  • 대용량 시스템에서 생성된 로그 정보를 저장합니다. 인덱스 없이 고정 사이즈 컬렉션에 문서를 삽입하는 것은 로그 정보를 파일 시스템에 직접 쓰는 속도에 가깝습니다. 또한 기본 제공 선입선출 속성은 저장 사용을 관리하면서 이벤트 순서를 유지합니다.

  • 소량의 데이터를 고정 사이즈 컬렉션에 캐시합니다. 캐시는 쓰기보다는 읽기에 중점을 두기 때문에, 이 컬렉션이 항상 작업 세트(즉, RAM)에 남아 있는지 확인하거나 또는 필요한 인덱스에 대해 약간의 쓰기 페널티를 감수해야 합니다.

예를 들어, 복제본 세트에 작업 로그를 저장하는 복제본 세트 Oplog 는 고정 사이즈 컬렉션을 사용합니다. 다른 고정 사이즈 컬렉션과 달리 Oplog는 삭제를 방지하기 위해 구성된 크기 제한을 초과하여 커질 수 있습니다.majority commit point

고정 사이즈 컬렉션은 기본 설정에 따라 _id 필드 및 _id 필드의 인덱스를 포함합니다.

MongoDB 5.0부터는 제한 컬렉션에서 읽을 때 읽기 "snapshot" 우려를 사용할 수 없습니다.

고정 사이즈 컬렉션의 문서를 업데이트하려는 경우 이러한 업데이트 작업에 컬렉션 검색이 필요하지 않도록 인덱스를 생성합니다.

업데이트 또는 교체 작업으로 인해 문서 크기가 변경되면 작업이 실패합니다.

고정 사이즈 컬렉션은 샤드할 수 없습니다.

자연 순서를 사용하여 컬렉션에서 가장 최근에 삽입된 요소를 효율적으로 조회합니다. 이는 로그 파일에서 tail 명령을 사용하는 것과 유사합니다.

애그리게이션 파이프라인 단계 $out에서는 고정 사이즈 컬렉션에 결과를 작성할 수 없습니다.

트랜잭션 에서 고정사이즈 컬렉션에 쓸 수 없습니다.

스테이블 API V1에서는 고정 사이즈 컬렉션이 지원되지 않습니다.

명령의 헬퍼인 mongosh 메서드를 db.createCollection() 사용하여 고정 create 사이즈 컬렉션을 명시적으로 생성해야 합니다. 고정 사이즈 컬렉션을 만들 때는 MongoDB가 컬렉션에 미리 할당하는 컬렉션의 최대 크기를 바이트 단위로 지정해야 합니다. 고정 사이즈 컬렉션의 크기에는 내부 오버헤드를 위한 작은 공간이 포함됩니다.

db.createCollection( "log", { capped: true, size: 100000 } )

size 필드가 4096 보다 작거나 같으면 collection의 한도는 4096 바이트입니다. 그렇지 않으면 MongoDB는 제공된 크기를 늘려 256 의 정수 배수로 만듭니다.

또한 다음 문서와 같이 max 필드를 사용한 컬렉션에 대한 최대 문서 수를 지정할 수도 있습니다.

db.createCollection("log", { capped : true, size : 5242880, max : 5000 } )

중요

size 인수는 max 문서 수를 지정하는 경우에도 항상 필수입니다. MongoDB는 collection이 최대 문서 수에 도달하기 전에 최대 크기 제한에 도달하는 경우 오래된 문서를 제거합니다.

참조:

순서를 지정하지 않고 고정 사이즈 컬렉션에서 find()를 수행하는 경우 MongoDB는 결과 순서를 삽입 순서와 동일하게 정렬합니다.

문서를 역삽입 순서로 검색하려면 다음 예제에서와 같이 $natural 매개 변수가 -1로 설정된 sort() 메서드와 함께 find()를 실행합니다.

db.cappedCollection.find().sort( { $natural: -1 } )

다음과 같이 isCapped() 메서드를 사용하여 컬렉션의 사이즈 제한을 확인합니다:

db.collection.isCapped()

convertToCapped 명령을 사용하여 비고정 사이즈 컬렉션을 고정 사이즈 컬렉션으로 변환할 수 있습니다:

db.runCommand({"convertToCapped": "mycoll", size: 100000});

size 매개변수는 고정 사이즈 컬렉션의 크기를 바이트 단위로 지정합니다.

이는 작업 기간 동안 데이터베이스 독점 잠금을 보유합니다. 동일한 데이터베이스에 잠금을 적용한 다른 작업은 해당 작업이 완료될 때까지 차단됩니다. 데이터베이스에 잠금을 적용하는 작업에 관한 내용은 일반적인 클라이언트 작업에서 어떤 잠금을 사용하나요?를 확인하세요.

고정 사이즈 컬렉션에 테일 커서를 사용할 수 있습니다. Unix tail -f 명령과 유사하게 테일 커서는 고정 사이즈 컬렉션의 끝부분부터 계속 이어집니다. 새 문서가 고정 사이즈 컬렉션에 삽입되면 테일 커서를 사용하여 계속해서 문서를 조회할 수 있습니다.

테일 커서 생성 방법을 알아보려면 테일 커서를 참조하세요.

← 뷰를 사용하여 두 컬렉션에 참여