سؤال

أنا أحاول أن إنشاء نقطة نظام في برنامج مماثل إلى تجاوز سعة مكدس أيعندما يقوم المستخدم يفعل بعض الخير (النشاط) له/لها نقاط زيادة.وأنا أتساءل ما هي أفضل طريقة للذهاب نحو تنفيذ هذا حيث db schema + المنطق.

أستطيع أن أفكر في ثلاثة خيارات:

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

ما هي أفضل طريقة للذهاب حول هذا ؟ شكرا لك على وقتك.

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

المحلول

شخصيا, وأود أن استخدام الخيار الثاني لمعالجة هذه المشكلة.

الخيار الأول وظيفة حدود لذا القضاء على هذا الحق بعيدا.

الخيار الثالث هو عدم كفاءة من حيث الأداء فمن المحتمل أنك سوف تكون جلب هذا العدد الكثير, و إذا كان البرنامج هو مثل أي شيء ستاكوفيرفلوو ، وربما عرض (حساب) أن عدد مرات عديدة في مشاهدة صفحة/العمل.

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

يجب علينا في بعض الأوقات التجارة مساحة تخزين البيانات عن الأداء أو العكس بالعكس, و أود أن أقول أن #2 المفاضلة أن كثيرا من فوائد التطبيق.

نصائح أخرى

هذا يعتمد كثيرا على عدد من المتوقع الحسابية سوف تواجه.في الواقع, لذلك على ما يبدو يستخدم الأسلوب الذي يشبه 1) نهج لأسباب تتعلق بالأداء أفترض.

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

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

وأود أن تذهب ل 1 و 2 (المدى في كرون على كل دقيقة أو نحو ذلك).

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

أعتقد أن إعادة حساب الحقل في كل مرة عند نقطة تلقي سوف تكون مبالغة.

شخصيا كنت أذهب مع الخيار الأول ، وإضافة "الإجراءات" جدول لتتبع النشاط الخاص بك التاريخ.

عندما يقوم المستخدم شيئا على الدخول في "الإجراءات" الجدول, مع عمل بعض قيمة النقطة.قيمة النقطة يمكن أن تأتي من جدول آخر أو بعض config.نفس القيمة التي يحصل تضاف إلى سجل المستخدم.

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

كيف بسيط هو نظام النقاط ؟ أعتقد نوع من الأشجار / journalling هو جيد بحيث يمكنك تتبع النشاط على أساس يومي /أسبوعي/شهري عبر جميع المستخدمين

تحقق من http://code.google.com/p/userinfuser/

مفتوح المصدر يسمح لك لإضافة نقاط وشارات إلى التطبيق الخاص بك.وقد Java, Python, PHP, روبي و الارتباطات.

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