1 時間ごとの温度測定値は、動物保護施設のいくつかの動物ケージから 30 分ごとに収集され、ファイルにダンプされます。cron はそのデータを処理し、MYSQL データベースに挿入します。現在、その日の 48 の温度測定値はすべて 1 つのテーブルに保存されており、データが入ってくると更新されます。レコードが存在しない場合は、最初の温度を保存する新しいレコードが作成されます。
現在、ケージ情報用のテーブルとケージ温度測定値用のテーブルがあります。ケージの総数は 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 テーブルに正規化することでした
halfhour_read{
- cage_id
- datetime
- temperature reading
}
または、それがパーティション化されるように、cage_id または今日 (日付) のいずれかで temperature_readings をハッシュします。
私が理解している限り、最初のオプションはレコード数を 115,065 から 5,523,120 に増やし、比較すると急速に増加し、将来のスペースの問題を引き起こします。