سؤال

لدي منظمة هرمية هي شجرة حيث العقدة هي طفل إذا كان الوالد يرعى الطفل.يبدو أنني يمكن أن تعبر الشجرة مع هذا الرمز

def get_team(self, person, team):
    firstline = User.query(User.sponsor == person.key).fetch(99999999)
    if firstline:
        for person in firstline:
            team.append(person)
            newdownline = self.downline(person, team)        
    return team

باستخدام ما سبق يمكنني الحصول على منظمة المستخدم فقط عن طريق

downline=user.get_team(user, [])

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

def downline(self, person, team, teamlist):
    firstline = User.query(User.sponsor == person.key).fetch(99999999)
    if firstline:
        for person in firstline:
            teamlist.append(person)
            newdownline = self.downline(person, team, teamlist)        
            team.append(newdownline)
    return teamlist 

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

people = user.downline(user, [], [])

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

المحلول

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

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

if person.id in downline_cache:
      team.append(downline_cache[person.id])
else:
      downline_cache[person.id] = results
      team.append(results)

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

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

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