내가 만든 모니터링 시스템의 데이터를 저장할 데이터베이스를 만들고 있습니다. 시스템은 1 분에 2 번 데이터 포인트 (~ 4000)를 가져 와서 데이터베이스에 저장합니다. 타임 스탬프를 기반으로 샘플을 다운시킬 수 있어야합니다.mysql이 여분의 값을 없애는 중
결과 : 지금 나는 세 개의 열이 하나 개의 테이블을 사용하여 계획입니다
1 point_id
2. 타임 스탬프
3. 값
때문에 쿼리가 나는 것 할 같은 것 :
SELECT point_id,
MAX(value) AS value
FROM results
WHERE timestamp BETWEEN date1 AND date2
GROUP BY point_id;
나는이 문제가 메모리와 관련하여 매우 비효율적이라고 생각합니다. 이 구조를 사용할 때마다 각 시간 스탬프는 4000 번 기록되어야하는데 이는 약간 과장된 것 같습니다. 내가 생각한 유일한 해결책은 내 데이터베이스의 메모리 사용량을 줄이기 위해 별도의 표를 사용하거나 (필자의 이해에 따르면 아주 나쁜 습관이다) CSV 파일에 데이터를 저장해야한다.이 경우 CSV 파일에 검색 코드를 작성해야한다. 데이터 (내 이해가 날 부랑자가되지 않을 필요가 ... 그리고 아마도 상당히 느린 검색). 너무 많은 중복 데이터를 저장할 필요가없는 구현할 수있는 데이터베이스 구조가 있습니까?
걱정하지 마십시오. 데이터베이스는 영리합니다. 복제는 괜찮습니다. 귀하의 구조는 건전하고 정상화되었습니다. 인덱스를 사용하면 성능 이점을 얻을 수 있습니다. 예, 반복되는 타임 스탬프에 대해 일부 저장소가 필요합니다. 테이블을 찌그러 뜨릴 필사적 인 필요가 없다면 걱정할 필요가 없습니다. –
지금 두 개의 테이블을 사용하고 있습니까? scans.timestamp와 FROM 결과는 어디에서 발생합니까? 얼마나 자주 질문합니까? 샘플링을 녹음 한 다음 최대 값을 찾는 것처럼 보입니까? 얼마나 자주 '최대'복용하고 있습니까? – terary
미안하지만, 나는 두 번째 테이블을 정규화하고 필요가 없다는 질문을 입력하는 도중에 깨달을 필요가 있다고 생각했습니다. 질의는 매우 규칙적이지는 않지만 주 단위로 이루어집니다. –