php - لمدة - مهمل١٠




الطريقة الأكثر فعالية لإنهاء السجلات بعد 10 دقيقة من الخلق (2)

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

create view v_recoveries as
    select r.*
    from recoveries r
    where expiry > date_sub(now(), interval 10 minutes);

للأداء، تريد فهرس على recoveries(expiry) ، لذلك هذا يجب أن يكون سريعا.

ثم، في وقت فراغك - مرة واحدة في التاريخ، أو مرة واحدة في الساعة، أو مرة واحدة في الأسبوع - حذف السجلات غير الضرورية مع:

DELETE FROM `recoveries`
    WHERE `expiry` <= date_sub(now(), interval 10 minutes);

هذا النهج لديه العديد من المزايا:

  • وجود البيانات هو بالضبط 10 دقيقة، بدلا من بناء على جدولة بعض الوظائف.
  • يمكن أن تحدث عمليات الحذف الفعلية عندما يكون النظام هادئا.
  • إذا فشلت مهمة كرون في التنفيذ، فإن البيانات ليست "تالفة" - أي أنك لا تحصل على بيانات قديمة جدا.
  • إذا كان النظام مشغولا (الكثير من إدراج)، ثم إدراج لا تتنافس مع الحذف، مما يزيد من تباطؤ النظام إلى أسفل.

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

أريد تنفيذ نظام من شأنه أن يحذف تلقائيا كل انتعاش منتهية الصلاحية بعد 10 دقيقة. منذ هذا الوقت انتهاء سيكون مختلفا عن كل صف، فهذا يعني أن استخدام وظيفة كرون ستكون غير فعالة بشكل لا يصدق في أداء هذه المهمة.

ما هي الطريقة الأكثر فعالية لتحقيق ذلك؟

وإليك شفرتي:

$time = time();
$recoveries = DB::fetch("DELETE FROM `recoveries` WHERE `expiry` <= ?;", array($time));

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

يمكنك أيضا تنفيذ هذه التقنية عندما يقوم أي شخص بتسجيل الدخول (إذا كنت لا ترغب في استخدام مشغلات على مستوى ميسكل)





cron