كيف يمكنني تقسيم طلبات وحدة المعالجة المركزية العالية على Google App Engine؟

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

سؤال

لإعطاء مثال على نوع الطلب الذي لا يمكنني معرفة ما يجب فعله من أجله:

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

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

يمكن العثور على مثال على هذه المعلومات في الممارسة العملية هنا.

عند اكتمال اللعبة، ويتم تحديث إطار ما، يجب أن أقوم بتحديث اللعبة والإطار وكل إطار بعده وربما بعض الإطارات التي قبله (للتأكد من صحة نتائجهم) والإحصائيات.تقوم هذه العملية دائمًا بوضع علامة على شاشة وحدة المعالجة المركزية.حتى إذا لم تكتمل اللعبة، ولا يلزم حساب الإحصائيات، فيجب تحديث النتائج وما شابه ذلك لإظهار التقدم في الوقت الفعلي للمستخدم، وبالتالي يتم وضع علامة عليها أيضًا.يبلغ متوسط ​​وقت وحدة المعالجة المركزية لهذا المعالج أكثر من 7000 دورة، ولا يعرض حتى طريقة عرض.يقوم معظم الأشخاص بلعب 3 إلى 4 ألعاب في كل سلسلة - إذا كانوا يقومون بإدخال نتائجهم في الوقت الفعلي، في الممرات، فهذا يعني طلبًا واحدًا تقريبًا كل 2 إلى 4 دقائق، ولكن إذا كتبوا كل شيء وأدخلوه لاحقًا، فهناك 30-40 من يتم تقديم هذه الطلبات على التوالي.


كما هو مطلوب، نموذج البيانات للفئات الهامة:

class Stats(db.Model):
  version = db.IntegerProperty(default=1)
  first_balls=db.IntegerProperty(default=0)
  pocket_tracked=db.IntegerProperty(default=0)
  pocket=db.IntegerProperty(default=0)
  strike=db.IntegerProperty(default=0)
  carry=db.IntegerProperty(default=0)
  double=db.IntegerProperty(default=0)
  double_tries=db.IntegerProperty(default=0)
  target_hit=db.IntegerProperty(default=0)
  target_missed_left=db.IntegerProperty(default=0)
  target_missed_right=db.IntegerProperty(default=0)
  target_missed=db.FloatProperty(default=0.0)
  first_count=db.IntegerProperty(default=0)
  first_count_miss=db.IntegerProperty(default=0)

  second_balls=db.IntegerProperty(default=0)
  spare=db.IntegerProperty(default=0)
  single=db.IntegerProperty(default=0)
  single_made=db.IntegerProperty(default=0)
  multi=db.IntegerProperty(default=0)
  multi_made=db.IntegerProperty(default=0)
  split=db.IntegerProperty(default=0)
  split_made=db.IntegerProperty(default=0)

class Game(db.Model):
  version = db.IntegerProperty(default=3)
  user = db.UserProperty(required=True)
  series = db.ReferenceProperty(Series)
  score = db.IntegerProperty()
  game_number = db.IntegerProperty()
  pair = db.StringProperty()
  notes = db.TextProperty()
  simple_entry_mode = db.BooleanProperty(default=False)
  stats = db.ReferenceProperty(Stats)
  complete = db.BooleanProperty(default=False)

class Frame(db.Model):
  version = db.IntegerProperty(default=1)
  user = db.UserProperty()
  game = db.ReferenceProperty(Game, required=True)
  frame_number = db.IntegerProperty(required=True)
  first_count = db.IntegerProperty(required=True)
  second_count = db.IntegerProperty()
  total_count = db.IntegerProperty()
  score = db.IntegerProperty()
  ball = db.ReferenceProperty(Ball)
  stance = db.FloatProperty()
  target = db.FloatProperty()
  actual = db.FloatProperty()
  slide = db.FloatProperty()
  breakpoint = db.FloatProperty()
  pocket = db.BooleanProperty()
  pocket_type = db.StringProperty()
  notes = db.TextProperty()
  first_pinfall = db.ListProperty(bool)
  second_pinfall = db.ListProperty(bool)
  split = db.BooleanProperty(default=False)
هل كانت مفيدة؟

المحلول

بعض الاقتراحات:

  • يمكنك تخزين إحصائيات الإطارات كجزء من نفس الكيان الموجود في اللعبة، بدلاً من وجود كيان منفصل لكل منها، عن طريق تخزينها كقائمة من حقول البت (المخزنة في أعداد صحيحة) للدبابيس الموجودة في نهاية كل نصف- الإطار، على سبيل المثال.اسمحوا لي أن أعرف إذا كنت تريد المزيد من التفاصيل حول كيفية تنفيذ ذلك.
  • إذا فشل ذلك، يمكنك حساب بعض الإحصائيات الأكثر ترابطًا عند الجلب.على سبيل المثال، يجب أن يكون حساب النتيجة حتى الآن بسيطًا إذا قمت بتحميل اللعبة بأكملها مرة واحدة، مما يعني أنه يمكنك تجنب الاضطرار إلى تحديث إطارات متعددة في كل طلب.
  • يمكننا أن نقدم المزيد من المساعدة إذا عرضت لنا نموذج البيانات الخاص بك.:)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top