본문 바로가기
DataBase/NoSQL

[NoSQL] MongoDB capped collection, TTL collection

by 스파이디웹 2021. 1. 19.
728x90

Capped Collection

-캡드 컬렉션은 높은 성능의 로깅 기능을 위해 설계되었다.

 

-일반 컬렉션과 다른 점은 고정된 크기를 갖는다는 점이다.

 

-더 이상의 공간이 없게 되면 도큐먼트를 삽입할 때 컬렉션에 추가된 지 가장 오래된 도큐먼트를 덮어쓰게 된다.

 

-일반적인 보통 컬렉션에 모든 연산이 가능하도록 허용하지는 않는다.

 

-개별 도큐먼트를 삭제할 수 없고, 도큐먼트의 크기를 증가시키는 어떤 업데이트도 수행할 수 없다.

 

-만드는 방법

db.createCollection("컬렉션이름",{capped: true, size: 16384, max:100})

최대 크기가 16384바이트고, 최대 100도큐먼트까지 저장되는 컬렉션

 

ex)

capped 컬렉션 생성

for문을 이용하여 500개의 데이터 삽입

capped 컬렉션의 결과로 401부터 출력된다.

capped의 설정을 최대 100개의 도큐먼트로 지정했기 때문에 그 이전에 만들어진 도큐먼트들은 자동으로 삭제되고 마지막 100개의 도큐먼트를 출력하게 되는것.


TTL Collection

-컬렉션에서 특정 시간이 경과한 도큐먼트를 만료시킬 수 있는 기능

 

-특별한 인덱스를 사용하여 구현한 것.

 

-db.컬렉션이름.createIndex({키: 값}, expireAfterSeconds: 3600})

ex)

현재 데이터베이스의 ttlcol이라는 collection을 생성하고, time_field라는 인덱스를 생성한다. 그리고 옵션으로 30초 뒤에 만료되는 옵션을 설정한다.

 

time_field의 값과 현재 시간 사이에 차이가 expireAfterSeconds 설정 값보다 크게 되면 해당 도큐먼트는 자동적으로 삭제될 것이다.

 

해당 컬렉션의 time_field에 삽입 시점의 시간을 설정하게 된다.

30초가 지난 현재의 ttlcol 컬렉션의 도큐먼트는 삭제되고 갯수도 0으로 카운트된다.

 

-TTL 인덱스는 _id 필드 또는 이미 다른 인덱스에서 사용되고 있는 필드에 대해서는 TTL 인덱스를 가질 수가 없다.

 

-캡드 컬렉션에 대해서도 TTL 인덱스를 가질 수 없다.(캡드 컬렉션이 개별 도큐먼트를 삭제하는 것을 지원하지 않기 때문)

 

-인덱스 필드에 타임스탬프의 배열을 가지게 되더라도 복합 TTL 인덱스를 가질 수 없다는 점(이 경우 TTL 속성은 컬렉션의 가장 빠른 시점의 타임스탬프에 적용된다.)

 

 

728x90

댓글