![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
Как сделать три счётчика статисики для вывода на сайте: downloads (на один файл), today visitors, total visitors? Интересует, как именно считать и хранить.
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
oksale |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 192 Регистрация: 17.6.2005 Где: Санкт-Петербург Репутация: 1 Всего: 9 |
Это должно помочь.
--------------------
WBR, oksale |
|||
|
||||
R.M. |
|
|||
![]() Анархист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2164 Регистрация: 8.6.2005 Где: Питер Репутация: -2 Всего: 30 |
Делай ссылку не на файл а на скрипт который добавит запись в базу и потом перенаправит или запустит сам файл Всех людей пришедших заносиш в базу и выводиш mysql_num_rows только тех у которых дата H:i:s или как ты там храниш дату Как в предыдущем только вывод mysql_num_rows всех -------------------- Помнишь как бодрили дискотеки прошлого века? Теперь стул, компьютер и нету человека. Nokia LifeStyle - Всё для смартфонов Nokia |
|||
|
||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
Слишком сложно, по сути надо хранить всего три значения, а считать видима так:
* downloads - скрипт увеличивает на еденичку счётчик, потом редирект. * today visitors - кидать куку с датой, если её нет или дата не сегодняшняя, то увеличить счётчик на единицу. раз в сутки сброс в ноль. * total visitors - каждый раз увеличивать на единицу при увеличении today visitors. Через куки не очень надежно, но точности особой не надо. Основной вопрос как хранить. Я совсем чайник в скриптовых делах. -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
Может просто в файле? но тогда как себя поведёт этот файл, если паралельно несколько запросов буду выполняться?
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
клоп |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 28.2.2006 Где: г. Череповец Репутация: нет Всего: нет |
Он просто обнулиться. Используй блокировку. --------------------
Всякая чепуха посещает голову, когда она пуста .... |
|||
|
||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
R.M. |
|
|||
![]() Анархист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2164 Регистрация: 8.6.2005 Где: Питер Репутация: -2 Всего: 30 |
cully, я бы даже не заморачивался с файлами, кликни мне в подпись, внизу увидиш статистику на БД
-------------------- Помнишь как бодрили дискотеки прошлого века? Теперь стул, компьютер и нету человека. Nokia LifeStyle - Всё для смартфонов Nokia |
|||
|
||||
клоп |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 28.2.2006 Где: г. Череповец Репутация: нет Всего: нет |
--------------------
Всякая чепуха посещает голову, когда она пуста .... |
||||
|
|||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
Мне тут предложили оригинальное решение, спешу поделиться. Запись байта в файл - атомарная операция, ни каких локов не надо. Заводим три файла: downloads.ctr, today-visitors.ctr, total-visitors.ctr. Когда надо дописываем по байту, размер каждого из файлов и есть нужное нам значение.
А как записать один байт? ![]() -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 13 Всего: 78 |
Каждый символ - это один байт.
-------------------- Ll 2 |
|||
|
||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
Ясна, спасиба, я насчёт нуля думал на конце. Я же десктопный программер.
![]() -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
клоп |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 28.2.2006 Где: г. Череповец Репутация: нет Всего: нет |
Я сам если честно запарился с текстовыми счетчиками. В электронной газете предприятия где я тружусь, в день выпуска номера в онлайне бывает 150-200 чел одновременно, блокировка не помогает. Минимум 1-2 раза в неделю счетчик прочтения статьи обнуляется. Незнаю что и делать. Воn код, мож кто что подскажет как еще избегать обнуления?
где: $news_arr[0] - TIMESTAMP статьи --------------------
Всякая чепуха посещает голову, когда она пуста .... |
|||
|
||||
Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 13 Всего: 78 |
А что, базы данных не устраивают? При таком количестве посещений необходимо, я думаю, использовать БД...
-------------------- Ll 2 |
|||
|
||||
клоп |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 28.2.2006 Где: г. Череповец Репутация: нет Всего: нет |
Базы устраивают, просто когда все начиналось год назад то совсем не предполагалось такого количества в онлайне. Текстовые файлы справлялись с нагрузкой. А с другой стороны разве законы записи в БД сильно отличаются? Там (см. код выше) веть тоже используется примерно такая же блокировка когда обрабатывается один процесс из многих а другие ждут. Реально ли как то более стабилизировать или ужесточить это в моем примере? Там по идее на запись имеет право только один процесс (при LOCK_EX) а остальные в это время только читать могут. Конечно я понимаю что сброс происходит когда одновременно, секунда в секунду, к файлу на запись попадает два или более процесса, и что секунда это слишком большая величина при такой нагрузке..... Есть мысль как-то прикрутить microtime() к timestamp, но как пока мне не ясно. Может кто еще что предложит помимо перехода на БД или разовьет на примере мою мысль? Буду презнателен. --------------------
Всякая чепуха посещает голову, когда она пуста .... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |