سؤال

هل يمكن لأي شخص أن يوضح كيف يمكنني تخزين البيانات الهرمية والاستعلام عنها بسهولة في مخزن بيانات محرك تطبيقات Google؟

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

المحلول

الخيار الأفضل يعتمد على متطلباتك.إليك بعض الحلول (أفترض أنك تستخدم لغة بايثون، لأنك لم تحددها):

  1. إذا كنت بحاجة إلى إجراء تحديثات المعاملات على شجرة بأكملها، ولن يكون لديك أكثر من حوالي 1QPS من التحديثات المستمرة لأي شجرة واحدة، فيمكنك استخدام الدعم المدمج للتخزين الهرمي.عند إنشاء كيان، يمكنك تمرير السمة "الأصل" لتحديد الكيان الأصلي أو المفتاح، وعند الاستعلام، يمكنك استخدام طريقة .ancestor() (أو "ANCESTOR IS" في GQL لاسترداد جميع أحفاد كيان معين .
  2. إذا لم تكن بحاجة إلى تحديثات المعاملات، فيمكنك تكرار وظائف مجموعات الكيانات دون مشكلات التنافس (وأمان المعاملات):أضف db.ListProperty(db.Key) إلى النموذج الخاص بك المسمى "الأجداد"، وقم بملئه بقائمة أسلاف الكائن الذي تقوم بإدراجه.ومن ثم يمكنك بسهولة استرداد كل ما ينحدر من سلف معين باستخدام MyModel.all().filter('ancestors =',parent_key).
  3. إذا لم تكن بحاجة إلى معاملات، وكنت تهتم فقط باسترداد العناصر التابعة المباشرة للكيان (وليس كل الفروع)، فاستخدم الطريقة الموضحة أعلاه، ولكن بدلاً من ListProperty، استخدم فقط ReferenceProperty للكيان الأصلي.يُعرف هذا بقائمة الجوار.

هناك أساليب أخرى متاحة، ولكن هذه الثلاثة ينبغي أن تغطي الحالات الأكثر شيوعا.

نصائح أخرى

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

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

وهنا بعض الأفكار حول هذا الموضوع وجدت من قبل غوغلينغ (على الرغم من أن لماي، ولكن يمكنك الحصول على فكرة عامة عن ذلك): <وأ href = "http://mikehillyer.com/articles/managing-hierarchical-data -في-ماي / "يختلط =" نوفولو noreferrer "> إدارة الهرمي البيانات في الخلية

وآه وهنا مناقشة لمحرك جوجل التطبيق: النمذجة الهرمي بيانات

ويتمثل أحد السبل لاستخدام السمة الوالد النموذجي. ثم يمكنك الاستفادة من query.ancestor () وmodel.parent () وظائف.

واعتقد ان ذلك يعتمد على أي نوع من العمليات التي تريد القيام به على هذه البيانات التي من شأنها تحديد أفضل السبل لتمثيلها.

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