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

王林
Freigeben: 2024-07-17 21:13:21
Original
1113 Leute haben es durchsucht

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. 5 % Erhöhung, wenn in den letzten 10 Minuten Klicks von 10 verschiedenen IP-Adressen erfolgten.
  2. Reduzierung um 8 %, wenn in den letzten 10 Minuten fünf Mal 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, sodass ich nur noch die Kriterien hinzufügen musste. 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, wann immer 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
     * ...
     **/
}
Nach dem Login kopieren
  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
     * ...
     **/
}
Nach dem Login kopieren
  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;
}
Nach dem Login kopieren

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 gewährleistet ein faires und optimiertes Umsatzmodell für Publisher 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 verbessern und zu wirkungsvollen Projekten beitragen wird, und ich bin sicher, dass ich noch mehr von den Vorteilen von HNG Premium profitieren werde.

Das obige ist der detaillierte Inhalt vonWie ich ein herausforderndes Backend-Problem mit PHP und MySQL gelöst habe. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!