Реклама на сайте Advertise with us

Подсчёт кликов

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

xxx

С нами с 17.10.02
Сообщения: 1355
Рейтинг: 744

Ссылка на сообщениеДобавлено: 22/07/11 в 13:52       Ответить с цитатойцитата 

подскажите, плиз, как грамотно реализовать?

задача такая - есть 150 ссылок,
in.php?id=1
in.php?id=2
..
in.php?id=150

надо считать количество кликов по ним за час, потом обнулять и заново.
сделал 150 файлов, в зависимости от ссылки из in.php открываю нужный файл и увеличиваю число там находящееся.

будет-ли это нормально работать на большом трафе? 10-20К/час?
просто не пойму как это всё будет функционировать при большом количестве одновременных запросов к файлам.
или как-то лучше по-другому сделать?

0
 



С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970

Ссылка на сообщениеДобавлено: 22/07/11 в 14:22       Ответить с цитатойцитата 

Грамотный флок поможет.

Код: [развернуть]


Либо пиши в один файл, через аппенд, и раз в час считывай.

4
 

xxx

С нами с 17.10.02
Сообщения: 1355
Рейтинг: 744

Ссылка на сообщениеДобавлено: 22/07/11 в 18:52       Ответить с цитатойцитата 

gimcnuk писал:
Грамотный флок поможет.


спасибо smail54.gif

0
 



С нами с 20.02.06
Сообщения: 248
Рейтинг: 366

Ссылка на сообщениеДобавлено: 23/07/11 в 00:09       Ответить с цитатойцитата 

20к в час - это большой траф? Шутишь? всего ~6 запросов в секунду. с файлами вариант может не прокатить в зависимости от ОС/ФС. Советую реализовать с помощью БД

2
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 23/07/11 в 06:51       Ответить с цитатойцитата 

CABMIT писал:
20к в час - это большой траф? Шутишь? всего ~6 запросов в секунду. с файлами вариант может не прокатить в зависимости от ОС/ФС. Советую реализовать с помощью БД


особенно если хард напрягается
+100 за БД в мемкешеде smail54.gif

4
 



С нами с 03.02.09
Сообщения: 139
Рейтинг: 235

Ссылка на сообщениеДобавлено: 23/07/11 в 08:36       Ответить с цитатойцитата 

Реализовывать это на файлах очень порочная идея, никакие flock тут не помогут, поскольку клиент может закрыть соединение в любой момент и apache просто прибьет процесс PHP, это может случиться в любом месте, например между ftruncate($fp, 0); и fwrite($fp, $result); кроме того скорость работы такого скрипта будет ниже плинтуса - 4 IO операции на запрос, в боевой ситуации на дешевом железе вы можете рассчитывать на ~ 100 IO/s и того получаем пик производительности 100/4 = 25 запросов в секунду. Конечно ОС будет объединять операции, но нужно думать головой, а не полагаться на случай.

БД тоже не самый лучший вариант для этого, оптимально использовать атомарные операции в разделяемой памяти, например при помощи расширения APC - http://www.php.net/manual/en/function.apc-inc.php
Такая операция будет атомарна, без блокировок и использования медленных ресурсов типа HDD

5
 



С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970

Ссылка на сообщениеДобавлено: 23/07/11 в 13:33       Ответить с цитатойцитата 

iRoot писал:
Реализовывать это на файлах очень порочная идея, никакие flock тут не помогут, поскольку клиент может закрыть соединение в любой момент и apache просто прибьет процесс PHP, это может случиться в любом месте, например между ftruncate($fp, 0); и fwrite($fp, $result);

Погонял на трёх хостингах с ignore_user_abort(false). Не прибивают в промежутке, файл нормально закрывается, данные держатся.

Цитата:

БД тоже не самый лучший вариант для этого, оптимально использовать атомарные операции в разделяемой памяти, например при помощи расширения APC - http://www.php.net/manual/en/function.apc-inc.php
Такая операция будет атомарна, без блокировок и использования медленных ресурсов типа HDD

А расширение не везде стоит.

Sven: на всякий случай поставь ignore_user_abort(true);

4
 



С нами с 21.09.03
Сообщения: 7329
Рейтинг: 2144

Ссылка на сообщениеДобавлено: 23/07/11 в 14:15       Ответить с цитатойцитата 

Честно говоря, не совсем понятны все эти пляски, если достаточно простого grep -c на лог апача. Или тут просто задача понавешать ненужных функций, что бы сервер обосрался? icon_smile.gif

