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

Уники и равы mysql

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

programmer

С нами с 08.12.02
Сообщения: 7607
Рейтинг: 5752

Ссылка на сообщениеДобавлено: 08/02/09 в 17:13       Ответить с цитатойцитата 

как собственно лучше писать в статы
определяем уник - 1 просмотр отдельно взятой страницы
ip cookie page col
777.77.77.77 vsdbbsdbvhujsdbjhb http://google.com 1
определяем рав - 1 просмотр отдельно взятой страницы
ip cookie page col
777.77.77.77 vsdbbsdbvhujsdbjhb http://google.com 2

или
определяем рав - 1 просмотр отдельно взятой страницы
ip cookie page
777.77.77.77 vsdbbsdbvhujsdbjhb http://google.com
777.77.77.77 vsdbbsdbvhujsdbjhb http://google.com

при первом способе определения рава, размер в 2 раза меньше, но менее удобно считать налету?

крипта на ByBit

0
 

ищу работу (php,mysql,js)

С нами с 26.05.07
Сообщения: 576
Рейтинг: 393

Ссылка на сообщениеДобавлено: 08/02/09 в 17:19       Ответить с цитатойцитата 

я бы предпочёл удобство подсчёта налету

Каталог для Блогов, Фрих и Галёр, ссылки $0.03
рекламные дрочетексты на микросиджах

8
 

programmer

С нами с 08.12.02
Сообщения: 7607
Рейтинг: 5752

Ссылка на сообщениеДобавлено: 08/02/09 в 17:22       Ответить с цитатойцитата 

промотров ожидается от 7к в сутки

крипта на ByBit

0
 



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

Ссылка на сообщениеДобавлено: 08/02/09 в 17:44       Ответить с цитатойцитата 

В первую очередь нужно подумать как уменьшить размер хранимых данных, без этого производительность через несколько месяцев уйдет далеко за рамки определения реального времени.
1. IP адрес нужно хранить не как строку, а как 4-ех байтный INT
2. Количество вариантов URL ограничено, поэтому разумней создать справочную таблицу с ними и хранить лишь ссылку. Это в случае если будет храниться необработанная статистика долго.
3. Зачем хранить куку? Тем более это частный случай когда она одна, обычно их много.
4. Раз в сутки (например) производить обработку данных, сохраняя их в удобном виде для хранения и обработки, например:
дата | id url | хостов | хитов
первичный ключ по (дата, id url)

Хотя это все пальцем в небо без конкретной задачи, которая стоит.

8
 

programmer

С нами с 08.12.02
Сообщения: 7607
Рейтинг: 5752

Ссылка на сообщениеДобавлено: 08/02/09 в 17:51       Ответить с цитатойцитата 

1 согласен
2 многоуровневый каталог, страниц очень много и нужна статистика по разделам и т п
3 чтобы уникализировать посетителя - md5(IP+timestamp)
по одному IP мало, кука живет сутки
4 тоже думал об этом

крипта на ByBit

0
 



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

Ссылка на сообщениеДобавлено: 08/02/09 в 18:00       Ответить с цитатойцитата 

2. Не проблема, их все равно меньше чем например UNSIGNED MEDIUMINT ~ 16M, а размер в сотни раз меньше получится. Справочная таблица создается на лету по мере необходимости - если есть запись, используется ее идентификатор, нет - добавляется и используется.
3. Так уникальность не обеспечишь - если с одного IP будет 2 запроса в секунду, например пользователь больно резкий и нажал 2 раза подряд, то будет неприятная ошибка БД. Куке можно сказать жить сколько надо. Тут еще и варианты подсчета быть могут - посетители и хосты - это разные вещи, первые определяются по IP, вторые по куке. Если считает именно посетителей, то нафиг их IP хранить?
В любом случае вызывающая система должна быть основана на JS чтобы отсеять поисковиков, они тебе создадут не хилую статистику icon_smile.gif
Без 4 через пару месяцев попытка построить отчет положит сервер, говорю по опыту - видел уже такие системы, которые сдавались заказчику без тестов под большими объемами данных.

