сверхточный счётчик

Патриот

Новичок
сверхточный счётчик

Здравствуйте, всем хорошего настроения!
Хочу сделать счётчик на MySQL, с помощью update менять кол-во посещений... Но вот возник такой вопрос:
А если скрипт с update'ом будет запущен одновременно несколькими юзерами (с точностью до секунды), не повлияет ли это на значение? Если да, то я как понимаю нужно сделать задержку выполнения скрипта и в порядке очереди выполнить всю операцию... Необходимые фун-ии не подскажете?

P.S.
Прочёл статью про то как обнуляется значение в файле, если запустить одновременно счётчик, вот и побаиваюсь не расспространяется ли это на MySQL
 

ONK

Пассивист PHPСluba
Название темы не соответствует описанной в ней проблемме.
 

voodoo

Новичок
слышь, Патриот, ты это с кем ща тут разговаривал?(c)

P.S. Про update "с точностью до секунды" даже не заморачивайся, все пучком. MySQL решит проблемы сама.

P.P.S. Статьи про "обнуляется значение в файле" выбрось и этих авторов больше никогда не читай.
 

Патриот

Новичок
Спасибо.
Но в файле значение действительно обнуляется, сам пробовал...
PHP:
   $counter=file("counter.txt"); // прочитали файл в массив $counter
   $f=fopen("counter.txt","w+"); // открыли файл на запись
   fputs($f,$counter[0]+1);      // записали "число + 1"
   fclose($f);                   // закрыли файл
   echo $counter[0]+1;           // вывели число на экран
Вот что пишут:
Если вызывать данную программу очень часто, значение счетчика иногда будет обнуляться. Это произойдет из-за того, что в некоторый момент программа прочитает из файла пустое значение, к которому потом прибавляется единица ("пусто" + число 1 = число 1). Собственно, это и есть сброс счетчика.
 

ForJest

- свежая кровь
если ты будешь писать в скрипте UPDATE Table1 SET cnt = cnt+1;
то никаких проблем со счетчиком не будет. И уж точно никогда счетчик не обнулится, как в случае с файлами.

На php.spb.ru есть статейка и про БД, кстати.
 

Demiurg

Guest
>то никаких проблем со счетчиком не будет.
будет .... представь себе апдейт с частатой 10гц, при этом блогировка, естественно, идет на всю таблицу.
 

fixxxer

К.О.
Партнер клуба
Автор оригинала: Патриот
Спасибо.
Но в файле значение действительно обнуляется, сам пробовал...
PHP:
   $counter=file("counter.txt"); // прочитали файл в массив $counter
   $f=fopen("counter.txt","w+"); // открыли файл на запись
   fputs($f,$counter[0]+1);      // записали "число + 1"
   fclose($f);                   // закрыли файл
   echo $counter[0]+1;           // вывели число на экран
Вот что пишут:
Если вызывать данную программу очень часто, значение счетчика иногда будет обнуляться. Это произойдет из-за того, что в некоторый момент программа прочитает из файла пустое значение, к которому потом прибавляется единица ("пусто" + число 1 = число 1). Собственно, это и есть сброс счетчика.
Если строчкой ниже там, где "пишут", не было написано:
"Во избежание таких ситуаций, следует лочить файлы, используя функцию [m]flock[/m]",
забудь про то место, где ты это читал.
 

Falc

Новичок
Demiurg
>>будет .... представь себе апдейт с частатой 10гц, при этом блогировка, естественно, идет на всю таблицу.

Не совсем понял о каких проблемах ты говоришь.
 

Demiurg

Guest
>Не совсем понял о каких проблемах ты говоришь.
о проблемах производительности.
 

Falc

Новичок
Demiurg
>>о проблемах производительности.
Я подозреваю, что если счетчик будет состоять только из:
UPDATE Table1 SET cnt = cnt+1
То проблем с производительностью, не будет даже с частотой апдейта 100гц.
 

Demiurg

Guest
во первых апдейты будут
UPDATE Table1 SET cnt = cnt+1 where id = $id
а во вторых - ты попробуй.
 

Falc

Новичок
>>во первых апдейты будут
>>UPDATE Table1 SET cnt = cnt+1 where id = $id
Ну это смотря сколько записей в таблице у тебя будет если 1 то where не нужен :)

>>а во вторых - ты попробуй.
Тут много зависит от железа и настройки софта. Но при хорошем железе и нормальной настроеке софта, проблем не будет.
 

Demiurg

Guest
>Ну это смотря сколько записей в таблице у тебя будет если 1 то where не нужен
ага .. таблица из одного поля и одной записи... как раз то, для чего нужны субд

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

Falc

Новичок
>>ага .. таблица из одного поля и одной записи... как раз то, для чего нужны субд
Так если посмотреть на то какой счетчик нужен автору темы, то там будет именно 1 запись :)

>>Ну да, железо стоит дешевле, чем время программиста. Тоже выход.
;)
 

Demiurg

Guest
>Так если посмотреть на то какой счетчик нужен автору темы, то там будет именно 1 запись
Чесно говоря, мне так не показалось.
 

Falc

Новичок
>>Чесно говоря, мне так не показалось
В качестве примера он привел код счетчика который просто инкрементит одно число. И насколько я понял мускул ему нужен только для того что бы избежать проблем с обнулением :)
 

Патриот

Новичок
>И насколько я понял мускул ему нужен только для того что бы избежать проблем с обнулением

на самом деле мне просто с MySQL проще :)
 
Сверху