"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment j'ai résolu un problème de backend difficile avec PHP et MySQL

Comment j'ai résolu un problème de backend difficile avec PHP et MySQL

Publié le 2024-07-31
Parcourir:816

How I Solved a Challenging Backend Problem with PHP & 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 mettront en colère, ne peuvent être évités en tant que développeur back-end. 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.

Le problème

La tâche consistait à ajuster le CPM de l'éditeur en fonction des critères suivants :

  1. Augmentation de 5 % s'il y a des clics provenant de 10 adresses IP différentes au cours des 10 dernières minutes.
  2. Diminution de 8 % s'il y a des clics provenant de la même adresse IP 5 fois au cours des 10 dernières minutes.
  3. Augmentation de 2 % s'il y a 10 clics consécutifs provenant du même pays.

Le parcours de la solution

Étape 1 : Comprendre les exigences

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.

Étape 2 : configuration de la base de données

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).

Étape 3 : Capturer les données de clic

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.

Étape 4 : Mise en œuvre des contrôles de critères

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.

  1. Vérification des adresses IP uniques Je compte les adresses IP uniques au cours des 10 dernières minutes à l'aide de la fonction COUNT et du mot-clé DISTINCT qui évalue l'expression de chaque ligne d'un groupe et renvoie le nombre de valeurs uniques et non nulles. .
/** 
 * 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
     * ...
     **/
}
  1. Vérification des adresses IP répétées Je vérifie ensuite les adresses IP répétées ou non uniques au cours des 10 dernières minutes à l'aide de la fonction SQL COUNT.
/** 
 * 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
     * ...
     **/
}
  1. Vérification des clics consécutifs provenant du même pays Ici, j'applique le troisième critère qui vérifie les clics consécutifs en provenance du même pays.
/** 
 * 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;
}

Étape 5 : Mise à jour du CPM

Pour cette partie, je mets à jour le CPM de l'éditeur et je l'utilise pour calculer ses revenus pour ce clic particulier.

Le résultat

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.

À propos de moi et pourquoi un stage HNG ?

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.

Déclaration de sortie Cet article est reproduit sur : https://dev.to/cyberking99/solving-a-challenging-backend-problem-with-php-h0l?1 En cas de violation, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3