كيفية استخدام DB4O iobjectContainer في تطبيق الويب؟ (الحاوية مدى الحياة؟)

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

  •  21-09-2019
  •  | 
  •  

سؤال

أقوم بتقييم DB4O للحصول على ثبات لمشروع ASP .NET MVC.

أتساءل كيف يجب أن أستخدم iObjectContainer في سياق ويب فيما يتعلق بعمر الكائن. كما أراها ، يمكنني أن أفعل واحدة مما يلي:

  1. قم بإنشاء iObjectContainer عند بدء تشغيل التطبيق واحتفظ بنفس المثيل لمدى عمر التطبيق بالكامل.
  2. إنشاء واحد iobjectcontainer لكل طلب.
  3. ابدأ خادمًا ، واحصل على عميل iobjectContainer لكل تفاعل قاعدة بيانات.

ما هي الآثار المترتبة على هذه الخيارات ، من حيث الأداء والتزامن؟

نظرًا لأن قاعدة البيانات مغلقة عند فتح iObjectContainer ، فأنا متأكد تمامًا من أن الخيار 2) سيحصل على بعض المشكلات المتعلقة بالتزامن - هل سيكون هذا هو الحال بالنسبة للخيار 1؟

كما أفهمها ، إذا قمت باسترداد كائن من iObjectContainer ، فيجب حفظه بواسطة نفس مثيل iObjectContainer - من أجل أن يتم تحديده على أنه نفس الكائن. لذلك ، إذا اخترت الخيار 3) ، فسيتعين علي استرداد الكائن الأصلي ، وإجراء التغييرات اللازمة (نسخ البيانات من كائن معدّل) ، ثم تخزينه باستخدام نفس iObjectContainer. هل هذا صحيح ؟

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

المحلول

الخيار 1) يمكن أن تجعلك في مشكلة خطيرة لأنك ستشارك معاملة فعالة بين جميع الطلبات. لا أعتقد أن هذا خيار ممكن.

كما تم تحديده بالفعل ، الخيار 3) محفوف بالمخاطر الخاصة به لأنه سيتعين عليك تتبع هوية الكائن يدويًا - مهمة مملة وعرضة للخطأ للغاية. هذا حقا يدمر كل جمال قاعدة بيانات الكائن. أيضا ، من ما أعرفه النفقات العامة من الخلق IObjectContainer ليس صغيرًا ، لذا سيكون هذا مكلفًا للغاية.

هذا يتركنا إلى حد كبير مع الخيار 2 ، والذي لا يغلق قاعدة البيانات عند فتحه في وضع خادم العميل بقدر ما أعرف - أين وجدت هذا المعلومات؟ لذا فإن أفضل فكرة هي فتح IObjectServer عند بدء تشغيل التطبيق وفتح جديد IObjectContainer لكل مرجع ، أو قم بالتواصل مع خادم بعيد باستخدام TCP Per-Request.

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