「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > PHP と MySQL でバックエンドの困難な問題を解決した方法

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

2024 年 7 月 31 日に公開
ブラウズ:834

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 関数と、グループ内の各行の式を評価し、一意の非 null 値の数を返す DISTINCT キーワードを使用して、過去 10 分間の一意の IP アドレスをカウントします。 。
/** 
 * 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 プレミアムのメリットをさらに享受できると確信しています。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/cyberking99/solve-a-challenging-backend-problem-with-php-h0l?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3