2017-01-20 9 views
0

내 응용 프로그램은 CrateDB에 성능 시계열 데이터를 저장하고 설정 권한을 얻으려면 몇 가지 질문이 있습니다. 하루에 약 72M 개의 레코드가되므로 제대로 조정해야합니다. :) 내 목표는 Grafana와 결과 데이터를 시각화하는 것입니다 현재 내가 마음에 다음과 같은 구조를 가지고 :CrateDB에 성능 데이터를 저장하는 가장 좋은 방법은 무엇입니까?

CREATE TABLE metrics (
    ts TIMESTAMP, 
    hostname STRING, 
    servicename STRING, 
    perfdata OBJECT(DYNAMIC) 
) 

// for example 
{ 
    "hostname": "localhost", 
    "servicename": "ping", 
    "timestamp": 1483699527, 
    "perfdata": { 
     "rta": { 
      "current": 0.5, 
      "unit": "ms", 
      "warn": 100, 
      "critical": 200 
     }, 
     "pl": { 
      "current": 0, 
      "unit": "%", 
      "warn": 10, 
      "crit": 20 
     } 
    } 
} 

중요한 비트는 호스트 -/서비스 이름, 메트릭의 이름과 값 및 타임 스탬프됩니다. 대체 스키마가 될 수도 있습니다.

CREATE TABLE metrics (
    ts TIMESTAMP, 
    hostname STRING, 
    servicename STRING, 
    metric OBJECT(DYNAMIC) AS (
     unit STRING, 
     name STRING, 
     value DOUBLE, 
    )  
) 

데이터를 저장하는 기본 방법은 어느 것입니까? 파티셔닝도 필요합니까? 내 집계는 일반적으로 지난 24 시간 및 드물게 마지막 달을 보여줍니다.

감사합니다!

답변

0

일반적으로 두 번째 테이블 스키마을 사용하는 것이 좋습니다. 간단하고 사용자가 실제로 필요로하는 데이터를 수집하는 대신 원시 데이터를 캡처 할 수 있기 때문입니다.

그러나 실제 요구 사항에 많이 의존하기 때문에이 질문은 매우 까다 롭습니다. 그래서 본질적으로 결합 된 스키마는 업데이트가 까다로울 뿐이며 (객체는 교체 만 가능하고 업데이트되지 않음) 데이터를 함께 보내야합니다 (동일한 속도로 수집 될 수도 있습니다).

이 외에도 partitioning을 설정하는 것이 유용 할 수 있습니다. 이렇게하면 쿼리 속도를 높이고 change the number of shards for future partitions을 사용할 수 있습니다. 일반적으로 월 또는 주별로 파티션을 나누는 것이 좋으며 경우에 따라 하루 단위로 파티션을 나누는 것도 일반적인 방법입니다. 그러나 파편 수가 폭발하는 것을 막기 위해주의해야합니다. 파편에도 시스템 리소스가 필요합니다. CrateDB가 Grafana와 아주 잘 작동

datasource plugin :

0

덕분에 지금이 일을보고 난 perdata (Nagios의)와 cratedb 주변에 연주했습니다. mongodb timeseries 데모를 기반으로 테스트 한 결과 시간당 저장하고 perfdata [ts] = {perf object} (실제로 perfdata [ '초'] = {}) 테스트했습니다.

24 시간 스키마는/당신이 을 perfdata [ '시간'] [ '분'] 호스트/서비스에 대한 기본 키를 정의하여 그래서

것 '중복 키 갱신에 ..'그래서

호스트/서비스/시간별 쿼리는 하나의 쿼리에 불과합니다 .-)