Time Series 컬렉션 고려 사항
시계열 컬렉션은 일반적으로 일반 컬렉션처럼 작동하지만 몇 가지 예외가 있습니다. Time Series time series 컬렉션 동작 및 구조에 대한 자세한 내용은 Time Series 컬렉션을 참조하세요.
metaField 고려 사항
은 metaField
거의 변경되지 않으며 모든 데이터 유형 이 될 수 있습니다. 는 metaField
객체 일 수 있으며 하위 필드를 포함할 수 있습니다. 필드 를 으로 정의한 후에는 metaField
값을 변경할 수 metaField
있지만 를 metaField
다른 필드 로 재정의할 수는 없습니다. 예를 예시 필드 로 정의된 time series 문서를 만들 때 metaField
A
필드 를 나중에 필드 B
를 로 변환할 수 metaField
없습니다 . 그러나 값이 A
객체 인 경우 에 새 하위 필드를 추가할 수 A
있습니다.
참고
배열 을 metaField
로 사용하면 배열 의 동등성이 특정 순서에 따라 달라지기 때문에 예기치 않은 컬렉션 동작이 발생할 수 있습니다.
MongoDB 는 효율적인 조직 및 검색을 위해 metaField
를 사용하여 데이터를 분할합니다. time series 컬렉션 을 만들면 MongoDB 는 문서를 버킷으로 그룹화합니다. 버킷 내의 문서는 동일한 metaField
값을 주식 하며 서로 가까운 timeField
값을 가지고 있습니다.
time series 컬렉션 의 버킷 수는 고유한 metaField
값의 수에 따라 달라집니다. 세분화된 또는 동적 metaField
값을 가진 컬렉션은 거의 또는 전혀 변경되지 않는 간단한 metaField
값을 가진 컬렉션보다 더 많고 희박하게 채워진 수명이 짧은 버킷을 생성할 수 있습니다. 세분화되고 동적인 metaField
값은 일반적으로 저장 및 쿼리 효율성을 감소시킵니다.
metaField
모범 사례
metaField의 일부로 거의 또는 전혀 변경되지 않는 필드를 선택합니다.
가능하면 필터 표현식에 공통적으로 사용되는 식별자 또는 기타 안정적인 값을 metaField의 일부로 선택하세요.
필터링에 사용되지 않는 필드는 metaField의 일부로 선택하지 마세요. 대신 해당 필드를 측정값으로 사용하세요.
스토리지 및 카디널리티
time series 컬렉션 에 데이터를 삽입하면 내부 컬렉션 이 버킷 을 사용하여 데이터를 최적화된 저장 형식으로 자동 구성합니다. 적절한 버킷이 있는 경우 MongoDB 는 해당 버킷에 새 데이터를 삽입합니다. 적합한 버킷이 없는 경우 MongoDB 는 새 버킷을 생성합니다. 저장 를 최적화하려면 거의 변경되지 않는 metaField
를 선택하여 더 적고 밀도가 높은 버킷으로 time series 컬렉션을 생성합니다.
metaField
값이 세분화되거나 변경되는 컬렉션은 희박하게 채워진 수명이 짧은 버킷을 많이 생성하여 컬렉션 의 카디널리티 를 높입니다. 카디널리티 가 증가하면 저장 및 쿼리 효율성 이 감소합니다.
세분성
granularity
매개변수를 사용하여 MongoDB 가 데이터 수집 속도에 따라 Time Series 데이터 를 버킷하는 빈도를 지정할 수 있습니다. 다음 표는 지정된 granularity
값을 사용할 때 하나의 데이터 버킷에 포함되는 최대 시간 간격을 보여줍니다.
granularity | granularity 버킷 한도 |
---|---|
seconds | 1시간 |
minutes | 24시간 |
hours | 30일 |
기본값 으로 granularity
은 seconds
로 설정하다 됩니다. granularity
값을 동일한 데이터 소스 에서 들어오는 측정값 사이의 시간 범위와 가장 가까운 값으로 설정하여 성능을 개선할 수 있습니다. 예를 예시, 수천 개의 센서에서 날씨 데이터를 기록하지만 각 센서의 데이터를 5 분에 한 번만 기록 하는 경우 granularity
를 "minutes"
로 설정하다 합니다. 새 문서를 추가하는 빈도가 적을수록 거친 세분성으로 인한 저장 및 성능 이점이 커집니다.
granularity
를 hours
로 설정하면 최대 한 달 분량의 데이터 수집 이벤트가 단일 버킷으로 그룹화되어 탐색 시간이 길어지고 쿼리 속도가 느려집니다. seconds
로 설정하면 폴링 간격당 버킷이 여러 개 생성되며, 이 중 상당수는 단일 문서만 포함할 수 있습니다.
값을 선택할 때는 일반적인 쿼리도 고려해야 granularity
합니다. 예를 예시 쿼리가 1 한 번에 일 분량의 데이터를 가져올 것으로 예상되는 경우 '분'을 사용합니다. '초'와 같은 세분화된 단위는 1시간을 커버하는 버킷을 생성합니다. 이를 위해서는 동일한 데이터를 나타내는 데 더 많은 버킷이 필요하므로 저장 및 쿼리 성능에 부정적인 영향을 미칩니다. '시간'( 일 30버킷 범위가 있음)과 같이 더 거친 세분성은 한 번에 일 30 분량의 데이터를 가져온 다음 대부분의 데이터를 필터하다 하는 쿼리가 필요합니다.
압축 및 하드웨어
모든 time series 컬렉션 은 열리거나 다시 열린 버킷에 데이터를 추가할 때 압축된 버킷 형식을 사용합니다. 캐시 에서 Time Series 데이터 를 압축하면 효율적인 쿼리 성능을 유지하면서 높은 카디널리티 워크로드를 지원합니다.