MongoDB Bucket Pattern

2024. 12. 23. 19:22·개발

The Bucket Pattern

  • 타임시리즈 데이터를 효율적으로 저장하고 읽기 성능을 최적화하기 위해 데이터를 그룹화하여 저장하는 디자인 패턴

 

Main Idea

  • 데이터를 일정 범위(시간, 범위, 키)에 따라 그룹화하여 하나의 문서에 저장. 다수의 작은 문서 대신, 관련 데이터를 하나의 버킷에 모아 읽기/쓰기 성능을 최적화


Additional

  • 그룹화 기준은 무엇으로 할 것인가?
    • 조직id 별로 매출을 모아서 확인할 수 있어야함
    • 모든 조직에 대한 매출 합계를 확인할 수 있어야함
  • 하나의 bucket에 들어가는 데이터의 양은 어떻게 할 것인가?!
    • 하나의 문서에는 16MB를 초과하지 않아야함
    • 16MB의 크기는 어느정도일까?!
      • timestamp 는 약 20바이트
{
  "_id": "sensor1",
  "bucketStart": "2024-12-19T10:00:00Z",
  "bucketEnd": "2024-12-19T10:10:00Z",
  "metadata": { "location": "Seoul", "deviceType": "sensor" },
  "data": [
    { "timestamp": "2024-12-19T10:00:00Z", "value": 30.5, "quality": "GOOD" },
    { "timestamp": "2024-12-19T10:01:00Z", "value": 31.0, "quality": "GOOD" },
    ...
  ]
}
  • 위 구조에서는 한 항목당 68바이트 정도의 데이터를 갖음
  • 16MB에 저장 가능한 데이터는 246829개의 항목이 됨
  • 그렇다면 분 당 약 4114개의 데이터를 넣을 수 있음
  • 다만 최대 크기가 16MB이니 이를 꽉채워 사용하는 것보단 여유를 두고 사용하는 것이 좋을 것 같음
  • 현 개발 중인 서버에서 분당 요청이 많아도 100단위이기 때문에 bucket의 최대 사이즈는 크게 고민하지 않아도 될 것 같음__
  • 어떤 단위로 버킷을 쪼갤지?
    • 정답은 없음. 어떤 단위로 쪼갤지에 대한 근거만 있으면 됨.
    • 글로벌 서비스를 운영하는 경우에는 한시간 단위로 bucket을 생성하는 것이 직관적인 계산하는데 편하지 않을까 싶음.

번외 

  • mongodb에서 document 크기를 확인하는 명령어
    • db.collection.findOne({}).bsonsize()
저작자표시 비영리 동일조건 (새창열림)

'개발' 카테고리의 다른 글

Spring Retry  (0) 2024.12.23
견고한 MSA  (1) 2024.12.23
고민 4일차  (1) 2024.12.20
어떤 것을 개선할 것인가?  (4) 2024.12.16
맨날 헷갈리는 파이썬 deque 문법  (1) 2024.12.14
'개발' 카테고리의 다른 글
  • Spring Retry
  • 견고한 MSA
  • 고민 4일차
  • 어떤 것을 개선할 것인가?
senyalog
senyalog
개발 블로그 https://github.com/iamyunjuda
  • senyalog
    Senya의 개발 블로그
    senyalog
  • 전체
    오늘
    어제
    • 분류 전체보기 (77)
      • 일상 (6)
      • 알고리즘 이론 (14)
        • 백준 (8)
      • 개발 (47)
        • Server (7)
        • 인턴 (11)
        • Javascript (0)
      • 경제 (4)
  • 블로그 메뉴

    • Github
    • 홈
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    MSA
    깃
    인턴
    백준문제
    TypeScript
    코딩
    인턴생활
    C++
    개발
    공대생
    알고리즘
    nestjs
    개발자
    일상
    GIT
    백엔드
    개발공부
    대학생
    서버
    공부
    백준풀이
    이마고웍스
    컴공
    경제
    생각
    백준
    알고리즘공부
    코딩테스트
    카페
    대학생인턴
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
senyalog
MongoDB Bucket Pattern
상단으로

티스토리툴바