Привет, я давно не писал постов в блоге; ну, здесь я пишу об одной из самых сложных проблем, с которыми я столкнулся, и о том, как я ее решил.
Бэкэнд-разработчику невозможно избежать проблем, особенно тех, которые заставят вас взволноваться. Недавно, работая над рекламной сетью с использованием PHP и MySQL, я столкнулся со сложной проблемой, связанной с оптимизацией цены за тысячу показов (CPM) для издателей на основе определенных критериев. Эта задача проверила мои технические навыки и предоставила бесценный опыт обучения. В этом посте я шаг за шагом расскажу вам, как я решил эту проблему, подчеркнув стоящие перед ней проблемы и реализованные решения. Я буду рад, если у меня есть предложения о том, как эффективно реализовать это или лучший способ это сделать.
Задачей было скорректировать цену за тысячу показов издателя по следующим критериям:
Прежде чем приступить к реализации, мне нужно было четко понять требования. Я обсудил с заинтересованными сторонами, чтобы подтвердить критерии и желаемое поведение для корректировки CPM. Этот первоначальный шаг имел решающее значение для эффективного планирования решения.
У меня уже созданы база данных и таблицы, кроме того, проект уже был запущен, поэтому мне просто нужно было добавить критерии. Я позаботился о том, чтобы база данных и таблица были настроены для хранения и размещения необходимой информации для отслеживания кликов. Схема таблицы включала поля для хранения отметки времени клика, IP-адреса и кода страны (есть и другие поля/столбцы, которые я бы не стал включать, потому что они не очень важны для смысла этого поста).
Затем я реализовал функцию, позволяющую получать и сохранять IP-адрес и код страны каждый раз, когда пользователь нажимает на объявление. Эти данные хранились в таблице кликов.
После сбора данных следующим шагом стала реализация логики для проверки критериев и соответствующей корректировки цены за тысячу показов.
/** * Get the count of unique IP addresses in the last 10 minutes */ $stmt = $pdo->prepare(" SELECT COUNT(DISTINCT ip_address) AS unique_ips FROM clicks WHERE date_time >= NOW() - INTERVAL 10 MINUTE "); $stmt->execute(); $unique_ips = $stmt->fetchColumn(); if ($unique_ips >= 10) { $cpm *= 1.05; } else { /** * Here, I check for clicks from the same IP address * This is in the second condition * ... **/ }
/** * Checking non-unique (repeated) IP addresses in the last 10 minutes * If the condition is true, decrease the CPM by 8% */ $stmt = $pdo->prepare(" SELECT ip_address, COUNT(*) AS click_count FROM clicks WHERE timestamp >= NOW() - INTERVAL 10 MINUTE GROUP BY ip_address HAVING click_count >= 5 "); $stmt->execute(); $repeated_ips = $stmt->fetchAll(); if (count($repeated_ips) > 0) { $cpm *= 0.92; } else { /** * Here, I check for consecutive clicks from the same country * This is in the third condition * ... **/ }
/** * Checking clicks from the same country consecutively * If the condition is true, increase the CPM by 2% */ $stmt = $pdo->prepare(" SELECT country_code FROM clicks ORDER BY timestamp DESC LIMIT 10 "); $stmt->execute(); $last_ten_clicks = $stmt->fetchAll(PDO::FETCH_COLUMN); if (count(array_unique($last_ten_clicks)) === 1) { $cpm *= 1.02; }
На этом этапе я обновляю цену за тысячу показов издателя и использую ее для расчета его дохода за этот конкретный клик.
Благодаря внедрению этого решения рекламная сеть теперь динамически корректирует цену за тысячу показов на основе данных о кликах пользователя. Это обеспечивает справедливую и оптимизированную модель дохода для издателей, повышая общую эффективность рекламной сети.
Я Кингсли Гбутему Кефас, бэкэнд-разработчик, увлеченный созданием масштабируемых и эффективных систем. Я умею решать проблемы, мне нравится узнавать что-то новое и способы что-то делать. Меня как разработчика мотивирует решение задач, особенно сложных, которые заставляют меня критически мыслить. Я знаю, что стажировка в HNG — это возможность для меня вырасти как разработчик, работая над реальными проектами и обучаясь у экспертов отрасли. Я очень рад начать свой путь со стажировки в HNG и внести свой вклад в технологическое сообщество. Я верю, что это путешествие отточит мои навыки и будет способствовать реализации эффективных проектов, и я уверен, что я получу больше пользы от преимуществ HNG Premium.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3