LINUX.ORG.RU

[mysql][ajax]Оптимизация

 ,


0

1

Мне необходимо выводить на страницах людей часто обновляющиеся данные. Данные хранятся в БД MySQL.
Сейчас все в разработке, на странице обновляющийся с помощью Ajax div, который при каждом своем обновлении берет данные из базы. Но это создает очень большую нагрузку на сервер.
Подскажите, как не совершать лишние движения и выбирать данные, только когда они реально обновились?


покажешь может быть запорос и структуру бд?
вообще, при одинаковых запросах должен спасти кэш мускула.

fr_butch
()

Подскажите, как не совершать лишние движения и выбирать данные, только когда они реально обновились?

Мне кажется, тут любой ответ будет репликой капитана. Или нет? Что конкретно тебе не очевидно?

baverman ★★★
()

long polling какой-нибудь

xorik ★★★★★
()
Ответ на: комментарий от fr_butch

вообще, при одинаковых запросах должен спасти кэш мускула.

Вообще, надеются на мускул, только дураки.

baverman ★★★
()
Ответ на: комментарий от fr_butch

2 таблицы, в одной входящие звонки, в другой id клиентов и их телефоны.

$result = mysql_query("SELECT * FROM ".TBL_INCOMMING." WHERE `destination` = '".$_POST['dest']."' ORDER BY `id` DESC LIMIT 5");
	echo "<div>Ваш номер: <b>".$_POST['dest']."</b></div>";
	while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
		$result2 = mysql_query("SELECT `id_peoples` FROM `phones` WHERE `name` LIKE '".substr($row['source'], 5, 6)."'");
		$client = "";
		while ($row2 = mysql_fetch_array($result2, MYSQL_ASSOC)) {
			$client .= "<a target=_blank href=\"peoples/?id=".$row2['id_peoples']."&mode=edit\">".$row2['id_peoples']."</a> ";
		}
		mysql_free_result($result2);
		echo $row['source']." <sup>".substr($row['date'], 11, 8)."</sup> ".$client."<br>";
	}
	mysql_free_result($result);

tuxin
() автор топика

Zend_Cache. Можно и установить срок жизни кеша, и сбрасываеть его при изменении.

В dbSimple тоже есть кеширование.

OldFornit
()
Ответ на: комментарий от random_linux_user

Мне бы узнавать без запросов, изменилась таблица или нет. Триггеры с вызовом внешних данных пригодились бы.

tuxin
() автор топика
Ответ на: комментарий от tuxin

Мне бы узнавать без запросов, изменилась таблица или нет.

Она сама по себе что-ли меняется?

baverman ★★★
()
Ответ на: комментарий от KRoN73

Cache

Ты же такой опытный разработчик, как можешь советовать кеш в качестве решения? Тем более задача, не как побыстрее отдать, а как не обновлять, если изменений не было.

baverman ★★★
()
Ответ на: комментарий от baverman

>Ты же такой опытный разработчик, как можешь советовать кеш в качестве решения?

Я не советую, я наоборот предостерегаю от неудачного выбора кеша ;)

Но кеш, кстати, — это по-любому штука, без которой в общем случае вообще фиг проживёшь :D

а как не обновлять, если изменений не было


Если обновление в базе сам делаешь — то слать инициацию обновления из тех мест, где она обновляется. Если база модифицируется кем-то на стороне, то один периодический процесс проверки (фактически выборка максимального ID или таймштампа и проверка с предыдущим) и, опять же, рассылка нотификации. Так что это, как раз, вообще не вопрос.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Так что это, как раз, вообще не вопрос.

Как посмотреть. Мне кажется, ТС вообще ни в зуб ногой.

baverman ★★★
()
Ответ на: комментарий от baverman

Исходный вопрос был: «Мне необходимо выводить на страницах людей часто обновляющиеся данные». Сервер сам может рассказать когда данные обновились и незачем его дергать постоянно с вопросом «ну как там данные, не обновились?».

x-term ★★
()
Ответ на: комментарий от x-term

Сервер сам может рассказать когда данные обновились

Если ты не заметил, то в этом и суть вопроса.

baverman ★★★
()
Ответ на: комментарий от x-term

Как же он ему расскажет? Он же написал: «хваленый mysql». Внимательней читай.

GateKeeper ★★
()

Всегда брать из мемкэша, его обновлять раз в N минут (секунд), забить на актуальность.

SOmni ★★
()
Ответ на: комментарий от tuxin

> 2 таблицы, в одной входящие звонки, в другой id клиентов и их телефоны.

Я аж стопку кирпичей отложил когда это увидел. Вперемежку PHP, HTML и SQL. Не надо так делать.

karbofos
()

По сабжу. Во-первых, правильно расставь ключи по столбцам. Во-вторых, в общем случае в JS-переменной на странице хранится ID последней отданной записи. После чего AJAX- и SQL-запросами выдёргиваются только те ID'ы, которые появились после хранимого в JS ID'а, после чего последняя обновляется на последний принятый ID.

karbofos
()
Ответ на: комментарий от karbofos

Ага, я уж было подумал, что это один из разработчиков mantis. У них код 1в1 такой же :)

drakmail ★★★★
()

седлай паджинатор - LIMIT очень ускоряет выборку (во всяком случае для PostgreSQL)

JFreeM ★★★☆
()
Ответ на: комментарий от OldFornit

>на типовом хостинге только в него вляпаться и можно

Это на совсем бесплатном, что ли? Уже на каком-нибудь «трёхрублёвом» обычно хоть mysql какой-то есть. А для чего-то чуть более серьзного, где кеш реально нужен, уже и VDS можно взять, воткнув хотя бы memcache.

KRoN73 ★★★★★
()

Сделал раз в секунду проверку базы на новые звонки. Новые звонки дописываю в файлы со старыми. На один внутренний номер один файл, старые звонки удаляются. Отдаю в браузер чуть разукрашенную статику.
Просто, думал, уже есть какие-то изкоробочные решения с MySQL.

tuxin
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.