ホームページ  >  記事  >  バックエンド開発  >  PHP と MySQL でバックエンドの困難な問題を解決した方法

PHP と MySQL でバックエンドの困難な問題を解決した方法

王林
王林オリジナル
2024-07-17 21:13:211124ブラウズ

How I Solved a Challenging Backend Problem with PHP & MySQL

こんにちは。ブログ投稿を書くのは久しぶりです。さて、ここでは私が遭遇した最も困難な問題の 1 つと、それをどのように解決したかの概要を書きます。

バックエンド開発者として、課題、特に気が遠くなるような課題から逃れることはできません。最近、PHP と MySQL を使用した広告ネットワークで作業しているときに、特定の基準に基づいてパブリッシャーのコスト パー ミル (CPM) を最適化することに関連する複雑な問題に遭遇しました。この問題は私の技術スキルをテストし、貴重な学習経験をもたらしました。この投稿では、私がこの問題をどのように解決したかを段階的に説明し、直面した課題と実装した解決策に焦点を当てます。効率的に実装する方法や、より良い方法についての提案があれば、うれしく思います。

問題

このタスクは、次の基準に基づいてサイト運営者の CPM を調整することでした:

  1. 過去 10 分間に 10 個の異なる IP アドレスからのクリックがあった場合、5% 増加します。
  2. 過去 10 分間に同じ IP アドレスからのクリックが 5 回あった場合、8% 減少します。
  3. 同じ国から 10 回連続クリックすると 2% 増加します。

ソリューションの旅

ステップ 1: 要件を理解する

実装に取り​​掛かる前に、要件を明確に理解する必要がありました。 CPMを調整する際の基準や望ましい動作を確認するために関係者と話し合いました。この最初のステップは、ソリューションを効果的に計画するために非常に重要でした。

ステップ 2: データベースのセットアップ

データベースとテーブルはすでに作成されており、プロジェクトはすでに稼働していたので、条件を追加するだけで済みました。クリック追跡に必要な情報を保存および収容できるようにデータベースとテーブルが設定されていることを確認しました。テーブル スキーマには、クリック タイムスタンプ、IP アドレス、および国コードを保存するためのフィールドが含まれていました (この投稿の目的にとってはあまり重要ではないため、含めない他のフィールド/列もあります)。

ステップ 3: クリック データを取得する

次に、ユーザーが広告をクリックするたびに IP アドレスと国コードを取得して保存する機能を実装しました。このデータはクリック数テーブルに保存されました。

ステップ 4: 基準チェックの実装

データが取得されたので、次のステップは基準をチェックし、それに応じて CPM を調整するロジックを実装することでした。

  1. 一意の IP アドレスを確認しています COUNT 関数と DISTINCT キーワードを使用して過去 10 分間の一意の IP アドレスをカウントします。このキーワードはグループ内の各行の式を評価し、一意の非 null 値の数を返します。 。
/** 
 * 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. IP アドレスの重複を確認する 次に、SQL COUNT 関数を使用して、過去 10 分間に重複した IP アドレスまたは一意でない IP アドレスがないか確認します。
/** 
 * 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. 同じ国からの連続クリックの確認 ここでは、同じ国からの連続クリックをチェックする 3 番目の基準を適用します。
/** 
 * 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;
}

ステップ 5: CPM の更新

この部分では、サイト運営者の CPM を更新し、それを使用して特定のクリックに対する収益を計算します。

結果

このソリューションを実装することにより、広告ネットワークはユーザーからのクリック データに基づいて CPM を動的に調整するようになりました。これにより、パブリッシャーにとって公平で最適化された収益モデルが保証され、広告ネットワークの全体的な有効性が向上します。

私について、そしてなぜ HNG インターンシップに参加するのか?

私は Kingsley Gbutemu Kefas です。スケーラブルで効率的なシステムの構築に情熱を注ぐバックエンド開発者です。私は問題解決者であり、新しいことや何かを行う方法を学ぶのが大好きです。開発者として、私は課題、特に批判的に考える必要がある複雑な課題を解決することにモチベーションを感じています。 HNG インターンシップは、現実世界のプロジェクトに取り組み、業界の専門家から学ぶことで、開発者として成長する機会であるとわかっています。 HNG インターンシップから旅を始め、テクノロジー コミュニティに貢献できることに興奮しています。この旅で私のスキルが磨かれ、影響力のあるプロジェクトに貢献できると信じています。また、HNG プレミアムのメリットをさらに享受できると確信しています。

以上がPHP と MySQL でバックエンドの困難な問題を解決した方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。