سؤال

هل يدعم SQLAlchemy نوعًا ما من التخزين المؤقت، لذلك إذا قمت بتشغيل نفس الاستعلام بشكل متكرر فإنه يقوم بإرجاع الاستجابة من ذاكرة التخزين المؤقت بدلاً من الاستعلام عن قاعدة البيانات؟هل يتم مسح ذاكرة التخزين المؤقت هذه تلقائيًا عند تحديث قاعدة البيانات؟

أو ما هي أفضل طريقة لتنفيذ ذلك على إعداد CherryPy + SQLAlchemy؟

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

المحلول

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

وأنا على التوالي في الإنتاج الآن. على سبيل المثال نفسه في حي وثائق مقدمة هي في HTTP: // www.sqlalchemy.org/docs/orm/examples.html#beaker-caching .

وUPDATE: تم الآن استبدال بيكر مع التخزين المؤقت dogpile: <لأ href = "http://docs.sqlalchemy.org/en/latest/orm/examples.html#module-examples.dogpile_caching" يختلط = "noreferrer" > http://docs.sqlalchemy.org/en/latest/orm/examples.html#module-examples.dogpile_caching

نصائح أخرى

ليست إجابة على سؤالك الثاني، ولكن من التعليقات الموجودة في هذا الرابط تشير إلى أن SQLAlchemy لا يدعم التخزين المؤقت: http://spyced.blogspot.com/2007/01/why-sqlalchemy-impresses-me.html

وقال رافين...

Does SQLAlchemy do any kind of internal caching?

For example, if you ask for the same data twice (or an obvious subset
of the initially requested data) will the database be hit once or twice?

I recently wrote a caching database abstraction layer for an
application and (while fun) it was a fair bit of work to get it to a
minimally functional state. If SQLAlchemy did that I would seriously
consider jumping on the bandwagon.

I've found things in the docs that imply something like this might be
going on, but nothing explicit.
4:36 PM

وقال جوناثان إليس...

No; the author of SA [rightly, IMO] considers caching a separate concern.

What you saw in the docs is probably the SA identity map, which makes it so 
if you load an instance in  two different places, they will refer
to the same object. But the database will still be queried twice, so it is
not a cache in the sense you mean.

يدعم SQLAlchemy نوعين من ذاكرات التخزين المؤقت:

  1. تخزين مجموعة النتائج مؤقتًا بحيث يصل تشغيل نفس الاستعلام بشكل متكرر إلى ذاكرة التخزين المؤقت بدلاً من قاعدة البيانات.يستخدم dogpile الذي يدعم العديد من الواجهات الخلفية المختلفة، بما في ذلك memcached, redis, والملفات المسطحة الأساسية.

    المستندات هنا: http://docs.sqlalchemy.org/en/latest/orm/examples.html#module-examples.dogpile_caching

  2. التخزين المؤقت query كائن بحيث لا يضطر مترجم بايثون إلى إعادة تجميع سلسلة الاستعلام يدويًا في كل مرة.تسمى هذه الاستعلامات baked queries ويتم استدعاء ذاكرة التخزين المؤقت baked.في الأساس يقوم بتخزين كافة الإجراءات sqlalchemy يستغرق الأمر قبل الوصول إلى قاعدة البيانات - فهو لا يقلل من مكالمات قاعدة البيانات.تظهر المعايير الأولية تسريعًا يصل إلى 40% query وقت التوليد في مقابل زيادة طفيفة في إسهاب التعليمات البرمجية.

    المستندات هنا: http://docs.sqlalchemy.org/en/latest/orm/extensions/baked.html

وأو استخدام مخبأ مستوى التطبيق عبر إشارات ضعيفة dicts (weakref.WeakValueDictionary)، انظر مثالا هنا: <لأ href = "http://www.sqlalchemy.org/trac/wiki/UsageRecipes/UniqueObject" يختلط = "noreferrer نوفولو"> http://www.sqlalchemy.org/trac/wiki/UsageRecipes/UniqueObject

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