1. MongoDB TTL 인덱스
TTL 인덱스는 특정 시간이 지나면 도큐먼트를 자동으로 삭제하는 기능을 제공한다.
TTL 인덱스는 주로 로그 데이터나 세션 정보 등과 같이 일정 기간 후 자동으로 삭제해야 하는 데이터를 관리할 때 유용하다.
다만 TTL 인덱스 필드값에 시계열 데이터가 적재되지 않으면 지워지지 않는다.
1-1. MongoDB 인덱스 유형
유형 | 설명 |
단일 필드 인덱스 | 특정 필드에 대한 인덱스 |
복합 인덱스 | 여러 필드를 조합한 인덱스 |
해시 인덱스 | 해시된 값으로 인덱스 |
텍스트 인덱스 | 텍스트 검색을 위한 인덱스 |
2dsphere 인덱스 | 지리공간 데이터에 대한 인덱스 |
유일 인덱스 | 유일한 값만 허용 - 로컬서버 기준에 한정, 샤드서버로 데이터가 분산되는 경우에는 어플리케이션에서 처리 |
2. MongoDB 테스트 버전
유형 | 버전 | 구성 |
mongosh | 2.2.10 | |
mongodb | 7.0.12 | Config : 1개, 포트 20000 Route : 1개, 포트 20001 Shard1 : 1개, 포트 30001 Shard2 : 1개, 포트 40001 |
3. TTL 인덱스 생성
3-1. TTL인덱스 생성
TTL 인덱스를 적용하려면 인덱스 필드에 날짜/시간 데이터를 입력하고,
인덱스 생성 시 expireAfterSeconds 옵션을 지정한다.
[direct: mongos] indexDB> db.ttlIndex.createIndex( { "createdAt" : 1 }, { expireAfterSeconds : 10 } )
createdAt_1
4. TTL 인덱스에 적재 테스트
4-1. TTL 인덱스에 데이터를 적재
# 현재시간으로 데이터 적재
[direct: mongos] indexDB> db.ttlIndex.insertMany( [ { "Number" : 1 , "createdAt" : new Date() } ,
{ "Number" : 2 , "createdAt" : new Date() } ,
{ "Number" : 3 , "createdAt" : new Date() } ] )
{
acknowledged: true,
insertedIds: {
'0': ObjectId('66baf24c01027809e11b157f'),
'1': ObjectId('66baf24c01027809e11b1580'),
'2': ObjectId('66baf24c01027809e11b1581')
}
}
# 데이터 조회
[direct: mongos] indexDB> db.ttlIndex.find();
[
{
_id: ObjectId('66baf24c01027809e11b157f'),
Number: 1,
createdAt: ISODate('2024-08-13T05:42:36.666Z')
},
{
_id: ObjectId('66baf24c01027809e11b1580'),
Number: 2,
createdAt: ISODate('2024-08-13T05:42:36.666Z')
},
{
_id: ObjectId('66baf24c01027809e11b1581'),
Number: 3,
createdAt: ISODate('2024-08-13T05:42:36.666Z')
}
]
# 10초후 데이터 조회 시 결과 없음
[direct: mongos] indexDB> db.ttlIndex.find();
[direct: mongos] indexDB>
4-2. TTL 인덱스에 시계열 필드가 아닌 데이터 적재
# Number 4 의 createdAt 필드에 문자열 데이터를 적재
[direct: mongos] indexDB> db.ttlIndex.insertMany( [ { "Number" : 1 , "createdAt" : new Date() } ,
{ "Number" : 2 , "createdAt" : new Date() } ,
{ "Number" : 3 , "createdAt" : new Date() } ,
{ "Number" : 4 , "createdAt" : "Sample String" } ] )
{
acknowledged: true,
insertedIds: {
'0': ObjectId('66baf3d401027809e11b1582'),
'1': ObjectId('66baf3d401027809e11b1583'),
'2': ObjectId('66baf3d401027809e11b1584'),
'3': ObjectId('66baf3d401027809e11b1585')
}
}
# 데이터 조회
[direct: mongos] indexDB> db.ttlIndex.find();
[
{
_id: ObjectId('66baf3d401027809e11b1582'),
Number: 1,
createdAt: ISODate('2024-08-13T05:49:08.657Z')
},
{
_id: ObjectId('66baf3d401027809e11b1583'),
Number: 2,
createdAt: ISODate('2024-08-13T05:49:08.657Z')
},
{
_id: ObjectId('66baf3d401027809e11b1584'),
Number: 3,
createdAt: ISODate('2024-08-13T05:49:08.657Z')
},
{
_id: ObjectId('66baf3d401027809e11b1585'),
Number: 4,
createdAt: 'Sample String'
}
]
# 10초 후 데이터 조회 - 시계열이 아닌 데이터는 지워지지 않음
[direct: mongos] indexDB> db.ttlIndex.find();
[
{
_id: ObjectId('66baf3d401027809e11b1585'),
Number: 4,
createdAt: 'Sample String'
}
]
[direct: mongos] indexDB>
'Database > MongoDB 실습' 카테고리의 다른 글
[MongoDB] Yield 잠금 테스트 (0) | 2024.08.21 |
---|---|
[MongoDB] 글로벌 잠금 설정과 해제방법 (0) | 2024.08.21 |
[MongoDB] Partial 인덱스 생성과 주의사항 (0) | 2024.08.12 |
[MongoDB] 유니크 인덱스 생성 방법 (0) | 2024.08.12 |
[MongoDB] 전문검색 인덱스 사용법과 주의사항 (0) | 2024.08.06 |