هل يجب استخدام جدول منفصل لتخزين مستخدمي الانترنت أو ينبغي أن مجرد استخدام حقول إضافية في الجدول أعضاء موجودة؟

StackOverflow https://stackoverflow.com/questions/1445617

  •  22-07-2019
  •  | 
  •  

سؤال

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

وسؤالي النهائي يأتي الى هذا: على وإذا أنا فقط إضافة بعض الحقول إلى الجدول الموجود أعضاء (last_active_time، is_user_online، hide_online_status، الخ) أو قد يكون من الأفضل للحفاظ على هذه المعلومات في جدول منفصل فكرتي الأولي هو استخدام الجدول الموجود البساطة. وبصرف النظر عن مستوى من التعقيد، ما هي فوائد / عيوب واحد مقابل الآخر؟

هل كانت مفيدة؟

المحلول

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

نصائح أخرى

وإنشاء جدول جديد.

أولا، هناك سبب فلسفي، وهو أن كائن واحد (اقرأ: الجدول) ينبغي أن يكون هدف واحد. أن يحصل غير واضحة كثيرا في تصميم قاعدة البيانات المنطقي، ولكن هذا المبدأ جيد مع ذلك.

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

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

وأخيرا، عليك ربما تتطلب بعض المؤشرات، على سبيل المثال لمعرفة من هو على الانترنت الآن. وتلك المؤشرات (1) سوف تأخذ مساحة أكبر، (2) إنشاء أكثر متناثرة كتل القذرة التي يجب أن تكون مكتوبة جسديا على القرص، و (3) تقديم نقطة خلاف التحديث.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top