python نموذج - باستخدام مونغودب كقاعدة بيانات رئيسية لدينا، يجب استخدام قاعدة بيانات الرسم البياني منفصلة لتنفيذ العلاقات بين الكيانات؟




مخطط متعدد (5)

نحن حاليا بصدد تنفيذ حل تشبه كرم داخليا لشركة محترفة. نظرا لطبيعة المعلومات المخزنة، وقيم ومفاتيح مختلفة للمعلومات قررنا استخدام قاعدة بيانات تخزين الوثائق، لأنها تناسب أغراض تماما (في هذه الحالة اخترنا مونغودب).

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

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

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

  • الحصول على جميع الناس 'الاتصال الرئيسية' من الشركات الذين هم 'عملاء' شيز محدودة '
  • الحصول على جميع "المساهمين" الآخرين من الشركات حيث 'جون' هو مساهم
  • الحصول على جميع الناس "مفتاح الاتصال" من الكيانات الذين هم "عملاء" من "أبك محدودة" وعملاء من "الثقة بنا البنك محدودة"

وبالنظر إلى هذا "شجرة" هيكل العلاقات، يستخدم قاعدة بيانات الرسم البياني (مثل Neo4j) أكثر ملاءمة؟


Answers

البقاء مع مونغودب. اثنين من الأسباب - 1. من الأفضل البقاء في نفس المجال إذا كنت تستطيع للحد من التعقيد و 2. مونغودب ممتازة للاستعلام ويتطلب عمل أقل من ريديس، على سبيل المثال.


مايك،

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

ما هي الاحتياجات الأخرى الخاصة بك (أي حجم مجموعة البيانات، # من المتزامن الوصول الخ، العلاقة / التعقيد الرسم البياني).

طلبات البحث الخاصة بك هي مناسبة حقا لقاعدة بيانات الرسم البياني وسهولة التعبير عنها في شروطها.

أود أن أقترح عليك مجرد الاستيلاء على غرافدب مثل neo4j والقيام ارتفاع سريع مع المجال الخاص بك للتحقق من الجدوى العامة وأيضا معرفة أسئلة إضافية كنت ترغب في الإجابة قبل الاستثمار في التكنولوجيا الثانية.

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


انتهى بنا الأمر باستخدام كلاهما، ونحن نقوم بتنفيذ محرك بحث لشبكة النقل.

محاولة تنفيذ العلاقات في مونغودب يمكن أن تصبح غير عملي بمجرد تجاوز 1 أو 2 "وصلات". أساسا سوف يتم تخزين أوبجكتيدس في صفيف وإذا كنت ترغب في تنفيذ العلاقات ثنائية الاتجاه، ثم لديك لتنفيذ اثنين من وصلات منفصلة. في مونغو، "مؤشر" إلى كيان (أو "وصلة") هو مجرد خاصية نص آخر (التي يمكن تفسيرها بشكل مختلف)، فإنه ليس كائن من الدرجة الأولى مثل علاقة في Neo4j.

لذلك قررنا استخدام Neo4j لتخزين العلاقات و مونغودب لتخزين كل شيء آخر. ثم أصبح التحدي الحفاظ على متزامنة اثنين من المتاجر.

نحن نستخدم مشروع مختبر 10gen يسمى "مونغوكونكتور" وهو آلية للحفاظ على مونغودب متزامنة مع متجر آخر. المشروع غير معتمد حاليا، ولكن الشفرة متاحة:

http://blog.mongodb.org/post/29127828146/introducing-mongo-connector

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

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

لقد كنت تخطط للحصول على الحديث وبلوق وظيفة، ولكن أنا لم تحصل عليه حتى الآن:

http://www.meetup.com/graphdb-boston/events/91703472/

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


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

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

بصراحة على الرغم من أن أفضل طريقة لمعرفة ما يصلح لك هو أن تفعل بوك - منخفضة التكلفة، وقيمة عالية.

تنويه: أعمل ل نيو التكنولوجيا.


{{ form.non_field_errors }} عن الأخطاء المتعلقة {{ form.non_field_errors }} وليس الحقل

{{ form.password.errors }} عن الأخطاء المتعلقة بحقل النص مثل كلمة المرور في هذه الحالة





python django mongodb redis neo4j