سؤال

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

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

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

المحلول

إليك أبسط طريقة:

class Vertex(db.Model):
  outedges = db.ListProperty(db.Key)
  # Other information about the vertex here

يمكنك الآن استكشاف الرسم البياني دون أي استفسارات على الإطلاق - اتصل فقط DB.GET على 1 مفاتيح أو أكثر لاسترداد القمم ذات الصلة:

# Get the first referenced vertex
vertex2 = db.get(vertex1.outedges[0])

# Get all referenced vertices
vertices = db.get(vertex1.outedges)

نصائح أخرى

اعتمادا على عدد قمة الرأس / الروابط التي قد ترغب في استخدام القوائم فقط بدلا من إنشاء مجموعة من الكيانات الجديدة. تحقق من مشاكل الرسم البياني للأصدقاء الموضحة في النصف الثاني من هذا الفيديو من Google IO 2009: http://www.youtube.com/watch؟v=agal6ngpkb8.

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

بالنظر إلى أنك تستخدم مشغل Google App، فستكون أفضل ما إذا قمت بتخزين المعلومات في الجداول المنفصلة:

واحد للقمة، واحدة للروابط من قمة (كما قلت بالفعل) وواحدة إضافية حيث تكون المسارات مسبقة مسبقا بالفعل.

GAE يعمل بشكل أفضل إذا كانت المعلومات التي تخزنها غير معدي حتى لا تضطر إلى القيام بأي حسابات على ذلك.

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