Моя подпись.

0
 



С нами с 03.02.09
Сообщения: 139
Рейтинг: 235

Ссылка на сообщениеДобавлено: 23/07/11 в 14:28       Ответить с цитатойцитата 

gimcnuk писал:
Погонял на трёх хостингах с ignore_user_abort(false). Не прибивают в промежутке, файл нормально закрывается, данные держатся.

Ну за 5 минут ты ничего и не поймаешь, за более продолжительный срок глюки будут обязательно. Да и ты смотрель iostat сервера в это время? Отдавать все ресурсы сервера под +1 операции как-то слишком расточительно на мой взгляд.

gimcnuk писал:
А расширение не везде стоит.

Оно ставится везде без особых проблем, это же не на shared-хостинге 20к в час собираются гонять. Кроме того это не единственный вариант, memcached, mongodb, etc. поддерживают атомарные операции, выбор есть, что больше нравится то и ставится.

1
 

no sign

С нами с 25.07.03
Сообщения: 3623
Рейтинг: 1403

Ссылка на сообщениеДобавлено: 23/07/11 в 14:45       Ответить с цитатойцитата 

я в свое время реализовывал это с демоном icon_smile.gif
ну правда тогда и запросов было реально больше
грубо говоря скрипт через сокет просто скидывал данные о запросе демону и забывал об этом
а демон накопив опеределенный объем данных и обсчитав их внутри себя скидывал в базу

skype:megaarachno

0
 



С нами с 21.09.03
Сообщения: 7329
Рейтинг: 2144

Ссылка на сообщениеДобавлено: 23/07/11 в 14:49       Ответить с цитатойцитата 

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

Моя подпись.

0
 



С нами с 03.02.09
Сообщения: 139
Рейтинг: 235

Ссылка на сообщениеДобавлено: 23/07/11 в 14:59       Ответить с цитатойцитата 


Вариант несомненно лучше чем fread/flock/fwrite с точки зрения производительности, но его тоже нужно правильно реализовать. Если логика не элементарная, то простым tail -f не обойтись, если на PHP, то тут хороший вариант предлагают
http://stackoverflow.com/questions/1102229/how-to-watch-a-file-write-in-php

1
 



С нами с 24.03.03
Сообщения: 569
Рейтинг: 278

Ссылка на сообщениеДобавлено: 16/08/11 в 23:46       Ответить с цитатойцитата 

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

быстро и эффективно

20 тыщ - это копейки. не вижу смысла изобретать велосипед и ставить лишние тулзы

0
 



С нами с 03.02.09
Сообщения: 139
Рейтинг: 235

Ссылка на сообщениеДобавлено: 17/08/11 в 12:48       Ответить с цитатойцитата 

Какое-то искаженное у вас понятие о быстроте и эффективности...
APC должен стоять на каждом проекте под нагрузкой, потому что это кеш промежуточного кода, что существенно ускоряет работу скриптов.
Что RAM-диск ускоряет? Плюс геморой с файлами, блокировками остается, добавляется еще геморой с диском, cron-ом
Я бы это назвал не велосипедом - это самокат какой-то

0
 



С нами с 03.02.09
Сообщения: 139
Рейтинг: 235

Ссылка на сообщениеДобавлено: 17/08/11 в 15:36       Ответить с цитатойцитата 

Ошибаетесь, APC - это в первую очередь кеш промежуточного кода, за счет этого PHP не нужно каждый раз парсить php-файлы, это дает значительное ускорение работы особенно когда кода много, по моим тестам от 3-ех до 10-ти раз. Дополнительно это хранилище пользовательских данных в формате ключ-значение.
Я считаю что лучшая блокировка - это ее отсуствие, с этим сложно поспорить даже SSD или RAM-диску.
Для текущей задачи оптимальное решение - атомарный инкремент значений в памяти, все остальное гораздо менее эффективно, это я и хочу сказать. Диски/файлы это все тут не годится изначально, поскольку задача - это +1 к определенному ключу, задача элементарная которая решается hash-таблицей в памяти, это один из самых базовых алгоритмов в программировании, за последние 40 лет тут ничего не изменилось. Не нужно выдумывать файлы/блокировки/RAM/SSD-диски для этого. Все элементарно просто.

1
 



С нами с 24.03.03
Сообщения: 569
Рейтинг: 278

Ссылка на сообщениеДобавлено: 17/08/11 в 15:43       Ответить с цитатойцитата 




видимо ошибаюсь icon_smile.gif спасибо!

1
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »