Мне нужна ваша помощь, чтобы правильно построить мою БД.
Мне нужно хранить значения температуры и времени для разных комнат моего дома, и я хочу использовать DyGraph для построения графиков наборов данных. Я хочу реализовать разные временные окна: 1 час, 24 часа, 48 часов, 1 неделя, ....
Я буду определять температуру с 15-минутным интервалом, поэтому у меня будет 4 значения времени-температуры в час. Каждая комната имеет идентификатор, поэтому значения времени и температуры будут связаны с соответствующей комнатой.
Таблица, которую я построил, очень проста:
----------------------------------
| ID | DATE | TEMP |
----------------------------------
| 1 |2014-04-30 00:00:00 | 18.6 |
----------------------------------
| 2 |2014-04-30 00:00:00 | 18.3 |
----------------------------------
| 3 |2014-04-30 00:00:00 | 18.3 |
----------------------------------
| 1 |2014-04-30 00:15:00 | 18.5 |
----------------------------------
По какой-то странной причине, когда количество строк достигает 500 или около того, сервер становится очень медленным. Кроме того, у меня есть веб-страница, на которой я могу читать разные температуры в комнатах: эта страница опрашивает сервер через AJAX каждые 5 секунд (потому что ее нужно часто обновлять!), но когда количество строк таблицы становится около 500, он зависает.
Я попытался разделить таблицу и создал таблицу для каждой комнаты, затем таблицу для каждого временного окна, и теперь все работает нормально.
Поскольку я не думаю, что это лучший/самый эффективный способ организовать это, мне нужна ваша помощь, чтобы придать ему лучшую структуру.
Я использую php-скрипт для получения данных о температуре во всех комнатах моего дома:
$query = "SELECT * FROM temperature t1
WHERE (id, date) IN
(SELECT id,MAX(date) FROM
temperature t2 GROUP BY id)";
этот запрос позволяет мне собирать значения температуры в массив с именем $options:
$result_set = mysql_query($query, $connection);
while($rows = mysql_fetch_array($result_set)){
$options [] = $rows;
}
затем я json-кодирую массив:
$j = json_encode($options);
и отправить его в ajax-скрипт, который показывает данные на веб-странице:
echo $j;
В сценарии ajax я сохраняю данные в переменной, а затем анализирую их:
var return_data = xhr.responseText;
var temperature = JSON.parse(return_data);
затем я перебираю массив, чтобы извлечь значения температуры и поместить их в нужное место на веб-странице:
for(var j=0; j<temperature.length; j++){
document.getElementById("TEMPArea" + j).innerHTML = temperature[j].temp + "°C";
}
Это работает нормально, пока количество строк в таблице 'temperature' меньше 600 или около того: опрос каждые 5 секунд не является проблемой. Выше 600 обновление страницы становится медленным и в конечном итоге зависает и перестает обновляться.
РЕДАКТИРОВАТЬ: Сейчас я работаю над виртуальной машиной с 64-битной Windows 7, Apache, PHP и MySQL, 4 ГБ ОЗУ. Как вы думаете, это может быть проблемой?