SNMP를 사용하여 (아마도) 5 분 간격으로 CPU 사용률, 디스크 사용률, 온도 등과 같은 다양한 메트릭스에 대한 데이터를 위해 장치를 폴링하는 시스템을 만들고 있습니다. 궁극적 인 목표는 시계열 그래프 형식으로 시스템 사용자에게 시각화를 제공하는 것입니다.
과거에는 RRDTool을 사용하는 것을 살펴 봤지만 캡처 된 데이터를 무기한으로 저장하는 것이 프로젝트에 중요하므로 거부했으며 캡처 된 데이터에 대한 높은 수준의 유연한 액세스를 원합니다. 그래서 내 질문은 정말로 :
더 좋은 점은 그래프로 데이터를 쿼리 할 때 성능과 관련하여 관계형 데이터베이스 (예 : MySQL 또는 PostgreSQL) 또는 관계형 또는 NoSQL 데이터베이스 (예 : MongoDB 또는 Redis)입니다.
관계형
관계형 데이터베이스가 주어지면 data_instances
테이블을 사용합니다.이 테이블에는 모든 장치에 대해 측정되는 모든 메트릭에 대해 캡처 된 모든 데이터 인스턴스가 다음 필드와 함께 저장됩니다.
필드: id
fk_to_device
fk_to_metric
metric_value
timestamp
특정 장치에서 특정 메트릭에 대한 그래프를 그리려면이 단일 테이블을 쿼리 하여 다른 장치를 필터링 하고이 장치에 대해 분석되는 다른 메트릭을 쿼리해야합니다 .
SELECT metric_value, timestamp FROM data_instances
WHERE fk_to_device=1 AND fk_to_metric=2
이 테이블의 행 수는 다음과 같습니다.
d * m_d * f * t
여기서 d
의 개수 장치 , m_d
축적이다 메트릭 수가 , 모든 기기에 기록되지 f
는 IS 주파수 데이터 및 폴링되는 t
총량 인 시각 시스템이 데이터를 수집하고있다.
1 년 동안 5 분마다 3 개의 장치에 대해 10 개의 메트릭을 기록하는 사용자의 경우 5 백만 건 미만의 레코드를 갖게 됩니다.
인덱스
의 인덱스없이 fk_to_device
하고 fk_to_metric
이 지속적으로 확대 테이블을 스캔하는 것은 너무 많은 시간이 걸릴 것이다. 따라서 위에서 언급 한 필드를 색인화하고 timestamp
(현지화 된 기간으로 그래프를 작성하기위한) 요구 사항입니다.
비 관계형 (NoSQL)
MongoDB는 테이블을 설정하지 않고 프로그래밍 방식으로 만들 수있는 테이블과 달리 컬렉션 개념을 가지고 있습니다. 이를 통해 각 장치의 데이터 스토리지 또는 각 장치에 대해 기록 된 각 메트릭을 분할 할 수있었습니다.
나는 NoSQL에 대한 경험이 없으며 인덱싱과 같은 쿼리 성능 향상 기능을 제공하는지 여부를 알지 못하지만 이전 단락에서는 NoSQL에서 데이터가 저장되는 구조에서 전통적인 관계형 쿼리 작업의 대부분을 제안합니다.
미정
올바른 인덱싱을 사용하는 관계형 솔루션이 1 년 안에 크롤링으로 줄어 듭니까? 또는 NoSQL 접근 방식의 수집 기반 구조 (저장된 데이터의 정신적 모델과 일치)가 눈에 띄는 이점을 제공합니까?