query - php mysql شرح




ما هي أفضل طريقة لحساب مشاهدات الصفحة في PHP/MySQL؟ (4)

وأفضل وسيلة أقصدها هي أن وضع هذا على ملف post.php الخاص بي هو الشيء الوحيد الذي يمكنني التفكير فيه:

$query = mysql_query(" UPDATE posts SET views + 1 WHERE id = '$id' ");

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


أفضل حل IMHO هو تخزين views_count داخل الذاكرة (memcached ، أيا كان) ، وإجراء تحديثات في الذاكرة. (بالطبع يجب مزامنة التحديثات)

ثم يمكنك استخدام البرنامج النصي cron الذي سيدفع هذه القيم إلى ديسيبل. (بعد بعض الوقت - الثواني ، الدقائق ، أيا كان.)


إذا كان memcache خيارًا في بيئة الخادم لديك ، فإليك طريقة رائعة أخرى لأخذ العينات ، ولكن أيضًا مواكبة الرقم الدقيق (على عكس إجابتي الأخرى):

function recordPostPageView($page_id) {
    $memcache = new Memcached(); // you could also pull this instance from somewhere else, if you want a bit more efficiency*

    $key = "Counter for Post {$page_id}";

    if(!$memcache->get($key)) {
        $memcache->set($key, 0);
    }

    $new_count = $memcache->increment($key);

    // you could uncomment the following if you still want to notify mysql of the value occasionally
    /*
    $notify_mysql_interval = 100;
    if($new_count % $notify_mysql_interval == 0) {
        $query = mysql_query("UPDATE posts SET views = {$new_count} WHERE id = '{$page_id}' ");
        // execute query, etc
    }
    */

    return $new_count;
}
  • و لا تمانع في أن يطهر المتشائمون بكاء على الأغصان المنفردة. أو يمكنك تمريرها إلى هذه الوظيفة ، إذا كنت أكثر نقاءًا من البراغماتية :)

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

<?php
session_start();
$counter_name = "counter.txt";
// Check if a text file exists. If not create one and initialize it to zero.
if (!file_exists($counter_name)) {
  $f = fopen($counter_name, "w");
  fwrite($f,"0");
  fclose($f);
}
// Read the current value of our counter file
$f = fopen($counter_name,"r");
$counterVal = fread($f, filesize($counter_name));
fclose($f);
// Has visitor been counted in this session?
// If not, increase counter value by one
if(!isset($_SESSION['hasVisited'])){
  $_SESSION['hasVisited']="yes";
  $counterVal++;
  $f = fopen($counter_name, "w");
  fwrite($f, $counterVal);
  fclose($f); 
}
echo "You are visitor number $counterVal to this site";


يمكنك الاحتفاظ بمصفوفة مضادة في ذاكرة التخزين المؤقت (مثل APC أو Memcache) وزيادة العداد لبعض المنشورات في ذلك. ثم تخزين التحديثات مرة واحدة في حين. قد تفقد بعض المشاهدات في حالة حدوث إعادة تعيين ذاكرة التخزين المؤقت

الحل الآخر هو الاحتفاظ بجدول منفصل للزيارات فقط (الحقل: البريد ، والزيارات). هذا هو الصيام الذي يمكنك الحصول عليه من mysql. حاول استخدام محرك InnoDB ، لأنه يوفر قفلًا على مستوى الصف!





mysql