سؤال

أحاول استخدام قاعدة بيانات كائن db4o وحتى الآن يعجبني تمامًا ما أراه، لكنني قرأت أيضًا هذا المنشور حول تدفق المكدس تجارب db4o؟ مشيراً إلى أنه ليس كل ما يبدو سهلاً يكون سهلاً.

لدي الآن بعض الأسئلة بخصوص كيفية استخدام db4o في تطبيقات العالم الحقيقي.لذلك، إذا كان لديك أي خبرة في العمل (خاصة في سياق تطبيق الويب) مع db4o، فأنا أحب أن أسمعها.

وهنا أسئلتي:

  1. كيف يمكنك إدارة هوية الكائن عند العمل مع كائنات db4o المخزنة؟**
    قادمة من خلفية RDBMS حيث يكون لديك دائمًا مفتاح أساسي/عمود هوية لكل جدول، لا أستطيع أن أتخيل الآن كيفية إدارة هوية الكائن في db4o.

    على سبيل المثال، إذا كنت أعمل مع NHibernate / mysql وأحتاج إلى العثور على كائن مستخدم بواسطة المعرف، فسأقوم بإجراء session.Load(primaryKey) وسيتم استرداده بواسطة PK الخاص به.ومن الشائع أيضًا أن يتم تعريف PK على أنه زيادة تلقائية في تعريف الجدول.

  2. نظرًا لعدم وجود مثل هذا الخيار في db4o، كان تفكيري هو استخدام البنية الإرشادية للتعرف على بعض الكائنات في قاعدة بيانات الكائنات.

  3. أي أدوات لعرض الكائنات المخزنة في قاعدة البيانات؟

    هل يوجد شيء مثل SQL Server Management Studio (ربما أقل تطوراً) في عالم db4o؟أرغب في عرض البيانات/الكائنات المخزنة بالفعل في ملف db.

  4. هل أنت ثمل عند إعادة تسمية كائنات المجال الخاص بك؟

    بقدر ما أعرف، عند إعادة تسمية فصل دراسي، لا يمكن استرداد أي مثيلات مخزنة مسبقًا في قاعدة البيانات بعد الآن.هل هناك طريقة للتغلب على هذه المشكلة؟كيف تتعامل مع التحديثات مقابل قاعدة بيانات حية تحتوي بالفعل على العديد من الكائنات؟

  5. هل يمكنني استبعاد الخصائص من الحفظ في قاعدة البيانات؟

    على سبيل المثال، إذا كان كائن مجال واحد يحمل مرجعًا إلى كائن خدمة (عديم الحالة)، فسيستمر كائن الخدمة أيضًا إذا استمر كائن المجال، أليس كذلك؟

يبدو غريبًا بعض الشيء أن يتم حفظ نسخة الخدمة في قاعدة البيانات، على الأقل بالنسبة لي.

هل يمكنك استبعاد مثيل الخدمة من الحفظ؟إذا تم استرداد كائن المجال مرة أخرى، فكيف يمكنني التأكد من إدخال الخدمة أيضًا في المثيل مرة أخرى؟

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

المحلول

1) كيف يمكنك إدارة هوية الكائن عند العمل مع الكائنات المخزنة في db4o؟في db4o ليس لديك عادةً معرف.يستخدم db4o هوية الكائن لتمييز الكائن عن بعضها البعض.لذا فإن نفس الكائن الموجود في الذاكرة سيكون هو نفس الكائن في قاعدة البيانات.

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

أعتقد أن هذه الخيارات الثلاثة ممكنة:- استخدم ال معرف داخلي db4o.لكن هذا المعرف ليس إلى الأبد.يؤدي إلغاء تجزئة قاعدة البيانات إلى تغيير هذا المعرف.- استخدام UUIDs الخاصة بـ db4o.لكن db4o uuids كبيرة جدًا - إنشاء معرفات بنفسك

2) هناك أداة إدارة الكائنات للنظر في قاعدة البيانات.إلا أنها محدودة للغاية في وضعها الحالي.في رأيي، يعد هذا عيبًا كبيرًا لـ db4o.

3) يمكنك إنشاء الأسماء المستعارة وإعادة تسمية الفئات والحقول وما إلى ذلك.لكن تغيير التسلسل الهرمي للميراث لا يعمل.فأنت بحاجة إلى نسخ البيانات القديمة إلى مثيلات جديدة.

4) نعم.يمكنك وضع علامة على الحقول كـ عابر باستخدام سمة .NET-NonSerialized أو السمات المخصصة.

نصائح أخرى

في قواعد البيانات الموجهة للكائنات (مثل db4o) لا ينبغي حقًا استخدام هوية الكائن.بدلاً من ذلك، تم استخدام الاستعلامات والتنقل.قم أولاً بإجراء استعلام للحصول على كائن واحد/بعض الكائنات، ثم استخدم التنقل للوصول إلى الكائنات الأخرى.

يعني "التنقل" أنك تقوم فقط بمتابعة الحقول/المراجع الموجودة في أي كائن تم تحميله.

يمكن اعتبار استخدام معرفات الكائنات أسلوبًا سيئًا، ومعظم التطبيقات (التي أعرفها) لا تستخدمها على الإطلاق.

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

http://sourceforge.net/projects/db4oviewer/develop

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