سؤال

هل من السهل تعلم GQL لشخص يعرف SQL؟كيف هو جانغو/بيثون؟هل يجعل App Engine عملية التوسع أمرًا سهلاً حقًا؟هل هناك أي حماية مدمجة ضد "حقن GQL"؟وما إلى ذلك وهلم جرا...

أود أن أسمع التقلبات غير الواضحة في استخدام محرك التطبيقات.

هتافات!

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

المحلول

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

المكدس تجاوز النقاش حول الحد 1000 صف واحد

كتب ملخصا جيدا حقا من هذه وغيرها من المشاكل

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

نصائح أخرى

لقد كانت تجربتي مع محرك تطبيقات Google رائعة، و 1000 وكان الحد النتيجة إزالة, ، هنا رابط لملاحظات الإصدار:

ملاحظات إصدار محرك التطبيق

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

وGQL بسيط للغاية - انها مجموعة فرعية من SQL 'SELECT' بيان، لا شيء أكثر من ذلك. انها ليست سوى طبقة الراحة فوق الجزء العلوي من واجهات برمجة التطبيقات على مستوى منخفض، رغم ذلك، ويتم كل إعراب في بيثون.

وبدلا من ذلك، أوصي باستخدام API الاستعلام الذي هو إجرائي، لا تحتاج الى الاعراب وقت التشغيل، ويجعل من الضعف "حقن GQL" من المستحيل تماما (على الرغم من أنه من المستحيل في GQL مكتوبة بشكل صحيح على أي حال). وAPI سؤال بسيط جدا: دعوة. جميع () على فئة النموذجي، أو الاتصال db.Query (modelname). الكائن سؤال له .filter (field_and_operator، القيمة)،. النظام (field_and_direction) وطرق .ancestor (كيان)، بالإضافة إلى جميع المرافق GQL الأجسام ديك (. احصل على ()، .fetch ()، .count ()) ، الخ) كل الطرق الاستعلام بإرجاع الكائن الاستعلام نفسه للراحة، حتى تتمكن من سلسلة للهم:

<اقتباس فقرة>   

والنتائج = MyModel.all () تصفية ( "فو ="، 5). النظام ( "- شريط"). جلب (10)

هل ما يعادل:

<اقتباس فقرة>   

والنتائج = MyModel.gql ( "WHERE فو = 5 ORDER BY شريط DESC LIMIT 10"). إحضار ()

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

def deepFetch(queryGen,key=None,batchSize = 100):
  """Iterator that yields an entity in batches.

  Args:
    queryGen: should return a Query object
    key: used to .filter() for __key__
    batchSize: how many entities to retrieve in one datastore call

  Retrieved from http://tinyurl.com/d887ll (AppEngine cookbook).
  """

  from google.appengine.ext import db

   # AppEngine will not fetch more than 1000 results
  batchSize = min(batchSize,1000)

  query = None
  done = False
  count = 0

  if key:
    key = db.Key(key)

  while not done:
    print count
    query = queryGen()
    if key:
      query.filter("__key__ > ",key)
    results = query.fetch(batchSize)
    for result in results:
      count += 1
      yield result
    if batchSize > len(results):
      done = True
    else:
      key = results[-1].key()

ورمز أعلاه مع API عن بعد (انظر هذه المقالة ) يسمح لك لاسترداد العديد من الكيانات ما تحتاج إليه.

ويمكنك استخدام رمز أعلاه مثل هذا:

def allMyModel():
  q = MyModel.all()

myModels = deepFetch(allMyModel)

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

وأنا استخدامها لاستضافة العديد من التطبيقات على شبكة الإنترنت حركة المرور العالية (في وقت الذروة واحد منهم يحصل 50K يضرب دقيقة).

ومحرك جوجل التطبيق لا يستخدم قاعدة البيانات الفعلية، وعلى ما يبدو يستخدم نوعا من خريطة التجزئة الموزعة. هذا وسوف تصلح لبعض السلوكيات مختلفة أن الناس الذين اعتادوا على SQL فقط لن نرى في البداية. هكذا على سبيل المثال الحصول على COUNT من العناصر الموجودة في SQL منتظم ومن المتوقع أن تكون عملية سريعة، لكن مع GQL انها مجرد لن تعمل بنفس الطريقة.

وفيما يلي بعض القضايا أكثر:

http://blog.burnayev.com/2008/04/gql -limitations.html

في تجربتي الشخصية، انها تعديلا، ولكن منحنى التعلم على ما يرام.

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