"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف قمت بحل مشكلة الواجهة الخلفية الصعبة مع PHP وMySQL

كيف قمت بحل مشكلة الواجهة الخلفية الصعبة مع PHP وMySQL

تم النشر بتاريخ 2024-07-31
تصفح:687

How I Solved a Challenging Backend Problem with PHP & MySQL

مرحبًا، لقد مر وقت طويل منذ أن كتبت تدوينة؛ حسنًا، أنا هنا أكتب عن واحدة من أصعب المشكلات التي واجهتها ولمحة عامة عن كيفية حلها.

لا يمكن الهروب من التحديات، خاصة تلك التي ستجعلك تعمل بشكل جيد، كمطور للواجهة الخلفية. في الآونة الأخيرة، أثناء العمل على شبكة إعلانية باستخدام PHP وMySQL، واجهت مشكلة معقدة تتعلق بتحسين التكلفة لكل ألف ظهور (CPM) للناشرين بناءً على معايير محددة. اختبرت هذه المشكلة مهاراتي الفنية ووفرت لي تجربة تعليمية لا تقدر بثمن. في هذا المنشور، سأطلعك على كيفية حل هذه المشكلة خطوة بخطوة، مع تسليط الضوء على التحديات التي واجهتها والحلول التي تم تنفيذها. سأكون سعيدًا إذا كانت هناك اقتراحات يمكنني الحصول عليها حول كيفية التنفيذ بكفاءة أو طريقة أفضل للقيام بذلك.

المشكلة

كانت المهمة هي ضبط التكلفة لكل ألف ظهور للناشر بناءً على المعايير التالية:

  1. زيادة بنسبة 5% إذا كانت هناك نقرات من 10 عناوين IP مختلفة في آخر 10 دقائق.
  2. انخفاض بنسبة 8% إذا كانت هناك نقرات من نفس عنوان IP 5 مرات في آخر 10 دقائق.
  3. زيادة بنسبة 2% إذا كان هناك 10 نقرات متتالية من نفس البلد.

رحلة الحل

الخطوة 1: فهم المتطلبات

قبل القفز إلى التنفيذ، كنت بحاجة إلى فهم واضح للمتطلبات. لقد ناقشت مع أصحاب المصلحة تأكيد المعايير والسلوك المطلوب لضبط التكلفة لكل ألف ظهور. وكانت هذه الخطوة الأولية حاسمة في التخطيط للحل بشكل فعال.

الخطوة الثانية: إعداد قاعدة البيانات

لقد قمت بالفعل بإنشاء قاعدة البيانات والجداول الخاصة بي، كما أن المشروع كان مباشرًا بالفعل، لذلك كنت بحاجة فقط إلى إضافة المعايير. لقد تأكدت من إعداد قاعدة البيانات والجدول لتخزين واستيعاب المعلومات الضرورية لتتبع النقرات. يتضمن مخطط الجدول حقولًا لتخزين الطابع الزمني للنقر وعنوان IP ورمز البلد (هناك حقول/أعمدة أخرى لن أدرجها لأنها ليست مهمة حقًا لسبب هذا المنشور).

الخطوة 3: التقاط بيانات النقر

بعد ذلك، قمت بتنفيذ وظيفة للحصول على عنوان IP ورمز البلد وحفظهما عندما ينقر المستخدم على إعلان. تم تخزين هذه البيانات في جدول النقرات.

الخطوة 4: تنفيذ عمليات التحقق من المعايير

مع جمع البيانات، كانت الخطوة التالية هي تنفيذ المنطق للتحقق من المعايير وضبط التكلفة لكل ألف ظهور وفقًا لذلك.

  1. التحقق من عناوين IP الفريدة أقوم بإحصاء عناوين IP الفريدة في آخر 10 دقائق باستخدام الدالة COUNT والكلمة الأساسية DISTINCT التي تقوم بتقييم التعبير لكل صف في المجموعة وإرجاع عدد القيم الفريدة وغير الفارغة .
/** 
 * 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 المتكررة أقوم بعد ذلك بالتحقق من عناوين IP المتكررة أو غير الفريدة في آخر 10 دقائق باستخدام وظيفة 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. التحقق من النقرات المتتالية من نفس البلد وهنا أطبق المعيار الثالث وهو التحقق من النقرات المتتالية من نفس البلد.
/** 
 * 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: تحديث التكلفة لكل ألف ظهور

بالنسبة لهذا الجزء، أقوم بتحديث التكلفة لكل ألف ظهور للناشر واستخدامها لحساب أرباحه مقابل تلك النقرة المحددة.

النتيجة

من خلال تنفيذ هذا الحل، تقوم شبكة الإعلانات الآن بضبط التكلفة لكل ألف ظهور ديناميكيًا استنادًا إلى بيانات النقرات الواردة من المستخدم. وهذا يضمن نموذج إيرادات عادلًا ومُحسّنًا للناشرين، مما يعزز الفعالية الشاملة لشبكة الإعلانات.

نبذة عني ولماذا تدريب HNG؟

أنا Kingsley Gbutemu Kefas، مطور الواجهة الخلفية الشغوف ببناء أنظمة فعالة وقابلة للتطوير. أنا أحل المشكلات، وأحب تعلم أشياء جديدة وطرق القيام بشيء ما. كمطور، يحفزني حل التحديات، خاصة تلك المعقدة التي تجعلني أفكر بشكل نقدي. أعلم أن HNG Internship يمثل فرصة بالنسبة لي للنمو كمطور من خلال العمل في مشاريع واقعية والتعلم من خبراء الصناعة. أنا متحمس لبدء رحلتي مع HNG Internship والمساهمة في مجتمع التكنولوجيا. أعتقد أن هذه الرحلة ستعمل على صقل مهاراتي والمساهمة في المشاريع المؤثرة وأنا متأكد من أنني سأستفيد أكثر من مزايا HNG Premium.

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/cyberking99/solve-a-challenging-backend-problem-with-php-h0l?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3