Maison > Article > développement back-end > Comment j'ai résolu un problème de backend difficile avec PHP et MySQL
Bonjour, cela fait un moment que je n'ai pas écrit d'article de blog ; eh bien, j'écris ici sur l'un des problèmes les plus difficiles que j'ai rencontrés et un aperçu de la façon dont je l'ai résolu.
Les défis, en particulier ceux qui vous énerveront, ne peuvent être évités en tant que développeur backend. Récemment, alors que je travaillais sur un réseau publicitaire utilisant PHP et MySQL, j'ai rencontré un problème complexe lié à l'optimisation du coût par mille (CPM) pour les éditeurs en fonction de critères spécifiques. Ce problème a mis à l'épreuve mes compétences techniques et m'a fourni une expérience d'apprentissage inestimable. Dans cet article, je vais vous expliquer étape par étape comment j'ai résolu ce problème, en soulignant les défis rencontrés et les solutions mises en œuvre. Je serai heureux si je peux obtenir des suggestions sur la façon de mettre en œuvre efficacement ou une meilleure façon de procéder.
La tâche consistait à ajuster le CPM de l'éditeur en fonction des critères suivants :
Avant de me lancer dans la mise en œuvre, j'avais besoin d'une compréhension claire des exigences. J'ai discuté avec les parties prenantes pour confirmer les critères et le comportement souhaité pour ajuster le CPM. Cette première étape était cruciale pour planifier efficacement la solution.
J'ai déjà créé ma base de données et mes tables, et le projet était déjà en ligne, il me suffisait donc d'ajouter les critères. Je me suis assuré que la base de données et la table étaient configurées pour stocker et accueillir les informations nécessaires au suivi des clics. Le schéma de la table comprenait des champs pour stocker l'horodatage du clic, l'adresse IP et le code du pays (il existe d'autres champs/colonnes que je n'inclurais pas car ils ne sont pas vraiment importants pour la cause de ce message).
Ensuite, j'ai implémenté une fonction pour obtenir et enregistrer l'adresse IP et le code du pays chaque fois qu'un utilisateur clique sur une annonce. Ces données ont été stockées dans le tableau des clics.
Une fois les données capturées, l'étape suivante consistait à mettre en œuvre la logique permettant de vérifier les critères et d'ajuster le CPM en conséquence.
/** * 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; }
Pour cette partie, je mets à jour le CPM de l'éditeur et je l'utilise pour calculer ses revenus pour ce clic particulier.
En mettant en œuvre cette solution, le réseau publicitaire ajuste désormais dynamiquement le CPM en fonction des données de clic de l'utilisateur. Cela garantit un modèle de revenus équitable et optimisé pour les éditeurs, améliorant ainsi l'efficacité globale du réseau publicitaire.
Je m'appelle Kingsley Gbutemu Kefas, un développeur backend passionné par la création de systèmes évolutifs et efficaces. Je suis un résolveur de problèmes, j'aime apprendre de nouvelles choses et de nouvelles façons de faire quelque chose. En tant que développeur, je suis motivé par la résolution de défis, en particulier les plus complexes, qui me font réfléchir de manière critique. Je sais que le stage HNG est pour moi une opportunité de grandir en tant que développeur en travaillant sur des projets du monde réel et en apprenant auprès d'experts du secteur. Je suis ravi de commencer mon parcours avec HNG Internship et de contribuer à la communauté technologique. Je pense que ce voyage perfectionnera mes compétences et contribuera à des projets à fort impact et je suis sûr que je bénéficierai davantage des avantages de HNG Premium.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!