GQL الاستعلام لتمتد على نحو فعال علاقات الكيان

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

  •  11-07-2019
  •  | 
  •  

سؤال

وأنا في الحالة التي يكون فيها أحتاج لتشمل تطبيقات جوجل علاقات الكيان المحرك في استعلام مثل <وأ href = "http://docs.djangoproject.com/en/dev/topics/db/queries/#lookups المفتى تمتد-علاقات "يختلط =" نوفولو noreferrer "> في جانغو نموذج قاعدة بيانات . أنا باستخدام ListPropertys واحد إلى العديد من العلاقات، كما يلي:

class Foo(db.Model): bars = db.ListProperty(db.Key)
class Bar(db.Model): eggs = db.ListProperty(db.Key)

وأود أن تنفيذ استعلام أن يفعل ما يلي:

# Foo.filter('bars.eggs =', target_egg)
[foo
for egg in eggs if egg == target_egg
for eggs in bar.eggs
for bar in foo.bars
for foo in Foo.all()]

وهذا الفهم يبدو غير فعال بشكل جذري. أود حقا أن تنفيذ استعلام كما هو الحال في الجزء علق بها، لكنها لا تبدو وكأنها <لأ href = "http://code.google.com/appengine/docs/datastore/gqlreference.html" يختلط = "نوفولو noreferrer"> بناء الجملة GQL يسمح للاستعلامات مقابل سمات سمات:

   SELECT * FROM <kind>
    [WHERE <condition> [AND <condition> ...]]
    [ORDER BY <property> [ASC | DESC] [, <property> [ASC | DESC] ...]]
    [LIMIT [<offset>,]<count>]
    [OFFSET <offset>]

  <condition> := <property> {< | <= | > | >= | = | != } <value>
  <condition> := <property> IN <list>
  <condition> := ANCESTOR IS <entity or key>
هل كانت مفيدة؟

المحلول

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

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

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