Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Что лучше база или сессия?
 
 автор: tvv123456   (17.03.2011 в 09:26)   письмо автору
 
 

Доброго времени суток.
Читал где-то, что при оптимизации скрипта стараються уменьшить количество запросов к базе.
Задача:
В БД есть 2 таблицы users И friends, нужно подсчитать и показать в пользовательском меню сколько других юзеров хотят добавить его в друзья. Я сделал 2 варианта:
1 при равторизации пользователя усложнил запрос и занес в сессию количество таких пользователей(как-то так):


<?
//
mysql_query(SELECT users.id,COUNT(friends.id) as count_new_friends FROM users LEFT join friends
ON 
(users.id=friends.second AND friends.status=0)  WHERE users.login='tvv' AND 
users.pass='e10adc3949ba59abbe56e057f20f883e' AND users.mail_rel='1' GROUP BY users.id);
// ну ниже непосредственно обработка(прошла ли авторизация и прочее) 
//и занос count_new_friends - в сессию



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

Второй вариант:

<?
mysql_query
("SELECT COUNT(id) FROM friends WHERE second=2 AND status=0");
// ну и ниже оформляем страничку

преимущество: простой и достаточно быстрый запрос, не нужно лезть в файл сессии каждый раз
недостаток: вызываеться при каждой обращении к странице

Что меня смущает: насколько я знаю обращение к файлу достаточно медленный процесс и что лучше: каждый раз дергать базу или сессию?

  Ответить  
 
 автор: Ирбис   (17.03.2011 в 10:07)   письмо автору
 
   для: tvv123456   (17.03.2011 в 09:26)
 

Если для вас так важна скорость, то выполните профилирование:
замерьте время, потраченное на авторизацию и выяснения количества друзей в первом и во втором случаи.
<?php
$start_time 
microtime(TRUE);

//Ваш код

$end_time microtime(TRUE);
echo 
$end_time $start_time;
?>

После этого будет видно какой вариант быстрее работает.

У первого варианта есть один недочёт: Если кто-то из пользователей захочет добавить человека в друзья, пока тот будет онлайн, то человек этого не увидит, т.к. при первом запросе этой заявки не было, а дальнейшие проверки, пока человек онлайн не производятся.

PS Советую всегда чётко определяться с приоритетами при выполнении проекта. Что важнее? Скорость работы скрипта или высокая читабельность его кода? Это позволит быстро принимать решения в подобных ситуациях.

  Ответить  
 
 автор: tvv123456   (17.03.2011 в 11:33)   письмо автору
 
   для: Ирбис   (17.03.2011 в 10:07)
 

Замер времени в данном случае мало что даст потому, что это будет зависеть от хостинга: например сервер mysql может распологаться на другом физическом сервере и время работы базы тут во многом будет зависеть от мощности данного сервера и его загрузки в данный момент.

А тот недочет который вы написали и который не учел я(насчет того что если человек он-лайн, то он не увидит новых друзей пока не перезайдет), скорее всего заставит сделать выбор в пользу второго варианта.

  Ответить  
 
 автор: Саня   (17.03.2011 в 12:27)   письмо автору
 
   для: tvv123456   (17.03.2011 в 11:33)
 

А база данных где хранит данные? На диске в файлах. Так что вы променяете шило на мыло, если будете хранить сессии в базе. Другое дело, если сессии в базе облегчают вам какую-либо работу.

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

  Ответить  
 
 автор: tvv123456   (17.03.2011 в 13:26)   письмо автору
 
   для: Саня   (17.03.2011 в 12:27)
 

> Другое дело, если сессии в базе облегчают вам какую-либо работу.
Вы немного не поняли вопроса. никто не собираеться хранить сессии в базе, вопрос скорей всего стоял так: какой вариант будет лучше экономить ресурсы.

Вообщем-то я уже определился с вариантом, так как первый способ имеет один существенный недостаток(если человек он-лайн, то ему не покажеться уведомление о новых друзьях)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования