Time Series 컬렉션 고려 사항
Time Series 컬렉션은 일반적으로 일반 컬렉션처럼 동작하지만 몇 가지 예외가 있습니다. Time Series 수집 동작 및 구조에 대한 자세한 내용은 Time Series 컬렉션을 참조하세요.
metaField 고려 사항
metaField
는 거의 변경되지 않으며 모든 데이터 유형이 될 수 있습니다. metaField
는 객체가 될 수 있으며 하위 필드를 포함할 수 있습니다. 필드를 metaField
로 정의한 후에는 metaField
값을 변경할 수 있지만 metaField
를 다른 필드로 재정의할 수는 없습니다. 예를 들어 필드 A
로 정의된 metaField
를 사용하여 Time Series 문서를 만들면 나중에 B
필드를 metaField
로 변환할 수 없습니다. 하지만 A
의 값이 객체인 경우 A
에 새로운 하위 필드를 추가할 수 있습니다.
참고
배열을 metaField
로 사용하면 배열 같음이 특정 순서에 따라 달라지기 때문에 예기치 않은 컬렉션 동작이 발생할 수 있습니다.
MongoDB는 데이터를 효율적으로 구성하고 검색하기 위해 metaField
를 사용하여 데이터를 분할합니다. Time Series 컬렉션을 만들면 MongoDB는 문서를 버킷으로 그룹화합니다. 버킷 내의 문서는 동일한 metaField
값을 공유하며 서로 가까운 timeField
값을 갖습니다.
Time Series 컬렉션의 버킷 수는 고유한 metaField
값의 수에 따라 달라집니다. 세분화되거나 동적인 metaField
값을 가진 컬렉션은 간단한 metaField
값을 가진 컬렉션보다 더 많고 반약하게 압축된 수명이 짧은 버킷을 생성할 수 있습니다. 세분화되고 동적인 metaField
값은 일반적으로 저장 및 쿼리 효율성을 감소시킵니다.
metaField
모범 사례
metaField의 일부로 거의 또는 전혀 변경되지 않는 필드를 선택합니다.
가능한 경우 metaField의 일부로 필터 표현식에서 공통적으로 사용되는 식별자나 다른 안정적인 값을 선택하십시오.
필터링에 사용되지 않는 필드는 metaField의 일부로 선택하지 마세요. 대신 해당 필드를 측정값으로 사용하세요.
스토리지 및 카디널리티
시계열 컬렉션에 데이터를 삽입하면 내부 컬렉션이 버킷을 사용하여 데이터를 최적화된 저장소 형식으로 자동 구성합니다. 적합한 버킷이 있는 경우 MongoDB는 새 데이터를 해당 버킷에 삽입합니다. 적합한 버킷이 없으면 MongoDB는 새 버킷을 만듭니다. 스토리지를 최적화하려면 거의 변경되지 않는 metaField
옵션을 선택하여 더 적고 밀도가 높은 버킷으로 시계열 컬렉션을 만드세요.
metaField
값이 세분화되거나 변경되는 컬렉션은 데이터가 희박하고 수명이 짧은 많은 버킷을 생성하여 컬렉션의 카디널리티를 증가시킵니다. 카디널리티가 증가하면 스토리지 및 쿼리 효율성이 감소합니다.
세분성
granularity
매개변수를 사용하여 데이터 수집 속도에 따라 MongoDB가 타임 시리즈 데이터를 얼마나 자주 버킷으로 묶을지를 지정할 수 있습니다. 다음 표는 지정된 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 컬렉션은 데이터를 열린 버킷이나 다시 열린 버킷에 추가할 때 압축된 버킷 형식을 사용합니다. 캐시에서 Time Series 데이터를 압축하면 효율적인 쿼리 성능을 유지하면서 높은 카디널리티 워크로드를 지원할 수 있습니다.