"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como resolvi um problema desafiador de back-end com PHP e MySQL

Como resolvi um problema desafiador de back-end com PHP e MySQL

Publicado em 31/07/2024
Navegar:776

How I Solved a Challenging Backend Problem with PHP & MySQL

Olá, já faz um tempo que não escrevi uma postagem no blog; bem, aqui estou escrevendo sobre um dos problemas mais desafiadores que encontrei e uma visão geral de como o resolvi.

Desafios, especialmente aqueles que vão deixar você nervoso, não podem ser evitados como desenvolvedor back-end. Recentemente, enquanto trabalhava em uma rede de anunciantes usando PHP e MySQL, encontrei um problema complexo relacionado à otimização do custo por mil (CPM) para editores com base em critérios específicos. Este problema testou minhas habilidades técnicas e proporcionou uma experiência de aprendizado inestimável. Neste post, explicarei passo a passo como resolvi esse problema, destacando os desafios enfrentados e as soluções implementadas. Ficarei feliz se houver sugestões sobre como implementar com eficiência ou sobre a melhor maneira de fazer isso.

O problema

A tarefa era ajustar o CPM do editor com base nos seguintes critérios:

  1. aumento de 5% se houver cliques de 10 endereços IP diferentes nos últimos 10 minutos.
  2. Diminuição de 8% se houver cliques do mesmo endereço IP 5 vezes nos últimos 10 minutos.
  3. 2% de aumento se houver 10 cliques consecutivos do mesmo país.

A jornada da solução

Etapa 1: Compreendendo os Requisitos

Antes de iniciar a implementação, eu precisava de uma compreensão clara dos requisitos. Discuti com os stakeholders para confirmar os critérios e o comportamento desejado para ajuste do CPM. Esta etapa inicial foi crucial para planejar a solução de forma eficaz.

Etapa 2: Configurando o banco de dados

Já tenho meu banco de dados e tabelas criados, além disso, o projeto já estava ativo, então só precisei adicionar os critérios. Garanti que o banco de dados e a tabela estivessem configurados para armazenar e acomodar as informações necessárias para o rastreamento de cliques. O esquema da tabela incluía campos para armazenar o carimbo de data e hora do clique, endereço IP e código do país (há outros campos/colunas que eu não incluiria porque eles não são realmente importantes para a causa desta postagem).

Etapa 3: captura de dados de clique

Em seguida, implementei uma função para obter e salvar o endereço IP e o código do país sempre que um usuário clicar em um anúncio. Esses dados foram armazenados na tabela de cliques.

Etapa 4: Implementando as verificações de critérios

Com os dados capturados, o próximo passo foi implementar a lógica para verificar os critérios e ajustar o CPM de acordo.

  1. Verificação de endereços IP exclusivos Conto os endereços IP exclusivos nos últimos 10 minutos usando a função COUNT e a palavra-chave DISTINCT que avalia a expressão para cada linha em um grupo e retorna o número de valores exclusivos e não nulos .
/** 
 * 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. Verificação de endereços IP repetidos Em seguida, verifico endereços IP repetidos ou não exclusivos nos últimos 10 minutos usando a função SQL COUNT.
/** 
 * 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. Verificação de cliques consecutivos do mesmo país Aqui, aplico o terceiro critério que é verificar cliques consecutivos do mesmo país.
/** 
 * 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;
}

Etapa 5: Atualizando o CPM

Nesta parte, atualizo o CPM do editor e o uso para calcular seus ganhos para aquele clique específico.

O resultado

Ao implementar esta solução, a rede de anunciantes agora ajusta dinamicamente o CPM com base nos dados de cliques do usuário. Isso garante um modelo de receita justo e otimizado para os editores, aumentando a eficácia geral da rede de anunciantes.

Sobre mim e por que estágio HNG?

Sou Kingsley Gbutemu Kefas, um desenvolvedor backend apaixonado por construir sistemas escaláveis ​​e eficientes. Sou um solucionador de problemas, adoro aprender coisas novas e maneiras de fazer algo. Como desenvolvedor, sou motivado por resolver desafios, principalmente os complexos que me fazem pensar criticamente. Eu sei que o estágio HNG é uma oportunidade para crescer como desenvolvedor, trabalhando em projetos do mundo real e aprendendo com especialistas do setor. Estou animado para iniciar minha jornada com o estágio HNG e contribuir com a comunidade de tecnologia. Acredito que esta jornada irá aprimorar minhas habilidades e contribuir para projetos impactantes e tenho certeza que me beneficiarei mais dos benefícios do HNG Premium.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/cyberking99/solving-a-challenging-backend-problem-with-php-h0l?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3