매시간 온도 판독 값을 매 30 분마다 동물 보호소의 여러 동물 케이지에서 수집하여 파일로 버립니다. cron은 해당 데이터를 처리하여이를 MYSQL 데이터베이스에 삽입합니다. 현재 하루 48 건의 온도 판독 값이 모두 하나의 테이블에 저장되고 데이터가 들어올 때 업데이트됩니다. 또는 레코드가 없으면 첫 번째 온도를 저장하는 새 레코드가 만들어집니다.MYSQL에 온도 값 모음을 저장하는 가장 효율적인 방법은 무엇입니까?
현재 케이지 정보 표와 케이지 온도 판독 표가 있습니다. 우리의 실제 갯수는 45 개입니다. 보유한 데이터의 양은 7 년입니다 (대략 2557 일). 온도 테이블의 총 레코드 수는 다음과 같습니다. 115,065
시스템에 다른 위치와 추가 케이지가 추가되므로 전체 케이지 수가 1,000보다 커집니다. 우리는 데이터 사용이 매우 빠르게 성장할 것으로 기대합니다.
아래 표를 구성하여 읽기 속도를 최적화하는 효율적인 방법이 있습니까? 이 데이터는 매일 아침 표시되는 모든 케이지의 그래프를 생성하고 30 분의 cron을 사용하여 케이지 내부의 통풍이 적절하지 않은지 확인합니다.
CREATE TABLE `temperature_readings` (
`CAGE_ID` int(10) NOT NULL DEFAULT '0',
`INT_VALUE_0000` decimal(5,2) DEFAULT NULL,
`INT_VALUE_0030` decimal(5,2) DEFAULT NULL,
`INT_VALUE_0100` decimal(5,2) DEFAULT NULL,
`INT_VALUE_0130` decimal(5,2) DEFAULT NULL,
`INT_VALUE_0200` decimal(5,2) DEFAULT NULL,
`INT_VALUE_0230` decimal(5,2) DEFAULT NULL,
`INT_VALUE_0300` decimal(5,2) DEFAULT NULL,
`INT_VALUE_0330` decimal(5,2) DEFAULT NULL,
`INT_VALUE_0400` decimal(5,2) DEFAULT NULL,
`INT_VALUE_0430` decimal(5,2) DEFAULT NULL,
`INT_VALUE_0500` decimal(5,2) DEFAULT NULL,
`INT_VALUE_0530` decimal(5,2) DEFAULT NULL,
`INT_VALUE_0600` decimal(5,2) DEFAULT NULL,
`INT_VALUE_0630` decimal(5,2) DEFAULT NULL,
`INT_VALUE_0700` decimal(5,2) DEFAULT NULL,
`INT_VALUE_0730` decimal(5,2) DEFAULT NULL,
`INT_VALUE_0800` decimal(5,2) DEFAULT NULL,
`INT_VALUE_0830` decimal(5,2) DEFAULT NULL,
`INT_VALUE_0900` decimal(5,2) DEFAULT NULL,
`INT_VALUE_0930` decimal(5,2) DEFAULT NULL,
`INT_VALUE_1000` decimal(5,2) DEFAULT NULL,
`INT_VALUE_1030` decimal(5,2) DEFAULT NULL,
`INT_VALUE_1100` decimal(5,2) DEFAULT NULL,
`INT_VALUE_1130` decimal(5,2) DEFAULT NULL,
`INT_VALUE_1200` decimal(5,2) DEFAULT NULL,
`INT_VALUE_1230` decimal(5,2) DEFAULT NULL,
`INT_VALUE_1300` decimal(5,2) DEFAULT NULL,
`INT_VALUE_1330` decimal(5,2) DEFAULT NULL,
`INT_VALUE_1400` decimal(5,2) DEFAULT NULL,
`INT_VALUE_1430` decimal(5,2) DEFAULT NULL,
`INT_VALUE_1500` decimal(5,2) DEFAULT NULL,
`INT_VALUE_1530` decimal(5,2) DEFAULT NULL,
`INT_VALUE_1600` decimal(5,2) DEFAULT NULL,
`INT_VALUE_1630` decimal(5,2) DEFAULT NULL,
`INT_VALUE_1700` decimal(5,2) DEFAULT NULL,
`INT_VALUE_1730` decimal(5,2) DEFAULT NULL,
`INT_VALUE_1800` decimal(5,2) DEFAULT NULL,
`INT_VALUE_1830` decimal(5,2) DEFAULT NULL,
`INT_VALUE_1900` decimal(5,2) DEFAULT NULL,
`INT_VALUE_1930` decimal(5,2) DEFAULT NULL,
`INT_VALUE_2000` decimal(5,2) DEFAULT NULL,
`INT_VALUE_2030` decimal(5,2) DEFAULT NULL,
`INT_VALUE_2100` decimal(5,2) DEFAULT NULL,
`INT_VALUE_2130` decimal(5,2) DEFAULT NULL,
`INT_VALUE_2200` decimal(5,2) DEFAULT NULL,
`INT_VALUE_2230` decimal(5,2) DEFAULT NULL,
`INT_VALUE_2300` decimal(5,2) DEFAULT NULL,
`INT_VALUE_2330` decimal(5,2) DEFAULT NULL,
PRIMARY KEY (`CAGE_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
내 생각과 같은
halfhour_read{
- cage_id
- datetime
- temperature reading
}
또는 해시 temperature_readings 중 하나 cage_id하여 halfhour_read 테이블에 여러 개의 온도 측정을 정상화하는 중이었다, 또는 :
현재 온도 테이블은 다음과 같습니다 오늘 (날짜)를 분할하여 분할합니다.
내가 이해하는 한, 첫 번째 옵션은 레코드 수를 115,065에서 5,523,120으로 늘려서 비교할 때 빠르게 증가하여 향후 공간 문제를 발생시킵니다.
왜 7 년의 역사를 유지해야합니까? –
@ 짐 가르온, 나도 몰라, 과학?!?!?!? –
현실적으로 7 년은 필요하지 않지만 적어도 2 년은 이미 우리가 가진 것입니다. 데이터 캡처의 급격한 증가로 인해 기본 데이터베이스가 현재 구성되어있는 방식을 다시 고려해야합니다. 우리는 매일 최소 1,000 회의 완전한 판독 (48 시간 반 온도 간격)을 얻게 될 것입니다. – Bill