ホームページ >バックエンド開発 >PHPチュートリアル >PHP と MySQL でバックエンドの困難な問題を解決した方法
こんにちは。ブログ投稿を書くのは久しぶりです。さて、ここでは私が遭遇した最も困難な問題の 1 つと、それをどのように解決したかの概要を書きます。
バックエンド開発者として、課題、特に気が遠くなるような課題から逃れることはできません。最近、PHP と MySQL を使用した広告ネットワークで作業しているときに、特定の基準に基づいてパブリッシャーのコスト パー ミル (CPM) を最適化することに関連する複雑な問題に遭遇しました。この問題は私の技術スキルをテストし、貴重な学習経験をもたらしました。この投稿では、私がこの問題をどのように解決したかを段階的に説明し、直面した課題と実装した解決策に焦点を当てます。効率的に実装する方法や、より良い方法についての提案があれば、うれしく思います。
このタスクは、次の基準に基づいてサイト運営者の CPM を調整することでした:
実装に取り掛かる前に、要件を明確に理解する必要がありました。 CPMを調整する際の基準や望ましい動作を確認するために関係者と話し合いました。この最初のステップは、ソリューションを効果的に計画するために非常に重要でした。
データベースとテーブルはすでに作成されており、プロジェクトはすでに稼働していたので、条件を追加するだけで済みました。クリック追跡に必要な情報を保存および収容できるようにデータベースとテーブルが設定されていることを確認しました。テーブル スキーマには、クリック タイムスタンプ、IP アドレス、および国コードを保存するためのフィールドが含まれていました (この投稿の目的にとってはあまり重要ではないため、含めない他のフィールド/列もあります)。
次に、ユーザーが広告をクリックするたびに IP アドレスと国コードを取得して保存する機能を実装しました。このデータはクリック数テーブルに保存されました。
データが取得されたので、次のステップは基準をチェックし、それに応じて CPM を調整するロジックを実装することでした。
/** * 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; }
この部分では、サイト運営者の CPM を更新し、それを使用して特定のクリックに対する収益を計算します。
このソリューションを実装することにより、広告ネットワークはユーザーからのクリック データに基づいて CPM を動的に調整するようになりました。これにより、パブリッシャーにとって公平で最適化された収益モデルが保証され、広告ネットワークの全体的な有効性が向上します。
私は Kingsley Gbutemu Kefas です。スケーラブルで効率的なシステムの構築に情熱を注ぐバックエンド開発者です。私は問題解決者であり、新しいことや何かを行う方法を学ぶのが大好きです。開発者として、私は課題、特に批判的に考える必要がある複雑な課題を解決することにモチベーションを感じています。 HNG インターンシップは、現実世界のプロジェクトに取り組み、業界の専門家から学ぶことで、開発者として成長する機会であるとわかっています。 HNG インターンシップから旅を始め、テクノロジー コミュニティに貢献できることに興奮しています。この旅で私のスキルが磨かれ、影響力のあるプロジェクトに貢献できると信じています。また、HNG プレミアムのメリットをさらに享受できると確信しています。
以上がPHP と MySQL でバックエンドの困難な問題を解決した方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。