Size: a a a

Laravel для начинающих

2020 April 23

EG

Egor Gruzdev in Laravel для начинающих
Дмитрий
Ну я вот и думаю, может если уже так пошло  то в конечной таблице еще держать user_id
решать тебе, возможно стоит промежуточную таблицу сделать для связи item и user
источник

И

Игорь in Laravel для начинающих
Andrey Helldar
Думаю, не нужно объяснять в какой точке он находился, как и большинство "нападунов" из чатов)
Андрей, но ведь это не про это
источник

AH

Andrey Helldar in Laravel для начинающих
Игорь
Андрей, но ведь это не про это
Я думаю как раз про то, когда у человека достаточно мало опыта, но он нахватался "умных" слов и "нападает" на других, мол, посмотрите какой он умный и образованный, а все остальные такое "говно".
Кто как, а лично я именно такое ощущение испытывал в тех чатах.
источник

И

Игорь in Laravel для начинающих
Andrey Helldar
Я думаю как раз про то, когда у человека достаточно мало опыта, но он нахватался "умных" слов и "нападает" на других, мол, посмотрите какой он умный и образованный, а все остальные такое "говно".
Кто как, а лично я именно такое ощущение испытывал в тех чатах.
это параллельно, но не то. Данный эффект Даннинга — Крюгера, если своими словами кратко:

Тупой не может понять что он тупой потому, что он тупой.

Как-то так.
источник

И

Игорь in Laravel для начинающих
Но не суть. Твою мысль я уловил
источник

AH

Andrey Helldar in Laravel для начинающих
Игорь
Но не суть. Твою мысль я уловил
источник

Д

Дмитрий in Laravel для начинающих
Переслано от Дмитрий
Коллеги, подскажите пожалуйста как лучше реализовать таблица с посещениями.

У меня есть 10 разных ссылок
Когда клиент переходит по одной из них, должна создаться новая запись об этом посещении с юзерагентом, айпи и номером ссылки.
Но мне нужно учитывать как уникальные перехода, так и каждый переход, пусть один человек хоть 100 раз перейдет.

Я вижу 3 вариант :

1 - При каждом посещении вносить запись в таблицу visits и сделать поле hash - это хэш юзерагента + айпи + айди ссылки , и при выводе статы доставать каунт всех записей, и доставать каунт записей без повторов hash.
2 - Сделать таблицу visits и uvisits - и при каждом посещении искать запись hash с таким пользователем и если такого нет, то добавляем запись в visits и добавляем в uvisits - visit_id. А если такая запись в visits есть, то просто добавляем еще одну бе добавления в uvisits То есть в таблице uvisits Будут ссылки на уникальные записи.
3 - Сделать одну таблицу visits в ней сделать count который по умолчанию равен 1. При переходе по ссылке мы делаем проверку, есть ли такой хэш в таблице, и если есть, то мы просто делаем каунтеру инкремент. И когда нужно будет получить данные то Уникальные это каунт записей в visits а общее количество посещений - это SUM count в этой таблице

Какой вариант самый быстрый?
источник

Д

Дмитрий in Laravel для начинающих
Народ, помогите плз кто что думает? Уже все спроектировал кроме этого момента. Буду очень благодарен
источник

AH

Andrey Helldar in Laravel для начинающих
Дмитрий
Переслано от Дмитрий
Коллеги, подскажите пожалуйста как лучше реализовать таблица с посещениями.

У меня есть 10 разных ссылок
Когда клиент переходит по одной из них, должна создаться новая запись об этом посещении с юзерагентом, айпи и номером ссылки.
Но мне нужно учитывать как уникальные перехода, так и каждый переход, пусть один человек хоть 100 раз перейдет.

Я вижу 3 вариант :

1 - При каждом посещении вносить запись в таблицу visits и сделать поле hash - это хэш юзерагента + айпи + айди ссылки , и при выводе статы доставать каунт всех записей, и доставать каунт записей без повторов hash.
2 - Сделать таблицу visits и uvisits - и при каждом посещении искать запись hash с таким пользователем и если такого нет, то добавляем запись в visits и добавляем в uvisits - visit_id. А если такая запись в visits есть, то просто добавляем еще одну бе добавления в uvisits То есть в таблице uvisits Будут ссылки на уникальные записи.
3 - Сделать одну таблицу visits в ней сделать count который по умолчанию равен 1. При переходе по ссылке мы делаем проверку, есть ли такой хэш в таблице, и если есть, то мы просто делаем каунтеру инкремент. И когда нужно будет получить данные то Уникальные это каунт записей в visits а общее количество посещений - это SUM count в этой таблице

Какой вариант самый быстрый?
Так как нужно считать как уникальные, так и нет, на мой взгляд стоит сделать одну таблицу visits с колонками url_id, user_agent, ip, и при каждом переходе записывать в нее данные.
На выходе получаешь чистый список всех переходов, а если нужны уникальные, то велком то groupBy.
источник

Д

Дмитрий in Laravel для начинающих
Andrey Helldar
Так как нужно считать как уникальные, так и нет, на мой взгляд стоит сделать одну таблицу visits с колонками url_id, user_agent, ip, и при каждом переходе записывать в нее данные.
На выходе получаешь чистый список всех переходов, а если нужны уникальные, то велком то groupBy.
а обновлять каунтер это плохой вариант?
источник

AH

