Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 일반 컬렉션을 Capped 컬렉션으로 변환하는 방법

MongoDB에서 이미 생성된 일반 컬렉션을 Capped(고정 크기) 컬렉션으로 변환하려면 runCommand() 메서드를 사용해야 합니다. 이 메서드는 지정한 데이터베이스 명령을 실행할 수 있는 헬퍼(helper) 기능을 제공합니다.

Capped 컬렉션은 삽입 순서를 유지하며, 설정된 최대 크기를 초과하면 가장 오래된 문서부터 자동으로 덮어써지는 특수한 컬렉션입니다. 로그 데이터나 최근 정보만 유지하면 되는 경우에 유용하게 활용됩니다.

1단계: 테스트용 컬렉션 생성

먼저 문서를 포함하는 일반 컬렉션을 만들어 보겠습니다.

> db.demo416.insertOne({"StudentName":"David"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e723a7bb912067e57771adf")
}
> db.demo416.insertOne({"StudentName":"Mike"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e723a81b912067e57771ae0")
}
> db.demo416.insertOne({"StudentName":"Sam"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e723a84b912067e57771ae1")
}

2단계: find()로 문서 확인하기

find() 메서드를 사용하여 컬렉션의 모든 문서를 조회합니다.

> db.demo416.find();

위 쿼리는 다음과 같은 결과를 출력합니다.

{ "_id" : ObjectId("5e723a7bb912067e57771adf"), "StudentName" : "David" }
{ "_id" : ObjectId("5e723a81b912067e57771ae0"), "StudentName" : "Mike" }
{ "_id" : ObjectId("5e723a84b912067e57771ae1"), "StudentName" : "Sam" }

3단계: convertToCapped 명령으로 변환하기

이제 runCommand()convertToCapped 옵션을 전달하여 컬렉션을 Capped 형태로 변환합니다. size 값은 바이트 단위의 최대 크기를 의미합니다.

> db.runCommand( { convertToCapped: 'demo416', size: 100} );
{ "ok" : 1 }

결과가 { "ok" : 1 }로 반환되면 변환이 성공적으로 완료된 것입니다.

4단계: stats()로 변환 결과 검증하기

stats() 메서드를 호출하여 컬렉션이 실제로 Capped로 변환되었는지 확인할 수 있습니다.

> db.demo416.stats();

출력 결과 중 핵심 필드는 다음과 같습니다.

{
   "ns" : "test.demo416",
   "size" : 132,
   "count" : 3,
   "avgObjSize" : 44,
   "storageSize" : 16384,
   "capped" : true,
   "max" : -1,
   "maxSize" : 256,
   ...
}

출력 결과에서 "capped" : true 항목을 확인하면 컬렉션이 성공적으로 Capped 컬렉션으로 변환되었음을 알 수 있습니다. 또한 maxSize 필드에는 지정한 최대 크기가 반영됩니다.

Capped 컬렉션 변환 시 주의사항

  • 크기 제한: size 옵션은 바이트 단위이며, MongoDB는 지정된 크기를 256바이트 단위로 올림하여 적용합니다.
  • 문서 수 제한: 필요하다면 convertToCapped 명령에 max 옵션을 추가하여 저장 가능한 최대 문서 수도 함께 지정할 수 있습니다.
  • TTL 인덱스와 병행 불가: Capped 컬렉션은 TTL(Time-To-Live) 인덱스를 사용할 수 없으므로, 만료 기반 삭제가 필요하다면 일반 컬렉션과 TTL 인덱스 조합을 고려해야 합니다.
  • 업데이트 제약: Capped 컬렉션에서는 문서 크기를 늘리는 업데이트 작업이 허용되지 않습니다.

이처럼 runCommand()convertToCapped 명령을 활용하면 기존 컬렉션의 데이터를 그대로 유지하면서 손쉽게 Capped 컬렉션으로 전환할 수 있습니다.