Docs Menu
Docs Home
/
MongoDB 매뉴얼
/

Time Series 데이터 정보

이 페이지의 내용

  • Time Series 데이터의 속성
  • Time Series 컬렉션과 일반 컬렉션 비교
  • 버킷팅 작동 방식
  • metaField가 버킷팅에 미치는 영향
  • 버킷 카탈로그
  • 창조
  • 폐쇄
  • 삭제

내부적으로 MongoDB 는 일반적인 metaField 값을 기반으로 time series 컬렉션 의 문서를 그룹화하여 Time Series 데이터 를 최적화합니다. 유용한 항목을 선택하면 저장 밀도 및 쿼리 성능이 크게 최적화됩니다. 자세한 내용은 metaFields를 참조하세요.

시계열 데이터에는 다른 데이터 형식과 구별되는 몇 가지 속성이 있습니다.

  • 문서가 순서대로 도착하므로 문서를 추가하려면 삽입 작업을 자주 수행해야 합니다.

  • 각 문서 가 단일 점 을 나타내기 때문에 업데이트 작업은 거의 이루어지지 않습니다.

  • 애플리케이션 이 광범위한 기록 기록 를 보유하는 것이 도움이 되는 경우 삭제 작업은 거의 이루어지지 않습니다.

  • 데이터는 시간과 해당 데이터가 속한 고유한 Time Series를 식별하는 식별자(예: 주식 시세)를 기준으로 인덱싱됩니다.

  • 각 개별 Time Series에는 지속적으로 증가하는 많은 수의 문서가 필요하기 때문에 데이터의 볼륨이 높습니다.

이러한 요인을 고려하기 위해 MongoDB 는 각 time series의 문서를 함께 그룹화하는 특수 열 형식을 사용합니다. 다음과 같은 이점이 있습니다.

  • 저장 및 인덱스 크기 감소

  • 쿼리 효율성 향상

  • 읽기 작업을 위한 I/O 감소

  • WiredTiger 인메모리 캐시 사용량 증가, 쿼리 속도 더욱 향상

  • 시계열 데이터 작업의 복잡성 감소

일반 컬렉션 에서 데이터는 디스크에 블록으로 순차적으로 저장되어 쓰기 (write) 속도를 최적화합니다. 그러나 각 데이터 점 에 대해 하나의 인덱스 가 필요하며, 이는 매우 빠르게 증가합니다. 또한 사용자가 단일 시리즈를 쿼리 할 수 있도록 시계열 식별자와 타임스탬프 자체를 포함하는 두 번째 인덱스 가 필요합니다. 이 데이터를 읽으려면 MongoDB 는 차단 에 관련 문서 가 하나만 포함되어 있더라도 해당 데이터가 포함된 모든 데이터베이스 및 디스크 블록을 프로세스 해야 합니다.

이 모델은 CRUD 작업과 빈번한 업데이트에 최적화되어 있습니다. 은행 계좌 잔액은 현재 상태 만 반영하면 되므로 정보가 변경될 때마다 각 계정 소유자의 문서 가 업데이트됩니다.

이를 time series 컬렉션 과 비교합니다. 시계열 컬렉션은 데이터를 순서대로 쓰기 (write) 하므로 최근 트랜잭션을 메모리에 보관하여 훨씬 빠르게 검색할 수 있습니다. 순서대로 기록되기 때문에 문서가 함께 저장되므로 문서 가 더 이상 메모리에 없는 후에 모든 디스크 차단 을 읽을 필요가 없습니다. 데이터는 metaField 에 의해 인덱싱되어 인덱스가 훨씬 작아집니다.

time series 컬렉션 을 만들면 MongoDB 는 자동으로 system.buckets 시스템 컬렉션 을 만듭니다. MongoDB 는 다음 두 가지가 모두 포함된 문서를 그룹화합니다.

  • Time Series를 고유하게 식별해야 하는 동일한 metaField 값입니다. metaField 이 객체 또는 배열 인 경우 MongoDB 는 모든 객체 필드 또는 배열 요소가 일치하는 경우에만 그룹화합니다.

  • timeField 서로 가까이 있는 값입니다. time series 컬렉션의 granularity, bucketMaxSpanSecondsbucketRoundingSeconds 매개변수는 각 버킷이 다루는 시간 범위를 제어합니다. 자세한 내용 은 Time Series 데이터의 세분성 설정을 참조하세요.

예를 예시 seconds 세분성을 사용하면 MongoDB 는 같은 시간 내에 문서를 버킷합니다. 버킷에 metaField 값이 sensorA 이고 timeField 값이 2024-08-01T18:23:21Z 인 문서 가 포함된 경우 metaFieldsensorB 인 수신 문서 는 시간에 관계없이 별도의 버킷으로 이동합니다. sensorA 에서 들어오는 문서 는 timeField2024-08-01T18:00:00Z2024-08-01T18:59:59Z 사이인 경우에만 동일한 버킷으로 이동합니다.

