>  기사  >  백엔드 개발  >  PHP 및 MySQL의 까다로운 백엔드 문제를 해결한 방법

PHP 및 MySQL의 까다로운 백엔드 문제를 해결한 방법

王林
王林원래의
2024-07-17 21:13:211125검색

How I Solved a Challenging Backend Problem with PHP & MySQL

안녕하세요. 오랜만에 블로그 포스팅을 작성하게 되었습니다. 자, 여기서는 제가 겪었던 가장 어려운 문제 중 하나와 이를 해결한 방법에 대한 개요를 작성하겠습니다.

백엔드 개발자로서 특히 힘들게 하는 과제는 피할 수 없습니다. 최근 PHP와 MySQL을 사용하여 광고 네트워크에서 작업하는 동안 특정 기준에 따라 게시자를 위한 CPM(Cost Per Mille)을 최적화하는 것과 관련된 복잡한 문제에 직면했습니다. 이 문제는 내 기술 능력을 테스트했고 귀중한 학습 경험을 제공했습니다. 이 게시물에서는 제가 이 문제를 어떻게 해결했는지 단계별로 설명하고 직면한 과제와 구현된 솔루션을 강조하겠습니다. 효율적으로 구현하는 방법이나 더 나은 방법에 대해 제가 얻을 수 있는 제안이 있으면 기쁠 것입니다.

문제

이 작업은 다음 기준에 따라 게시자의 CPM을 조정하는 것이었습니다.

  1. 지난 10분 동안 10개의 다른 IP 주소에서 클릭이 발생한 경우 5% 증가
  2. 지난 10분 동안 동일한 IP 주소에서 클릭이 5회 발생한 경우 8% 감소
  3. 동일 국가에서 10회 연속 클릭이 발생하면 2% 증가

솔루션 여정

1단계: 요구 사항 이해

구현을 시작하기 전에 요구사항을 명확히 이해해야 했습니다. CPM 조정을 위한 기준과 원하는 동작을 확인하기 위해 이해관계자들과 논의했습니다. 이 초기 단계는 솔루션을 효과적으로 계획하는 데 매우 중요했습니다.

2단계: 데이터베이스 설정

이미 데이터베이스와 테이블을 만들었고 프로젝트도 이미 진행 중이었기 때문에 기준만 추가하면 되었습니다. 클릭 추적에 필요한 정보를 저장하고 수용할 수 있도록 데이터베이스와 테이블이 설정되었는지 확인했습니다. 테이블 스키마에는 클릭 타임스탬프, IP 주소 및 국가 코드를 저장하기 위한 필드가 포함되어 있습니다(이 게시물의 목적에 그다지 중요하지 않기 때문에 포함하지 않을 다른 필드/열이 있습니다).

3단계: 클릭 데이터 캡처

다음으로 사용자가 광고를 클릭할 때마다 IP 주소와 국가 코드를 가져와 저장하는 기능을 구현했습니다. 이 데이터는 클릭수 테이블에 저장되었습니다.

4단계: 기준 확인 구현

데이터가 수집되면 다음 단계는 기준을 확인하고 이에 따라 CPM을 조정하는 로직을 구현하는 것이었습니다.

  1. 고유 IP 주소 확인 그룹의 각 행에 대한 표현식을 평가하고 null이 아닌 고유한 값의 수를 반환하는 COUNT 함수와 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 주소를 확인합니다.
/** 
 * 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. 동일 국가의 연속 클릭 확인 여기서는 동일한 국가의 연속 클릭을 확인하는 세 번째 기준을 적용합니다.
/** 
 * 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 Premium의 혜택을 통해 더 많은 혜택을 누릴 것이라고 확신합니다.

위 내용은 PHP 및 MySQL의 까다로운 백엔드 문제를 해결한 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.