|
|
|
| Итак. Есть рейтинговая система. При регистрации пользователь получает код счетчика (на JavaScript) в виде картинки. Картинка генерируется средствами php и на ней соответственно отображается текстовая информация (хиты, хосты и т.д.). Но вот проблема как эти цыфры получить?
Я пока нашел два способа:
1) Создаем таблицу, в которой регистрируем все заходы неких пользователей на сайт. Считаем в этой таблице количество записей удовлетворяющих некоторому условию и в итоге у нас получается нужная нам информация.
Теперь проблема! - Это рейтинговая система и если 1000 пользователей поставят у себя такие счетчики, то не "разорвется" ли хостинг (или по крайней мере база данных) на котором будет располагаться рейтинговая система???
2) Создаем таблицу (точнее она уже есть) с информацией о зарегистрированных пользователях. В таблице есть поля (хиты, хосты и т.д.) При каждом посещении сайта эти данные увеличиваются на соответствующую величину (если надо) и отображаются на счетчике.
Снова проблема! - Не получится ли так что два разных пользователя зайдут на сайт с точночтью до какой то доли секунды и извлекут из таблицы одно и то же значение, и соответственно вернут в таблицу одинаковые результаты, а значит неверные результаты???
Может есть ещё какие нибудь способы по решению данной проблемы?
Заранее спасибо!!! | |
|
|
|
|
|
|
|
для: Евгений Петров
(08.08.2005 в 01:16)
| | 1)
>и если 1000 пользователей поставят у себя такие счетчики, то не "разорвется" ли
> хостинг
Вполне может быть - обычно под такие системы используют выделенный сервер, а очень крупные системы используют кластеры. Но в начале когда у вас не много посетителей будет можно поиспытывать терпение хостеров :)))
2) А вы как увеличиваете значение поля? Можно посмотреть SQL-запросы, осуществляющие эту операцию... Вообще там таких проблем не должно быть и извлекать данные для увеличения счётчика вовсе не обязательно... | |
|
|
|
|
|
|
|
для: cheops
(08.08.2005 в 11:47)
| | Как такогого запроса пока нет, потому что я ещё не знаю как делать (по всей видимости 2-й вариант по лучше будет).
>>... и извлекать данные для увеличения счётчика вовсе не обязательно...
А как это сделать если не секрет? | |
|
|
|
|
|
|
|
для: Евгений Петров
(08.08.2005 в 12:26)
| | Для этого обычно прибегают к оператору UPDATE
UPDATE tbl SET counter = counter + 1 WHERE ...
|
| |
|
|
|
|
|
|
|
для: cheops
(08.08.2005 в 12:35)
| | Ой вот это я прогнал. :) Че то я не подумал об этом. И все таки насколько второй вариант "легче" для хостинга чем первый? | |
|
|
|
|
|
|
|
для: Евгений Петров
(08.08.2005 в 13:03)
| | Под первым вариантом подразумевается извлечение, увеличение и помещение обратно? В два раза больше запросов и примерно в три раза больше вычислений. | |
|
|
|
|
|
|
|
для: cheops
(08.08.2005 в 13:16)
| | Нет первый вариант это в первом посте после 1) | |
|
|
|
|
|
|
|
для: Евгений Петров
(08.08.2005 в 13:18)
| | А... второй вариант многократно легче, но вы тереяте распределение хостов и хитов во времени - т.е. вы сможете сказать сколько было человек вообще, но не сможете отслеживать динамику, которая в общем и интересна посетителям. | |
|
|
|
|
|
|
|
для: cheops
(08.08.2005 в 13:24)
| | Нет почему. Можно продолжать заносить в базу данных все посещения просто выводить на экран данные из другой таблицы, а динамику уже смотреть отдельно. | |
|
|
|
|
|
|
|
для: Евгений Петров
(08.08.2005 в 13:27)
| | Да можно, но объём базы данных сильно может возрасти - за три месяца статистики SoftTime, базы данных PowerCounter разрастаются свыше 100 Мб (без учёта reffer-ов), а это ещё не самый посещаемый ресурс. | |
|
|
|
|
|
|
|
для: cheops
(08.08.2005 в 13:34)
| | А разве в первом варианте такого не произойдет? | |
|
|
|
|
|
|
|
для: Евгений Петров
(08.08.2005 в 19:26)
| | Ну я его и имел ввиду :))) | |
|
|
|
|
|
|
|
для: cheops
(09.08.2005 в 01:01)
| | А если каждый день удалять данные которым больше месяца например а результаты предварительно сохранять? | |
|
|
|
|
|
|
|
для: Евгений Петров
(09.08.2005 в 12:23)
| | Да обычно так и делают, но некоторые сайты и за месяц могут давать огромную статистику, вряд ли они конечно позарятся на нераскрученный счётчик, но это не исключено... Если знаете примерную посещаемость своих клиентов, можно оценить объёмы в PowerCounter 2 000 000 хитов - это где-то 100 Мб. | |
|
|
|
|
|
|
|
для: cheops
(09.08.2005 в 12:50)
| | Я вчера примерно прикидывал и понял что надо место экономить. | |
|
|
|
|
|
|
|
для: Евгений Петров
(09.08.2005 в 12:54)
| | У меня теперь другая проблемма как отследить хиты. Ведь данные передаются через JS и надо как то знать что этот пользователь тут уже был. | |
|
|
|
|
|
|
|
для: Евгений Петров
(09.08.2005 в 12:56)
| | Посадите ему сессионную cookie - это общераспространённая тактика. | |
|
|
|
|
|
|
|
для: cheops
(09.08.2005 в 13:03)
| | Но ведь куки не у всех вкоючены и потом ведь все таки как то можно определить ip. Я тут вот что нашел. Посмотрите тут: http://www.directrix.ru/cgi-bin/stat/info.cgi?day1=09&day2=09&month1=08&month2=08&year1=05&year2=05&id=39537&user=guest&type=ip
откуда он их берет. Код счетчика примерно такой:
<a
href='http://www.directrix.ru/?sid=46918' target=_top><script
language="javascript">
dirx_js="1.0";
dirx_r=""+Math.random()+"&id=46918&cnt=28220&ref="+escape(document.referrer)+"&page="+escape(window.location.href);
document.cookie="dirx=1; path=/";
dirx_r+="&ck="+(document.cookie?"Y":"N");
</script>
<script language="javascript1.1">
dirx_js="1.1";
dirx_r+="&j="+(navigator.javaEnabled()?"Y":"N")
</script>
<script language="javascript1.2">
dirx_js="1.2";
dirx_r+="&w="+screen.width+'&h='+screen.height+"&col="+(((navigator.appName.substring(0,3)=="Mic"))?screen.colorDepth:screen.pixelDepth)
</script>
<script language="javascript1.3">dirx_js="1.3"</script>
<script language="javascript">
dirx_r+="&js="+dirx_js;
document.write("<img "+"
src='http://www.directrix.ru/cgi-bin/counter/counter.cgi?"+dirx_r+"'
border=0 width=88 height=31 alt='Directrix.ru - рейтинг, каталог
сайтов'></a>")
</script>
<noscript>
<img
src="http://www.directrix.ru/cgi-bin/counter/counter.cgi?id=46918&cnt=28220"
border=0 width="88" height="31" alt='Directrix.ru - рейтинг, каталог
сайтов'></noscript>
<img src="http://www.directrix.ru/images/empty.gif" border=0
width="0" height="0" alt='Directrix.ru - рейтинг, каталог
сайтов'></a>
|
| |
|
|
|
|
|
|
|
для: Евгений Петров
(09.08.2005 в 13:09)
| | Я тут где то нарыл, что можно перенаправить пользователя на php скрипт там определить его ip и потом отправить его назад. Плиз помогите мне такое сделать. Век жизни благодарен буду. | |
|
|
|
|
|
|
|
для: Евгений Петров
(09.08.2005 в 14:07)
| | А разве нельзя определить IP-адрес в скрипт-картинке счётчика - ведь пользователь его загружает и должен оставлять свой IP-адрес - зачем его гонять туда-сюда. Вон внизу форума гроздь счётчиков висит - в работу сайта не вмешивается, однако своё дело делает. | |
|
|
|
|
|
|
|
для: cheops
(09.08.2005 в 16:28)
| | Да можно, сори я не проверил сначала. У меня другая проблема как можно вычислить разницу между двумя датами (желательно в секундах) в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС? | |
|
|
|
|
|
|
|
для: Евгений Петров
(09.08.2005 в 16:56)
| | Давайте в отдельной теме :) Это ведь в MySQL вычислить нужно? | |
|
|
|
|
|
|
|
для: cheops
(09.08.2005 в 17:08)
| | Вообще нет, но я уже разобрался (использовал функцию mktime). Все равно спасибо. Вот только вопрос есть ли функция обратная mktime? | |
|
|
|
|
|
|
|
для: Евгений Петров
(09.08.2005 в 18:37)
| | Да, для форматирования даты в секундах от полуночи 1 января 1970 года используется функция date() - она может принимать второй необязательный параметр для передачи ей даты. Без этого параметра она форматирует текущую дату. | |
|
|
|
|
|
|
|
для: cheops
(09.08.2005 в 21:08)
| | Спасибо! | |
|
|
|