시간이 2023-03-27T16:24:35Z인 문서가 기존 버킷에 맞지 않는 경우, MongoDB는 최소 시간이 2023-03-27T16:00:00Z이고 최대 시간이 2023-03-27T19:59:59Z인 새 버킷을 생성합니다.

참고

time series 컬렉션의 세분성을 수정할 수 있지만 버킷 적용 범위를 분 단위에서 시간 단위로 확장하는 등 더 세분화된 측정값에서 더 거친 측정값으로 변경할 수만 있습니다. 이렇게 하면 컬렉션의 뷰 정의가 업데이트되지만 기존 버킷에 데이터가 저장되는 방식은 변경되지 않습니다.

metaField 값은 그룹 문서와 정확히 일치해야 하므로 time series 컬렉션 의 버킷 수는 고유한 metaField 값의 수에 따라 달라집니다. metaField 값이 세분화되거나 변경되는 컬렉션은 희박하게 채워진 수명이 짧은 버킷을 많이 생성합니다. 이로 인해 저장 및 쿼리 효율성 이 감소합니다.

예를 예시, 다음 문서 에서 metadata 은 지정된 날씨 센서의 데이터를 쉽게 쿼리 할 수 있으므로 metaField 을 선택하는 것이 좋습니다. MongoDB 는 이러한 필드를 사용하여 단일 센서의 판독값을 함께 버킷합니다.

{
timestamp: ISODate("2021-05-18T00:00:00.000Z"),
metadata: { sensorId: 5578, type: 'temperature' },
temp: 12,
_id: ObjectId("62f11bbf1e52f124b84479ad")
}

버킷 카탈로그는 WiredTiger 의 특수 인메모리 캐시 입니다. 버킷을 추적하여 지연 시간 을 최소화하고 동시 쓰기를 조정합니다.

열려 있는 각 버킷에 대해 카탈로그는 metaField, 활성 작성자, 적용 기간, 문서 수, 크기 및 최근 작업과 같은 정보를 유지 관리합니다. MongoDB 는 metaField 이 다른 문서에 대해 별도의 버킷을 생성하기 때문에 일반적으로 여러 버킷이 동시에 열립니다.

경합 조건으로 인한 불일치를 방지하기 위해 충돌하는 작업이 실행될 때 버킷이 닫히고 버킷 카탈로그에서 제거될 수 있습니다. mongod 다시 시작하면 모든 버킷이 닫히고 버킷 카탈로그가 재설정됩니다.

  • MongoDB 는 수신 문서 에 적합한 버킷이 없는 경우 새 버킷을 생성합니다. 이는 다음 중 하나에 해당하는 경우 발생합니다.

    • metaField 문서 가 어떤 활성 버킷과도 일치하지 않습니다.

    • 문서 타임스탬프가 모든 활성 버킷의 범위 를 벗어납니다.

    • 문서 가 모든 활성 버킷의 남은 크기 또는 문서 제한을 초과합니다.

    새 버킷의 시작 타임스탬프는 컬렉션의 세분성 에 따라 반올림됩니다. 이는 타임스탬프가 순서가 맞지 않는 문서가 연속해서 도착하는 경우를 처리합니다.

MongoDB 는 다음과 같은 상황에서 버킷을 닫습니다.

  • 버킷의 경계를 벗어난 수신 문서 타임스탬프에 표시된 대로 시간이 해당 기간을 앞 또는 뒤로 이동했습니다. 이러한 경계는 컬렉션의 세분성 설정에 따라 결정됩니다.

  • 버킷이 문서 제한(기본값 1000)에 도달했습니다.

  • 버킷이 저장 크기 제한을 초과했습니다. 이는 다음과 같은 경우에 발생합니다.

    • 크기가 허용된 최대값(기본값 125KiB)을 초과합니다.

    • 문서 수가 최소 개수(기본값 10) 미만이고 크기가 12MiB 미만입니다.

      이는 데이터가 더 적은 수의 더 큰 문서로 구성된 경우 성능을 최적화하는 내부 제한 설정하다.

    • 활성 버킷 설정하다 가 허용된 스토리지 엔진 캐시 크기에 맞지 않습니다. collStats 데이터베이스 명령 을 사용하여 이 정보를 검토 할 수 있습니다.

  • 버킷 카탈로그가 허용된 총 메모리 할당량( 기본값 으로 사용 가능한 시스템 메모리의 2.5%)을 초과합니다.

  • 청크 마이그레이션 또는 업데이트 와 같이 충돌하는 작업은 버킷의 디스크 상태 를 변경합니다.

  • mongod 다시 시작합니다. 이렇게 하면 모든 버킷이 닫힙니다.

MongoDB 는 다음과 같은 경우 버킷을 삭제합니다.

돌아가기

시계열