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

Форум MySQL

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Случайное значение внутри группы

Сообщения:  [1-10]    [11-20]   [21-30]   [31-40]  [41-43] 

 
 автор: Phantom   (26.08.2011 в 09:24)   письмо автору
 
   для: Valick   (26.08.2011 в 08:51)
 

InnoDB же

  Ответить  
 
 автор: Valick   (26.08.2011 в 08:51)   письмо автору
 
   для: Phantom   (25.08.2011 в 17:27)
 

у вас тип таблицы какой?

  Ответить  
 
 автор: Phantom   (25.08.2011 в 17:27)   письмо автору
 
   для: Valick   (25.08.2011 в 17:19)
 

Ещё вопрос. Очень плохо будет если в запрос на выборку случайных ссылок я вставлю FOR UPDATE и заключу в транзакцию этот запрос и UPDATE показов? Просто если не использовать FOR UPDATE, возникает эффект гонки. Запускал в цикле код в 30 параллельных потоков, в итоге количество показов часто получается больше, чем указанный лимит (всего лишь на один показ, но всё же нехорошо). С FOR UPDATE всё работает вроде как надо, но медленнее на общем фоне, если использовать 30 параллельных клиентов, что и понятно, так как таблица блокируется даже для выборки.

  Ответить  
 
 автор: Valick   (25.08.2011 в 17:19)   письмо автору
 
   для: Phantom   (25.08.2011 в 16:59)
 

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

  Ответить  
 
 автор: Phantom   (25.08.2011 в 16:59)   письмо автору
 
   для: Valick   (25.08.2011 в 16:19)
 

Помню эту тему =) Как давно это было. Странно, что вы её нашли.

>> Будь моя воля, я бы Вам приказал книги читать ;)

Таки почитал трошки :D :D :D

Мне не хочется делать буферную таблицу. Сейчас я делаю исключительно для себя и я знаю, что статистика будет не нужна. Да и сисадмин моего хостинга мне руки оторвёт, если узнает, что я инсетры в таблицу фигачу при каждом показе рекламных ссылок. Например на каждой странице сайта показывается 5 рекламных ссылок. Это пять инсертов при каждом посещении страницы. Таблица будет быстро раздуваться. Да и если пересчитывать допустим раз в сутки данные этой таблицы и заносить в таблицу статистики, то в течении текущего дня нельзя будет посмотреть статистику, а это бывает очень важно для рекламодателей. Ну вообще-то можно при просмотре статистики учитывать ещё и данные из буферной таблицы. Но всё равно мне кажется лучше просто увеличивать поле-счётчик в таблице статистики.

>> составной индекс UNIQUE (`link_id`,`time`) - скорее всего лично я бы так не сделал

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

  Ответить  
 
 автор: Valick   (25.08.2011 в 16:19)   письмо автору
 
   для: Phantom   (25.08.2011 в 14:54)
 

позвольте слегка освежить вам память :)
много можно почерпнуть из той темы, в частности буферную таблицу, куда можно инсёртить в темную голову
и кстати если пока не нужна статистика по браузерам или чему-то другому, все равно лучше проектировать таблицу так чтобы при необходимости это можно было легко добавить.
составной индекс UNIQUE (`link_id`,`time`) - скорее всего лично я бы так не сделал

  Ответить  
 
 автор: Phantom   (25.08.2011 в 14:54)   письмо автору
 
   для: Valick   (21.08.2011 в 17:46)
 

Как вы наверно уже догадались, запрос должен показывать ротацию рекламы на сайте. Я вот сейчас думаю, как лучше реализовать статистику. Статистика по браузерам и IP не нужна. Нужны только показы и переходы. Минимальная единица учёта: 1 час. Я сейчас сделал такую таблицу:
      CREATE TABLE `statistics`( 
        `link_id` int(11) unsigned not null default 0, 
        `time` DATETIME, 
        `number_of_shows` int(11) unsigned not null default 0, 
        `number_of_hits` int(11) unsigned not null default 0, 
        UNIQUE (`link_id`,`time`) 
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 

time устанавливается с интервалом в один час, то есть строки в таблице будут примерно такие:
 link_id | time                | number_of_shows | number_of_hits 
------------------------------------------------------------------
 1       | 2011-08-23 14:00:00 | 134             | 12             
 2       | 2011-08-23 14:00:00 | 110             | 11             
 3       | 2011-08-23 14:00:00 | 112             | 8             
 1       | 2011-08-23 15:00:00 | 234             | 19             
 3       | 2011-08-23 15:00:00 | 345             | 32             
 1       | 2011-08-23 16:00:00 | 123             | 13             
 1       | 2011-08-23 17:00:00 | 543             | 24             
 1       | 2011-08-23 18:00:00 | 534             | 28             
------------------------------------------------------------------

Уникальный составной индекс UNIQUE (`link_id`,`time`) обеспечивает, чтобы каждой ссылке (link_id) в каждый час (time) соответствовала одна строка (ну или вообще ни одной), ну и по этим полям будет статистика выбираться, так что индекс в любом случае нужен.
При каждом показе какой-либо ссылки нужно увеличить поле number_of_shows на 1 (точно так же и с переходами, но с полем number_of_hits). Решалось бы просто апдейтом. Но проблема в том, что строки может и не быть, если в данный час с данной ссылки ещё не было ни одного показа или перехода. То есть при первом показе или переходе нужно не апдейтить, а создавать строку. В MySQL есть такая конструкция:
          INSERT 
          INTO `statistics` 
          (`link_id`,`time`,`number_of_shows`,`number_of_hits`) 
          VALUES (...), (...), (...) 
          ON DUPLICATE KEY 
          UPDATE `number_of_shows`=`number_of_shows`+1 

где (...), (...), (...) - это список данных для обновляемых/вставляемых ссылок (так как за один раз показывается несколько ссылок и обновлять показы для них всех одновременно нужно. Эта конструкция работает, но я не знаю оптимально ли? Насколько велики накладные расходы в подобном запросе. По сути инсерт будет выполняться один раз в час для каждой ссылки (либо вообще не будет, если ссылка в течении часа показана не будет), а вот апдейт уже при всех последующих показах данной ссылки в рамках данного часа.

  Ответить  
 
 автор: Phantom   (25.08.2011 в 14:35)   письмо автору
 
   для: Valick   (25.08.2011 в 12:27)
 

22 года исполнилось. Я в общем-то пить и не начинал. Мог выпить шампанское или рюмку вина на большом празднике, но вот уже года четыре вообще не пью. =)

  Ответить  
 
 автор: Valick   (25.08.2011 в 12:27)   письмо автору
 
   для: Phantom   (23.08.2011 в 21:37)
 

а лет сколько если не секрет? и как давно бросили пить?))

  Ответить  
 
 автор: Phantom   (23.08.2011 в 21:37)   письмо автору
 
   для: Valick   (23.08.2011 в 17:26)
 

У меня каждый день повод не выпить. Даже сегодня. Я из принципа не пью спиртного. =) Спасибо за поздравление.

  Ответить  

Сообщения:  [1-10]    [11-20]   [21-30]   [31-40]  [41-43] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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