8
 

ищу работу (php,mysql,js)

С нами с 26.05.07
Сообщения: 576
Рейтинг: 393

Ссылка на сообщениеДобавлено: 08/02/09 в 19:10       Ответить с цитатойцитата 

В зависимости от задачи, в некоторых местах можно использовать таблицы типа MEMORY (HEAP). Если не ошибаюсь так реализовано в стримротаторе.

+1 по п.4 - архив желателен, также можно разграничить архив по неделе, месяцу, году (использовать разные таблицы)

Каталог для Блогов, Фрих и Галёр, ссылки $0.03
рекламные дрочетексты на микросиджах

8
 



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

Ссылка на сообщениеДобавлено: 08/02/09 в 20:36       Ответить с цитатойцитата 

Dim82 писал:
также можно разграничить архив по неделе, месяцу, году (использовать разные таблицы)

Это крайняя мера когда индекс не помещается в памяти
Таблица типа MEMORY в данном случае не подходит - объем данных слишком большой, интенсивность использования низкая.

8
 

programmer

С нами с 08.12.02
Сообщения: 7607
Рейтинг: 5752

Ссылка на сообщениеДобавлено: 08/02/09 в 20:44       Ответить с цитатойцитата 

iRoot писал:
В любом случае вызывающая система должна быть основана на JS чтобы отсеять поисковиков, они тебе создадут не хилую статистику icon_smile.gif

а примерно как это реализовать, я видел статы этого портала - удручающее зрелище

крипта на ByBit

0
 



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

Ссылка на сообщениеДобавлено: 08/02/09 в 20:52       Ответить с цитатойцитата 

Sterx писал:
а примерно как это реализовать, я видел статы этого портала - удручающее зрелище

Какого портала? Реализовать довольно просто - на страницу вставляется JavaScript (JS) код, который вызывает обращение к системе статистики, сообщая, что на страницу зашел посетитель. Так например Google Analytics собирает статистику.
Этот метод исключает роботов, потому что JS исполняется только в браузере посетителей.

0
 

programmer

С нами с 08.12.02
Сообщения: 7607
Рейтинг: 5752

Ссылка на сообщениеДобавлено: 08/02/09 в 20:56       Ответить с цитатойцитата 

iRoot писал:
Какого портала? Реализовать довольно просто - на страницу вставляется JavaScript (JS) код, который вызывает обращение к системе статистики, сообщая, что на страницу зашел посетитель. Так например Google Analytics собирает статистику.
Этот метод исключает роботов, потому что JS исполняется только в браузере посетителей.

по принципу каунтера в общем, понятно

крипта на ByBit

0
 

programmer

С нами с 08.12.02
Сообщения: 7607
Рейтинг: 5752

Ссылка на сообщениеДобавлено: 08/02/09 в 22:21       Ответить с цитатойцитата 

iRoot:
Цитата:
Справочная таблица создается на лету по мере необходимости - если есть запись, используется ее идентификатор, нет - добавляется и используется.

а примером запроса можешь помочь? в смысле INSERT в один запрос с вложенными селектами?

крипта на ByBit

0
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 08/02/09 в 23:30       Ответить с цитатойцитата 

Вообще правильно писать тупо в текстовый файл логом, а кроном пускать скрипт каждые n минут, распарсывать лог и записывать в базу. Для сервера нагрузка будет в десятки раз меньше.

Но это все херня, ибо Sterx: не подумал о такой вещи, как время, за которое он будет считать уника / рава, т.е. когда рав скинет флаг рава и снова станет уником icon_smile.gif Эта простая поправка напрочь выкидывает ему пункт 1 и оставляет только пункт 2, где добавляется еще одно поле "время визита".

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

0
 



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

Ссылка на сообщениеДобавлено: 08/02/09 в 23:34       Ответить с цитатойцитата 

Sterx писал:
а примером запроса можешь помочь? в смысле INSERT в один запрос с вложенными селектами?

INSERT INTO visits SET url_id=(SELECT id FROM urls WHERE url='....')
Столбец url конечно должен быть уникальным с соответствующим индексом

