„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie ich ein herausforderndes Backend-Problem mit PHP und MySQL gelöst habe

Wie ich ein herausforderndes Backend-Problem mit PHP und MySQL gelöst habe

Veröffentlicht am 31.07.2024
Durchsuche:314

How I Solved a Challenging Backend Problem with PHP & MySQL

Hallo, es ist schon eine Weile her, seit ich einen Blogbeitrag geschrieben habe; Nun, hier schreibe ich über eines der schwierigsten Probleme, auf die ich gestoßen bin, und einen Überblick darüber, wie ich es gelöst habe.

Herausforderungen, insbesondere solche, die Sie auf Trab halten, können Sie sich als Backend-Entwickler nicht entziehen. Als ich kürzlich an einem Werbenetzwerk mit PHP und MySQL arbeitete, stieß ich auf ein komplexes Problem im Zusammenhang mit der Optimierung der Cost Per Mille (CPM) für Publisher anhand bestimmter Kriterien. Dieses Problem stellte meine technischen Fähigkeiten auf die Probe und bot eine unschätzbar wertvolle Lernerfahrung. In diesem Beitrag werde ich Ihnen Schritt für Schritt zeigen, wie ich dieses Problem gelöst habe, und die Herausforderungen sowie die umgesetzten Lösungen hervorheben. Ich freue mich, wenn ich Vorschläge für eine effiziente Umsetzung oder eine bessere Vorgehensweise bekomme.

Das Problem

Die Aufgabe bestand darin, den CPM des Publishers anhand der folgenden Kriterien anzupassen:

  1. Erhöhung um 5 %, wenn in den letzten 10 Minuten Klicks von 10 verschiedenen IP-Adressen erfolgten.
  2. Reduzierung um 8 %, wenn in den letzten 10 Minuten fünfmal Klicks von derselben IP-Adresse erfolgten.
  3. Erhöhung um 2 % bei 10 aufeinanderfolgenden Klicks aus demselben Land.

Die Lösungsreise

Schritt 1: Die Anforderungen verstehen

Bevor ich mit der Implementierung begann, brauchte ich ein klares Verständnis der Anforderungen. Ich habe mit den Stakeholdern gesprochen, um die Kriterien und das gewünschte Verhalten für die Anpassung des CPM zu bestätigen. Dieser erste Schritt war entscheidend für die effektive Planung der Lösung.

Schritt 2: Einrichten der Datenbank

Ich habe meine Datenbank und Tabellen bereits erstellt, außerdem war das Projekt bereits live, also musste ich nur noch die Kriterien hinzufügen. Ich habe dafür gesorgt, dass die Datenbank und die Tabelle so eingerichtet sind, dass sie die für die Klickverfolgung erforderlichen Informationen speichern und aufnehmen. Das Tabellenschema enthielt Felder zum Speichern des Klick-Zeitstempels, der IP-Adresse und des Ländercodes (es gibt andere Felder/Spalten, die ich nicht einschließen würde, da sie für den Zweck dieses Beitrags nicht wirklich wichtig sind).

Schritt 3: Klickdaten erfassen

Als nächstes habe ich eine Funktion implementiert, um die IP-Adresse und den Ländercode abzurufen und zu speichern, wenn ein Nutzer auf eine Anzeige klickt. Diese Daten wurden in der Klicktabelle gespeichert.

Schritt 4: Durchführung der Kriterienprüfungen

Nachdem die Daten erfasst waren, bestand der nächste Schritt darin, die Logik zu implementieren, um die Kriterien zu überprüfen und den CPM entsprechend anzupassen.

  1. Überprüfung auf eindeutige IP-Adressen Ich zähle die eindeutigen IP-Adressen in den letzten 10 Minuten mit der Funktion COUNT und dem Schlüsselwort DISTINCT, das den Ausdruck für jede Zeile in einer Gruppe auswertet und die Anzahl der eindeutigen Werte ungleich Null zurückgibt .
/** 
 * 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. Überprüfung auf wiederholte IP-Adressen Anschließend überprüfe ich mithilfe der SQL-Funktion COUNT, ob in den letzten 10 Minuten wiederholte oder nicht eindeutige IP-Adressen vorhanden sind.
/** 
 * 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. Prüfung auf aufeinanderfolgende Klicks aus demselben Land Hier wende ich das dritte Kriterium an, bei dem nach aufeinanderfolgenden Klicks aus demselben Land gesucht wird.
/** 
 * 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;
}

Schritt 5: Aktualisieren des CPM

Für diesen Teil aktualisiere ich den CPM des Publishers und verwende ihn, um seine Einnahmen für diesen bestimmten Klick zu berechnen.

Das Ergebnis

Durch die Implementierung dieser Lösung passt das Werbenetzwerk den CPM nun dynamisch basierend auf den Klickdaten des Benutzers an. Dies stellt ein faires und optimiertes Umsatzmodell für Publisher sicher und steigert die Gesamteffektivität des Werbenetzwerks.

Über mich und warum ein HNG-Praktikum?

Ich bin Kingsley Gbutemu Kefas, ein Backend-Entwickler mit Leidenschaft für den Aufbau skalierbarer und effizienter Systeme. Ich bin ein Problemlöser, ich liebe es, neue Dinge und Vorgehensweisen zu lernen. Als Entwickler motiviert es mich, Herausforderungen zu lösen, insbesondere komplexe, die mich zum kritischen Denken anregen. Ich weiß, dass das HNG-Praktikum für mich eine Gelegenheit ist, mich als Entwickler weiterzuentwickeln, indem ich an realen Projekten arbeite und von Branchenexperten lerne. Ich freue mich darauf, meine Reise mit HNG Internship zu beginnen und einen Beitrag zur Tech-Community zu leisten. Ich glaube, dass diese Reise meine Fähigkeiten schärfen und zu wirkungsvollen Projekten beitragen wird, und ich bin sicher, dass ich noch mehr von den Vorteilen von HNG Premium profitieren werde.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/cyberking99/solving-a-challenging-backend-problem-with-php-h0l?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3