سؤال

لنفترض أن لدي نموذج فو في جي إن هذا الاستعلام:

الاستعلام = Foo.كل().النظام('-الرئيسية')

أريد الحصول على ن ال سجل.ما هي الطريقة الأكثر فعالية لتحقيق ذلك ؟

سوف الحل كسر إذا كان يأمر الملكية ليست فريدة من نوعها ، مثل واحد أدناه:

الاستعلام = Foo.كل().النظام('-اللون')

تحرير:n > 1000

تحرير 2:أريد أن تطوير ودية الترحيل الآلية التي تظهر الصفحات المتاحة (مثل الصفحة 1 الصفحة 2 ...صفحة 185) و يتطلب" ؟ page=x" في سلسلة الاستعلام بدلا من" ؟ المرجعية=XXX".عندما page = x, الاستعلام إحضار الوثائق بداية من السجل الأول من تلك الصفحة.

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

المحلول

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

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

إذا كنت ترغب في توفير 'ودية' صفحة تعويضات للمستخدمين, ما يمكنك القيام به هو استخدام memcache لتخزين وجود ارتباط بين بداية الإزاحة المرجعية (order_property الرئيسية) tuple.عند إنشاء صفحة إدراج أو تحديث مرجعية الكيان بعد آخر.عند جلب صفحة استخدام المرجعية إذا كان موجود أو إنشاء ذلك الطريق الصعب ، عن طريق القيام الاستفسارات مع إزاحة - يحتمل عدة استفسارات لو الإزاحة عالية بما فيه الكفاية.

نصائح أخرى

وثائق من الدرجة الاستعلام يمكن الاطلاع على:http://code.google.com/appengine/docs/python/datastore/queryclass.html#Query

الاستعلام الدرجة يوفر جلب ساحرة تحيط حد و الإزاحة في الحالة 1 و n

وقت تشغيل جلب ينمو خطيا مع الإزاحة + الحد

وبالتالي فإن الطريقة الوحيدة لتحسين في قضيتك ستكون التأكد من أن السجلات التي تريدها الوصول إلى معظم الأحيان أقرب إلى بداية المصفوفة.

هل يمكن استخدام الاستعلام.تصفية('key = ', n) الاستعلام.الحصول على()

وتعود أول مباراة مع مفتاح n

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