Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Подсчет количества просмотров объявлений
Покинул форум
Сообщений всего: 338
Дата рег-ции: Сент. 2012 Откуда: Гродно, Беларусь
Помог: 0 раз(а)
Добрый день, уважаемые участники форума!!!
Хочу услышать ваше мнение по поводу поднятой мною темы.
Вижу два варианта:
1. В таблице Ads с объявлениями создать столбец view. При просмотре объявления делать UPDATE +1 в столбце view. Недостаток - невозможно разделить, когда эти просмотры были.
2. Создать отдельную таблицу view, в которую при просмотре объявления вносить новую запись с указанием id объявления. Тут можно вносить время просмотра, соответственно, есть возможность разбивки по дням, месяцам и т.д. Этот способ и использую я. Сейчас в БД 7500 объявлений. соответственно, записей в таблице view 780 000. Если объявлений будет 100 000, то записей в таблице просмотров уже будет сколько то миллионов. Понятно, можно добавить индексы к id объявления (для выборки количества просмотров конкретного объявления) и date (для разбивки по времени).
Хочу услышать Ваше мнение об оптимальном решении данного вопроса с учетом указанных перспектив роста количества объявлений.
Заранее выражаю благодарность откликнувшимся
DeepVarvar
Отправлено: 30 Сентября, 2015 - 10:32:27
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Архивировать записи статистики старше месяца.
Ибо Пете продающему балалайку плевать на подробнейшую статистику просмотров месячной давности.
Т.е. когда кол-во просмотров записаных а-ля "id, date" приводится к виду "id, wiews_count, year_month"
Я думал про то, чтобы записи о просмотрах, имевших место месяц и более назад удалять и где то складировать. Я понимаю так. делаю выборку записей, внесенных месяц назад. Делаю разбивку по "месяц" или "месяц-год". Подсчитываю количество записей по конкретному объявлению за данный период и эту инфу вставляю в таблицу "просмотры-архив".
Далее, для установления количества просмотров объявления и получения временной статистики делаю выборку из таблиц "wiew" и "просмотры-архив", из которых получаю общее количество просмотров. Из первой таблицы получаю статистику по просмотрам в текущем месяце (сегодня, вчера, за неделю, за месяц), а из второй таблицы получаю количесвто просмотров, имевших место свыше месяца назад. Я так понимаю?
Panoptik
Отправлено: 30 Сентября, 2015 - 10:54:28
Постоянный участник
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011 Откуда: Одесса, Украина
Помог: 131 раз(а)
никто не мешает вам содержать оба типа данных. иметь столбецы total_views, today_views, week_views, month_views в таблице с сущностью и отдельно хранить детализированный отчет с точностью до секунды, кто, Когда и при каких обстоятельствах просматривал
----- Just do it
alnik-75
Отправлено: 30 Сентября, 2015 - 11:06:23
Посетитель
Покинул форум
Сообщений всего: 338
Дата рег-ции: Сент. 2012 Откуда: Гродно, Беларусь
Помог: 0 раз(а)
DeepVarvar пишет:
Т.е. когда кол-во просмотров записаных а-ля "id, date" приводится к виду "id, wiews_count, year_month"
можно и не делать вид "id, wiews_count, year_month", а сделать "id, wiews_count". разбивку по прошлым месяцам и годам можно не делать, а просто знать количество общее.
Далее, проходит время. Из таблицы "wiew" удаляются записи старые, подсчитывается их количество и апдейтится вторая таблица, где к количеству просмотров по айди объявления добавляется количество удаленных из первой таблицы. Правильно мыслю?
Покинул форум
Сообщений всего: 328
Дата рег-ции: Окт. 2013 Откуда: Санкт-Петербург
Помог: 6 раз(а)
Тоже неделю назад делал статистику. Сделал отдельной таблицей, id юзера, ip, откуда пришел, браузер, ОС, и время просмотра конечно. С проблемой кол-ва записей решил, что буду по крону удалять записи старше 1 месяца. На правильность решения не претендую, делал по "наитию" первый раз.... (Добавление)
alnik-75 пишет:
Далее, проходит время. Из таблицы "wiew" удаляются записи старые, подсчитывается их количество и апдейтится вторая таблица, где к количеству просмотров по айди объявления добавляется количество удаленных из первой таблицы. Правильно мыслю?
Если вам обязательно нужно знать кол-во просмотров за все время, то почему сразу не делать апдейт на +1, и подробную запись просмотра? Получится в реальном времени вы знаете количество просмотров. А так только до апдейта.
----- Умные мысли приходят тогда, когда все глупости уже сделаны...
Panoptik
Отправлено: 01 Октября, 2015 - 12:02:17
Постоянный участник
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011 Откуда: Одесса, Украина
Помог: 131 раз(а)
удалять данный старше 1 месяца как-то неправильно. тем более вряд ли у вас данных очень много. и даже 10к записей - это мелочь. бд спокойно справляется с миллионами. главное индексы и кеши. Плюс частота обращений к таким запросам будет редкой.
у меня сбор данных идет в миллионах. и я пока ничего не удаляю, да и не собираюсь, мне нужно анализировать срезы всех данных на каждом промежутке времени, по крайней мере за последнее время. для ТС я дал совет. пусть хранит детализированные данные в отдельной таблице, а агрегированные - в столбце за любой удобный период и никаких проблем не будет
----- Just do it
alnik-75
Отправлено: 01 Октября, 2015 - 13:55:42
Посетитель
Покинул форум
Сообщений всего: 338
Дата рег-ции: Сент. 2012 Откуда: Гродно, Беларусь
Помог: 0 раз(а)
Panoptik пишет:
удалять данный старше 1 месяца как-то неправильно. тем более вряд ли у вас данных очень много. и даже 10к записей - это мелочь. бд спокойно справляется с миллионами. главное индексы и кеши. Плюс частота обращений к таким запросам будет редкой.
у меня сбор данных идет в миллионах. и я пока ничего не удаляю, да и не собираюсь, мне нужно анализировать срезы всех данных на каждом промежутке времени, по крайней мере за последнее время. для ТС я дал совет. пусть хранит детализированные данные в отдельной таблице, а агрегированные - в столбце за любой удобный период и никаких проблем не будет
Расскажите пожалуйста про кэши
Panoptik
Отправлено: 01 Октября, 2015 - 15:16:54
Постоянный участник
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011 Откуда: Одесса, Украина
Помог: 131 раз(а)
а чего там рассказывать. все сложные выборки закидываете в кеш на час или сутки и при втором обращении уже не грузите базу сложными выборками а берете готовые результаты из кеша. кеш может быть как в оперативной памяти так и в файле либо бд (поле count_views, today_views тоже своеобразные кеши)
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.