Архив метки: торрент трекера

Работа с базой — Убираем лишнее .

Долго и упорно смотрел на таблицу checkcomm и придумывал её назначение , после прохождения 20 минут , так и не придумал . А если оно и не надо , то на кой его держать в базе ?! Будем избавляться .

Читать далее

Оптимизация announce , при помощи memcached

Не давно публиковал статью , затем вторую о том как мне удалось снизить нагрузку на сервак , путем скрещивания announce с memcached + оптимизация запросов .

Предлагаю Вам приобрести данный мод .

Читать далее

announce + memcache — наращиваем пимпу

И все таки , после трех часов манипуляции кода , решения головоломок , тестирования , мне удалось скрестить этих двух нимфоманок .
Теперь после всей проведенной работы над announce.php могу смело заявить что растянул себе письку и сейчас я буду ей хвастаться ! 😆
Читать далее

Оптимизация трекера — сообщеньки !

И так , продолжим . Теперь у нас на сервере есть установленый memcached , вууухууу , зупер .  Начнем его использовать по назначению и первой жертвой будут сообщеньки .

Запрос выглядит следующим образом  —

  if ($msgalert && $CURUSER) {
		$res = sql_query("SELECT COUNT(*) FROM messages WHERE receiver = " . $CURUSER["id"] . " AND unread='yes'") or die("OopppsY!");
		$arr = mysql_fetch_row($res);
		$unread = $arr[0];
	  }

Че он делает ?! Он проверяет, есть ли у пользователя непрочитанные личные сообщения и если таковые имеются , то оповещают его о сие чуде .
Читать далее

Оптимизация трекера — Начало !

Думаю пора приступать и начнем с самых малых азов .

Сегодня мы будем приручать запрос ,  который постоянно долбит базу ,  сообщая ип и время последнего визита пользователя на сайте  .

Запрос этот выглядит следующим образом :

sql_query("UPDATE users SET last_access = ".sqlesc(get_date_time()).", ip = ".sqlesc($ip)." WHERE id=" . $row["id"]);// or die(mysql_error());

То есть , при переходе юзера по страницам , система каждый раз долбит базу одним и тем же запросом —
Вот посмотри , пользователь три секунды назад был тут и ип у него такой . Нахер оно нам надо ?

Сократим время обновления базы о юзере , сделаем это при помощи сессий ( $_SESSION ).  Обновление данных проходит раз в 5 минут , что с экономит пару (а то и сотню) тысяч запросов в сутки , таким образом снимим нагрузку на mysql .

Что нам для этого надо ? Пишем код , который будет добавлять в сессию время последнего визитата пользователя и обновления базы данных , затем по истечению 5 минут , если пользователь все еще активно рыскает по сайту то по истечению установленого времени  разрешаем обновить данные в базе .

Код выглядит следующим образом :

if((!isset($_SESSION['last_access'])) or ($_SESSION['last_access'] < time() - 300)){
	$_SESSION['last_access'] = time();
	@sql_query("UPDATE LOW_PRIORITY users SET last_access = ".sqlesc(get_date_time()).", ip = ".sqlesc($ip)." WHERE id=" . $row["id"]);// or die(mysql_error());
	}

Что мы тут видим ?!

Проверка существует ли сессия и когда она была обновлена последний раз . 300 это время в секундах , они же 5 минут , я считаю что это оптимальный вариант .

if((!isset($_SESSION['last_access'])) or ($_SESSION['last_access'] < time() - 300))

Далее , если даже сессии не существует , то мы ее создадим и укажем в ней время обновления

$_SESSION['last_access'] = time();

Ну и сам запрос в базу данных на обновление информации о юзвере .

@sql_query("UPDATE LOW_PRIORITY users SET last_access = ".sqlesc(get_date_time()).", ip = ".sqlesc($ip)." WHERE id=" . $row["id"]);// or die(mysql_error());

Так же запрос немного модифицирован , к команде обновления UPDATE добавлен ключ LOW_PRIORITY . Что это ?

Если указывается ключевое слово LOW_PRIORITY, то выполнение данной команды UPDATE задерживается до тех пор, пока другие клиенты не завершат чтение этой таблицы.

Вот в принципе и все .

Если кто то имеет более оптимальный вариант , пишите .
В разработке кода мне помог reketir , за что ему отдельное спасибо .