0
 

programmer

С нами с 08.12.02
Сообщения: 7607
Рейтинг: 5752

Ссылка на сообщениеДобавлено: 08/02/09 в 23:38       Ответить с цитатойцитата 

Stek:
не нравится мне такая реализация
рав - это повторная запись с той же кукой, которая живет сутки
iRoot:
это понятно, но по твоим словам делать нужно проверку на наличие того самого url и если нет - писать
если хранить связи - либо несколько запросов либо хранимая процедура

крипта на ByBit

0
 



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

Ссылка на сообщениеДобавлено: 08/02/09 в 23:50       Ответить с цитатойцитата 

Нуу... я только предоставляю варианты, а не готовое решение.
Дальше можно продолжать додумывать:
- 2 легковесных запроса, ничего страшного не произойдет, все будет шустро бегать
- хранимая процедура - замечательный вариант, немного лучше первого
- внешние ключи, обеспечивающие целостность базы, нужно перехватывать исключение при вставке несуществующей связи, добавлять ее и повторять запись. Экстравагантно, работать будет, но в программировании строить логику на обработке ошибок считается дурным стилем.
- другие варианты...

P.S. текстовый файл это конечно жесть... особенно в плане реализации блокировок, работать будет только под слабой нагрузкой, тогда вероятность сбоя низка

8
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 09/02/09 в 00:28       Ответить с цитатойцитата 

Цитата:
P.S. текстовый файл это конечно жесть... особенно в плане реализации блокировок, работать будет только под слабой нагрузкой

лоооллл , ты хоть представляешь себе, сколько записей в секунду отработает конструкция
Код:
<?php
$fp = fopen('file.txt', 'a');
fwrite($fp, "IP;TIME;COOKIE;PAGE");
fclose($fp);
?>

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

0
 



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

Ссылка на сообщениеДобавлено: 09/02/09 в 01:01       Ответить с цитатойцитата 

Stek писал:
лоооллл , ты хоть представляешь себе, сколько записей в секунду отработает конструкция
Код:
<?php
$fp = fopen('file.txt', 'a');
fwrite($fp, "IP;TIME;COOKIE;PAGE");
fclose($fp);
?>

В однопотоковой среде - очень много, но мы же говорим про реальный мир, где бывают ситуации, когда один и тот же ресурс запрашивает несколько процессов одновременно и если они не синхронизированы и отсутствует механизм блокировок, то результаты могут быть плачевны.
Хотя, да, действительно, я уже загибаю - в данном случае потери данных не приведут к серьезным последствиям, да и будут они происходить крайне редко при такой прогнозируемой посещаемости. Для решения "на коленке" волне годиться.

0
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 09/02/09 в 01:21       Ответить с цитатойцитата 

iRoot: дабы не быть голословным, мой домашний компик, купленный пару лет назад, на единственном диске под виндами и с включенными торрентами, сделал 100к записей за 18 секунд. Т.е. грубо говоря 5к в секунду.
В сутках 86400 секунд, ну с учетом плаванья трафика возмем 30000 активных. 30000*5000 = 150.000.000 , т.е. 150миллионов записей в файл.
Не думаю что грозит такая интенсивность записи icon_smile.gif

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

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

0
 



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

Ссылка на сообщениеДобавлено: 09/02/09 в 01:40       Ответить с цитатойцитата 

Да, именно так, это для меня не новость, но они это делают в последовательном режиме - с файлом работает один процесс, открыт на запись только один дескриптор. Проблемы возникают при параллельной работе на запись нескольких процессов.
По поводу логов MySQL было бы наивно использовать для лога отката при сбое базу данных, ведь именно для отката БД она и используется. Там много своих тонкостей.
Пошел страшный offtop, думаю основная идея, которую я пытался донести - а именно возможные проблемы с параллельной работой на запись в файл несколькими процессами ясна.
Да и автор топика спрашивает в первую очередь как удобней считать потом статистику. В этом вопросе текстовый файл конкретно отсасывает! icon_smile.gif

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

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


Перейти:  



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

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

Опросы

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



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