كيفية الحفاظ على السبات ذاكرة التخزين المؤقت الاتساق تشغيل اثنين من تطبيقات جافا?

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

  •  09-06-2019
  •  | 
  •  

سؤال

لدينا تصميم واحد jvm هذا هو جبوس/webapp (قراءة/كتابة) التي يتم استخدامها للحفاظ على البيانات عن طريق السبات (باستخدام jpa) إلى db.النموذج 10-15 الطبقات المستمرة مع 3-5 مستويات من العمق في العلاقات.

ثم لدينا منفصلة jvm هذا هو الخادم باستخدام هذه البيانات.كما أنها تعمل بشكل مستمر لدينا واحد فقط طويل db الدورة (قراءة فقط).

لا يوجد حاليا داخل jvm ذاكرة التخزين المؤقت المشاركة - لذلك نحن يدويا إشارة واحدة jvm من جهة أخرى.

الآن عندما webapp التغييرات بعض البيانات إشارات الملقم إلى إعادة تحميل البيانات التي تم تغييرها.ما وجدناه هو أن علينا أن نخبر السبات إلى تطهير البيانات ثم إعادة تحميله.فقط أقوم جلب/دمج مع db لا قيام بهذه المهمة - أساسا في احترام الكائنات عدة طبقات أسفل التسلسل الهرمي.

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

شكرا كريس

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

المحلول

وهو السبات الدورة بتحميل جميع البيانات يقرأ من DB إلى ما يسمونه المستوى الأول ذاكرة التخزين المؤقت.مرة واحدة في صف واحد يتم تحميلها من DB, أي اللاحقة جلب صف مع نفس PK سيعود البيانات من ذاكرة التخزين المؤقت هذه.وعلاوة على ذلك, السبات gaurentees إشارة المساواة بين الكائنات مع نفس PK في جلسة واحدة.

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

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

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

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

نصائح أخرى

كريس, أنا مرتبك قليلا عن الظروف الخاصة بك.إذا فهمت بشكل صحيح, لديك كل من التطبيق على شبكة الإنترنت (قراءة/كتابة) تطبيق قائم بذاته (للقراءة فقط؟) استخدام السبات إلى الوصول إلى قاعدة بيانات مشتركة.التغييرات التي تجريها مع التطبيق على شبكة الإنترنت ليست واضحة بذاتها التطبيق.هل هذا صحيح ؟

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

بشكل عام ، على الرغم من أنك يجب أن تعرف أن محتويات معين ذاكرة التخزين المؤقت لن يكون على بينة من النشاط من قبل تطبيق آخر (هذا هو السبب في أنني أقترح وجود كل من تطبيقات مشاركة ذاكرة التخزين المؤقت).حظا سعيدا!

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

ثم هل سيكون قادرا على تكوين ذاكرة التخزين المؤقت التزامن بين webapp و الخادم.ننظر أيضا في مستوى العزل إذا كنت سوف تستخدم جبوس ذاكرة التخزين المؤقت.أعتقد أنك يجب أن تستخدم READ_COMMITTED الوضع إذا كنت ترغب في الحصول على بيانات جديدة على الملقم من نفس الدورة.

الأكثر استخداما الممارسة هو أن يكون الحاويات التي يديرها كيان مدير حتى أن اثنين أو أكثر من التطبيقات في نفس الحاوية (أي Glassfish, هر, Websphere) يمكن أن تشترك في نفس مخابئ.ولكن إذا كنت لا تستخدم تطبيق حاوية بسبب استخدام اللعب!على سبيل المثال, ثم أود أن بناء بعض webservices في التطبيق الأساسي قراءة/يكتب على الدوام في ذاكرة التخزين المؤقت.

أعتقد أن استخدام البيانات التي لا معنى لها هو باب مفتوح الكوارث.مثل وحدانية تصبح Multitons للقراءة فقط التطبيقات غالبا ما تكون الكتابة في بعض الأحيان.

حزام الأقواس :)

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