핵심 요약
MongoDB 8 시계열 컬렉션 + Atlas Search 결합으로 4억 row 이벤트 데이터 분석. TimescaleDB 대비 storage 32% 작고 query 1.4배 빠름. text 검색·범위 쿼리·집계가 한 곳. 사후.
1. 시계열 컬렉션 생성
db.createCollection("events", {
timeseries: {
timeField: "ts",
metaField: "user",
granularity: "minutes"
},
expireAfterSeconds: 90 * 86400
})
자동 bucket·columnar 저장. TTL로 자동 삭제.
2. Atlas Search 통합
같은 컬렉션에 search 인덱스 추가 → text 검색과 시계열 집계 단일 query.
db.events.aggregate([
{ $search: { text: { query: "checkout error", path: "msg" } } },
{ $match: { ts: { $gte: ISODate("2026-05-01") } } },
{ $group: { _id: "$user.region", count: { $sum: 1 } } }
])
3. 실측
| 쿼리 | MongoDB 8 | TimescaleDB |
|---|---|---|
| 1억 row 집계 | 3.8s | 5.4s |
| text+범위 | 1.2s | 4.1s |
| 저장 크기 4억 row | 82GB | 120GB |
4. 함정
- 시계열 컬렉션은 update 제한 — append-only, 정정은 보상 이벤트로
- granularity 변경 불가 — 처음 결정이 중요, seconds/minutes/hours 중
- Atlas Search 색인 — 별도 비용, 인덱스 큰 트래픽에서 disk 부담
- Postgres에서 마이그레이션 — 도구 부재, 커스텀 script

댓글 0