Оптимизация скорости работы

DimbIch

Новичок
Оптимизация скорости работы

Здрасти.
Задача:
Посчитать сколько раз нажали на ссылку за сутки.

Что есть:
Таблица и ее структура

CREATE TABLE `kp_adv_stats` (
`id` int(10) NOT NULL auto_increment,
`adv_id` int(10) unsigned NOT NULL default '0',
`click_user` int(20) unsigned NOT NULL default '0',
// это сколько кликнули на одну ссылку
`click_link` int(20) unsigned NOT NULL default '0',
// это сколько кликнули на вторую ссылку
`date` int(10) unsigned default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Реализация имеющаяся:

PHP:
$stats = Registry::instance()->Advertisment->getTodayStats($id);
 $today = mktime(0, 0, 0, (int)date('m'), (int)date('d'), (int)date('Y'));
  if(empty($stats))  {      
$data = array();      
$data['adv_id'] = $id;
      $data['click_user'] = 0;
      $data['click_link'] = 0;
      $data['date'] = $today;
      ($action == 'user') ? $data['click_user'] = 1 : $data['click_link'] = 1;
          Registry::instance()->DB->autoExecute(PREFIX.'adv_stats', $data, DB_AUTOQUERY_INSERT);
          } 
 else
  {      
if($action == 'user') 
     {          
Registry::instance()->DB->query('UPDATE '.PREFIX.'adv_stats SET click_user = click_user+1 WHERE adv_id = ? AND date = ?', array($id, $today));
      }     
 elseif($action == 'link')      {          
Registry::instance()->DB->query('UPDATE '.PREFIX.'adv_stats SET click_link = click_link+1 WHERE adv_id = ? AND date = ?', array($id, $today));
          }  }
Как должно быть:
Если в таблице нет записи за сегодня то мы добавляем запись с нулевыми значениями. Если есть уже запись то мы увеличиваем то или иное значение на 1

Как хочеться:
как то это оптимизировать можно ?
 

DimbIch

Новичок
Demiurg
желание оптимизации данного вопроса вызвано тем что тут получается идет два запроса на каждый клик юзера (получение данных о статистике и запись новых)

хотелось бы может как то одним...потому что нагрузку на сервер это даст не малую ИМХО при посещаемости в 200000 хитов а то и более (а такое реально будет не смейтесь вопрос не в этом)

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

confguru

ExAdmin
Команда форума
Надо как минимум заменить
Registry::instance()->Advertisment->getTodayStats($id);
Registry::instance()->DB->query
на простые sql или вынести в подпрограмму - но не в класс.

Прогнать через Zendовский профайлер, определить узкие
места в коде.
 

Demiurg

Guest
DimbIch
а ты уверен, что именно этот кусок будет тормозить при больших нагрузках ?
 

neko

tеam neko
а какая связь между сокращением количества кода и скоростью?
 
Сверху