سؤال

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

تم بناء طلبنا باستخدام ASP.NET MVC و Lhibernate. أحاول أن أفهم ما إذا كان التخزين المؤقت للمستوى - 2 من شأنه أن يساعد في وضعي. سأكون ممتنا حقا إذا كنت تستطيع رفاقا أن تسقط بعض الضوء على هذا.

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

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

المحلول

بعد استخدام ذاكرة التخزين المؤقت للمستوى الثاني (باستخدام المزود Memcached) و Nihibernate.search الوظيفة الإضافية يبدو لي يمكنك الاستفادة من كليهما.

يعتمد مكون nhibernate.search على lucene.net ويتم فصل البحث عن الكلمات الرئيسية من قاعدة البيانات الذاتية. يتم إنشاء ملف فهرس مختلف يتم إنشاؤه لكل فئة معينة ويمكن تعيين التحسينات على مستوى الخصائص باستخدام سمات، مما يمنحك مستوى إضافي من الحبيبية. بالإضافة إلى ذلك، يمكنك تنفيذ أفضل مباريات ومقترحات (تحقق من Lucene في العمل و / أو البحث في الإسبات في العمل). كملاحظة، ليس لديك للحفاظ على الفهرس (ما لم تطلب بشكل صريح بإعادة إنشاء مؤشر)؛ يدير التنفيذ كل شيء وراء الكواليس على الرغم من أنه يمكنك التعامل مع الفهرس إذا كنت ترغب في ذلك. لذلك، سيتم تحديث / حذف / تحديث المنتج تلقائيا وفقا للمؤشر.

بالنسبة لذاكرة التخزين المؤقت للمستوى الثاني، تحصل على دفعة الأداء الفوري. في بيئة اختبار مع مجموعة بيانات من الصفوف تقريبا 2 ميل، كان لدي أكثر من 20٪ من التحسن حتى على عدد قليل جدا من الطلب. زيادة الأداء أكبر تدريجيا كزيادة عدد الطلبات - يزيد التطبيق أولا ذاكرة التخزين المؤقت للمستوى الثاني وإذا لم يجدها ثم يضرب DB لجلب الصفوف المطلوبة وإدراجها على ذاكرة التخزين المؤقت للاستعلامات المستقبلية. مرة أخرى يمكنك إدارة الأشياء مثل مدة التخزين المؤقت وإعدادات التكوين الأخرى، بالإضافة إلى مسح ذاكرة التخزين المؤقت بشكل صريح (كل ذلك، جزء منه، أو إدخالات معينة) إذا كنت ترغب في القيام بذلك. لاحظ أن حالة ذاكرة التخزين المؤقت تدار من قبل التطبيق أثناء حفظ / تحديث / حذف.

لتصلب الأسماك * يعتمد ذاكرة التخزين المؤقت على المستوى الثاني على المزود (أي Memcached هو أداء للغاية وقابل للتطوير ودعم المثيلات الموزعة). * بالنسبة ل lucene.net/nibernate.search ستحتاج إلى إعداد مكان محدد ستقيم الفهارس وهذا المكان يجب أن يكون متاحا للقراءة / الكتابة من خلال جميع مثيلات تطبيق الويب. ملاحظة هنا أن الرابط الحساس هو خلفي / o وتنافس الملف، لذا فإن إعداد جهاز مع نظام أسرع من نظام الملفات الخفيفة سيمنع ذلك من الحدوث (أتحدث عن السيناريو الخاص بك مع العديد من طلبات البحث في الثانية)

كملاحظة جانبية، أود أن أوصي بشدة NHIBERNATE.Search نظرا لأنها أسرع بكثير من الاستعلامات وأكثر سهولة الاستخدام من تطبيق بحث FOXTXT الخاص ب SQL-Server داخل التطبيق (الذي قمت به).

نصائح أخرى

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

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

تحقق أيضا من تكوين DB الخاص بك بشكل صحيح لسيناريو ثقيل التحديث.

أوصي باستخدام nhibernate.search. ث / لوسين. إنه يعمل جنبا إلى جنب مع ذاكرة التخزين المؤقت المستوى الثاني. يمكن لوسين أن تفعل نص متطور يبحث عن التمزيق بسرعة ثم عودة مفاتيح الكيان إلى NHIBERNATE التي تسحب الكيان الكامل من ذاكرة التخزين المؤقت 2 إلى 2. تمديد NHIBERNATE.SEARCH يقوم بعمل الحفاظ على مؤشر Lucene الخاص بك في المزامنة.

tekpub. هل حلقة حديثة في سيناريوك الدقيقة للبحث عن أوصاف المنتج. يقارن الحلقة استفسارات LOHIPERNATE و SQL فهرسة النص الكامل و Lucene W / Nibernate.search.

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