ما هو الفرق بين قواعد البيانات القائمة على الرسوم البيانية وقواعد البيانات الموجهة للكائنات؟

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

سؤال

ما هو الفرق بين قواعد البيانات المستندة إلى الرسم البياني (http://neo4j.org/) وقواعد البيانات الموجهة للكائنات (http://www.db4o.com/)?

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

المحلول

سأجيب على هذا بشكل مختلف: تعمل قواعد بيانات الكائنات والرسوم البيانية على مستويين مختلفين من التجريد.

عناصر البيانات الرئيسية لقاعدة بيانات كائن هي كائنات، والطريقة التي نعرفها من لغة برمجة موجهة للكائنات.

عناصر البيانات الرئيسية لقاعدة بيانات الرسم البياني هي العقد والحواف.

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

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

أدوات مختلفة لوظائف مختلفة وأعتقد.

نصائح أخرى

نعم، يبدو أن API مثل الفرق الرئيسي، ولكن ليس حقا سطحي واحد. ستشكل مجموعة من الكائنات المفاهيمية رسم بياني ويمكنك التفكير في API الذي يعامل هذا الرسم البياني بطريقة موحدة. على العكس من ذلك، يمكنك في النظرية من الألغام هيكل رسم بياني عام للأنماط وتعيينها على الكائنات المكشوفة عبر بعض API. ولكن تصميم API من المنتج الفعلي سيكون له عموما نتيجة حول كيفية تخزين البيانات بالفعل، وكيف يمكن الاستعلام عن ذلك، لذلك سيكون بعيدا عن تافهة ل، أن تخلق غلافا وجعلها تبدو وكأنها شيء آخر. أيضا، يجب أن توفر قاعدة بيانات موجهة نحو الكائنات بعض الضمانات النزاهة وهيكل الكتابة التي لن تفعلها قاعدة بيانات الرسم البياني عادة. في الواقع، قاعدة بيانات OO الخطيرة بعيدة عن "شكل مجاني" :)

إلقاء نظرة على [Hypergraphdb] [1] - إنها قاعدة بيانات كاملة الموجهة نحو الكائنات (مثل DB4O) وقاعدة بيانات رسم بيانية متقدمة للغاية من حيث قدرات التمثيل والتنسيق. قادر على تخزين Hypergraphs المعمم (حيث يمكن أن تشير الحواف إلى أكثر من عقدة وأيضا إلى حواف أخرى أيضا)، ولها نظام من النوع القابل للتوسيع بالكامل جزءا لا يتجزأ من الرسم البياني وما إلى ذلك.

على عكس قواعد بيانات الرسوم البيانية الأخرى، في Hypergraphdb، يصبح كل كائن عقدة أو حافة في الرسم البياني، مع اقتحام API غير الحد الأدنى ولديك اختيار تمثيل الكائنات الخاصة بك كشركة رسم بياني أو علاجها بطريقة متعامدة هيكل الرسم البياني (ك "حمولة" قيم العقد أو الحواف). يمكنك القيام برامج تراسب متطورة، فهرسة مخصصة واستعلام.

شرح لماذا Hypergraphdb في الواقع ODMS، راجع منشور المدونة هو Hypergraphdb قاعدة بيانات OO؟ في موقع كوبريكس.

كما سيحمل من زاوية أخرى، سيبقي Graphdb بياناتك مفصولة عن فئات التطبيق والأشياء الخاصة بك. يحتوي Graphdb أيضا على وظيفة أكثر مدمجة للتعامل مع الرسوم البيانية، من الواضح - مثل أقصر مسار أو اجتيازات عميقة.

هناك فرق مهم آخر هو أنه في Graphdb مثل NEO4J، يمكنك اجتياز الرسم البياني يعتمد على أنواع واتجاهات العلاقة (الحافة) دون تحميل العقد الكاملة (بما في ذلك خصائص العقدة / السمات). هناك أيضا اختيار استخدام NEO4J كخلفية للكائن DB، لا يزال قادرا على استخدام جميع الاشياء الرسومية، انظر: jo4neo. يحتوي هذا المشروع على نهج مختلف يمكنه أيضا الاعتماد ككائن DB على رأس NEO4J: neo4j.rb. وبعد خيار جديد هو استخدام رسم بيانات الربيع, التي تعطي دعم GRAPDB من خلال التعليقات التوضيحية.

تم طرح نفس السؤال في التعليقات على هذا blogpost..

من تصفح سريع لكل من مواقع الويب الخاصة بهم:

الفرق الرئيسي هو الطريقة التي يتم بها منظم واجهات برمجة التطبيقات، بدلا من نوع قاعدة بيانات النماذج الحر التي يمكنك بناءها معها.

يستخدم DB4O رسم خرائط كائن - يمكنك إنشاء فئة Java / C #، ويستخدم انعكاسا للاستمرار في قاعدة البيانات.

NEO4J لديه API التلاعب واضحة.

بدا NEO4J، في رأيي المتواضع، أجمل بكثير للتفاعل معه.

قد تفكر أيضا في متجر قيمة رئيسية - يمكنك جعل نفس قاعدة بيانات النماذج الحر بالضبط مع أحد تلك.

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

لكن الفرق الأكبر موجود في المجال: في قواعد بيانات الرسم البياني يعتمد كافة على الأنواع 2: Vertexes والحواف، حتى لو كان يمكنك عادة تحديد أنواعك الخاصة كنوع من أنواع الفتات أو الحافة.

في ODBMS ليس لديك مفاهيم Vertex و Edge، ما لم تكتب بنفسك.

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

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