Andrey Helldar in Laravel для начинающих
Дмитрий
а обновлять каунтер это плохой вариант?
Он нужен только если ты счетчик увеличиваешь. При этом теряется метка каждого перехода. Вдобавок, это для абсолютно уникальных сработает. Если нужны все переходы - такая схема 100% не будет работать и потребуется создавать вторую таблицу, но зачем?..
источник

Д

Дмитрий in Laravel для начинающих
Ну смотри как я мыслю (но мне важно по нагрузке как это)
Перехожу по ссылке, кодом генерируется мой хэш ЮА+Айпи+url_id (который передается)
Ищу в таблице этот хэш. Если есть, то я полю каунт делают инкремент,
если нет, то создаю новую запись с полем count = 1
И когда буду делать статистику, то для уников просто сделать каунт а для всех сделать SUM(count)
источник

Д

Дмитрий in Laravel для начинающих
а при выводе данных, просто выводить только уникальных, и если понадобиться то количество посещением данным посетителем
источник

AH

Andrey Helldar in Laravel для начинающих
Совать всё в хэк (md5) такая себе идея. С коллизией хреново у радужных таблиц - она есть.
Лучше храни чистые данные в разных колонках.

Что касается переходов, смотри. Ты говоришь есть 10 ссылок. Допустим, N+1. Как ты их отличишь друг от друга, по какой нужно уников считать, а по какой нет? Костыли вставлять? Да ну.
Это либо доп статус вводить надо в таблицу с урлами, но это лишний мусор в нее, либо создавать вторую таблицу, что еще хуже.

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

Д

Дмитрий in Laravel для начинающих
Andrey Helldar
Совать всё в хэк (md5) такая себе идея. С коллизией хреново у радужных таблиц - она есть.
Лучше храни чистые данные в разных колонках.

Что касается переходов, смотри. Ты говоришь есть 10 ссылок. Допустим, N+1. Как ты их отличишь друг от друга, по какой нужно уников считать, а по какой нет? Костыли вставлять? Да ну.
Это либо доп статус вводить надо в таблицу с урлами, но это лишний мусор в нее, либо создавать вторую таблицу, что еще хуже.

Поэтому и предлагаю просто записывать каждое посещение в одну таблицу, а уже при запросе данных из нее фильтровать на уников и общее количество. Вдобавок, повторюсь, юзая инкремент, ты не будешь знать в какой момент времени был совершен переход по ссылке. Каждый переход.
ну тоже верно.
Постараюсь более понятно обьяснить что я делаю.
Это что то типо СРА, где есть товары и пользователь может продвигать этот товар и каждому партнеру выдается своя ссылка.
При переходе по этой ссылке нужно записать все данные пользователь (юзер агент, айпи) а так же записать айди партнерской ссылки этого партнера. И получается хэш я думал делать из ЮА+Айпи+Линк_ID
источник

Д

Дмитрий in Laravel для начинающих
Andrey Helldar
Совать всё в хэк (md5) такая себе идея. С коллизией хреново у радужных таблиц - она есть.
Лучше храни чистые данные в разных колонках.

Что касается переходов, смотри. Ты говоришь есть 10 ссылок. Допустим, N+1. Как ты их отличишь друг от друга, по какой нужно уников считать, а по какой нет? Костыли вставлять? Да ну.
Это либо доп статус вводить надо в таблицу с урлами, но это лишний мусор в нее, либо создавать вторую таблицу, что еще хуже.

Поэтому и предлагаю просто записывать каждое посещение в одну таблицу, а уже при запросе данных из нее фильтровать на уников и общее количество. Вдобавок, повторюсь, юзая инкремент, ты не будешь знать в какой момент времени был совершен переход по ссылке. Каждый переход.
а groupby потом делать по 3ем таблицам? GroupBy('useragent','ip',link_id');
источник

AH

Andrey Helldar in Laravel для начинающих
Дмитрий
ну тоже верно.
Постараюсь более понятно обьяснить что я делаю.
Это что то типо СРА, где есть товары и пользователь может продвигать этот товар и каждому партнеру выдается своя ссылка.
При переходе по этой ссылке нужно записать все данные пользователь (юзер агент, айпи) а так же записать айди партнерской ссылки этого партнера. И получается хэш я думал делать из ЮА+Айпи+Линк_ID
Я тебя понял, у меня нечто подобное было на старом проекте. Просто записывал данные в одну таблицу "как есть", а после выводил с группировкой для статистики.
источник

AH

Andrey Helldar in Laravel для начинающих
Дмитрий
а groupby потом делать по 3ем таблицам? GroupBy('useragent','ip',link_id');
Почти.
->groupBy('useragent')
->groupBy('ip')
->groupBy('link_id')
источник

Д

Дмитрий in Laravel для начинающих
Andrey Helldar
Я тебя понял, у меня нечто подобное было на старом проекте. Просто записывал данные в одну таблицу "как есть", а после выводил с группировкой для статистики.
просто вчера кто то писал вроде что при миллионых записях groupBy долго отрабатывается
источник

EG

Egor Gruzdev in Laravel для начинающих
Дмитрий
ну тоже верно.
Постараюсь более понятно обьяснить что я делаю.
Это что то типо СРА, где есть товары и пользователь может продвигать этот товар и каждому партнеру выдается своя ссылка.
При переходе по этой ссылке нужно записать все данные пользователь (юзер агент, айпи) а так же записать айди партнерской ссылки этого партнера. И получается хэш я думал делать из ЮА+Айпи+Линк_ID
надеюсь клиенты не из Европы и ты предупреждаешь, что ты все сохраняешь, а через месяц все уничтожаешь? 😊
источник