تبحث عن إرشادات حول قاعدة بيانات .NET المدمجة (مثل DB4O أو Nhibernate أو RavendB)
-
01-10-2019 - |
سؤال
لدي نموذج كائن أريد تخزينه باستخدام قاعدة بيانات مضمنة. لقد كنت حتى الآن أنظر إلى DB4O و Nhibernate إلى SQLCE (W/ LINQ) و RAVENDB. سيتم استخدام هذا في تطبيق سطح المكتب C#.
الميزات الرئيسية التي أتطلع إلى الاستفادة منها هي: LINQ أو ما شابه للاستعلامات (لا يوجد SQL أو HQL) ، محرك بيانات مضمن ، POCOS ، نموذج POCO الأول ، بدون تثبيت (لا يوجد سجل أو ما شابه)
هل يمكن لأي شخص أن يقترح واحدة؟ هل الثلاثة التي أنظر إلى أفضل الخيارات؟ هل هناك خيارات أخرى؟ من الثلاثة ، هل يمكن لأي شخص أن يوصي بواحد على الآخر؟
شكرًا
المحلول
حسنًا ، تختلف قواعد البيانات الثلاثة المقترحة تمامًا في طبيعتها. SQLCE مع Hibernate كـ RDBMS مع ORM و DB4O كقاعدة بيانات كائن و RAVENDB كقاعدة بيانات مستند. كل واحد منهم لديه نقاط قوته.
SQL CE و NHIBERNATE-COMBOالخير:
- دعم جيد للغاية في الأدوات والمعرفة والمجتمع الكبير هناك
- من السهل أن ترتفع إلى خوادم MS SQL
- دعم تقارير جيد متطرف
- قوة SQL
السيء:
- يحتاج رسم الخرائط
- التعيين بين OO والعالم العلائقي ليس بالأمر السهل ويمكن أن يؤدي إلى مشاكل مع النماذج المعقدة.
Ravendb
الخير:
- لا يحتاج إلى أي تعيين
- سهل الاستخدام
- فهرسة قوية
- وصول JSON & HTTP
السيء:
- إذا لم يكن مجالك مناسبًا لنهج موجه نحو المستند ، فسيكون ذلك مؤلمًا تمامًا
- لا يدعم ملف تعريف عميل .NET Framework (وهو ذو أهمية خاصة لأن سؤال البروتوكول الاختياري يتعلق بقواعد البيانات المضمنة)
DB4O
الخير:
- لا يحتاج إلى أي تعيين
- سهل الاستخدام
- نموذج التخزين يغلق نموذج الكائن. هذا يعمل أيضا لنماذج معقدة للغاية. -
السيء:
- دعم الأدوات ضعيف.
AFAIK كل الثلاثة تدعم نهج LINQ و POCO-First. ومع ذلك ، نظرًا لأن Nhibernate & sql ce لا يزال بحاجة إلى أطنان من رسم الخرائط ، فهي ليست خالية من الاحتكاك.
أعتقد أنه إذا كان تركيزك على POCO أولاً ، أو دعم LINQ ، والاستخدام المقلوب وسهل الاستخدام ، سأحاول RavedB أو DB4O. إذا كان تركيزك على "السلامة" ، ومعرفة المجتمع ، ودعم الأدوات والإبلاغ ، فسوف أذهب مع Nhibernate و SQL CE.
نصائح أخرى
نرى هذا السؤال. للحصول على دعم LINQ ، تحقق من dblinq, ، أو بما أنك تنوي بالفعل استخدام Nhibernate ، يمكنك استخدام مزود LINQ الخاص بـ Nhibernate.