سؤال

ما هي أفضل طريقة للتعامل مع قاعدة البيانات المجزأة في ريلز؟هل يجب التعامل مع التقسيم في طبقة التطبيق، أو طبقة السجل النشط، أو طبقة برنامج تشغيل قاعدة البيانات، أو طبقة الوكيل، أو أي شيء آخر تمامًا؟ما هي إيجابيات وسلبيات كل منها؟

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

المحلول

FiveRuns لديها جوهرة اسمها DataFabric يقوم بالتقسيم على مستوى التطبيق والنسخ المتماثل الرئيسي/التابع.قد يكون من المفيد التحقق من ذلك.

نصائح أخرى

أفترض أننا نتحدث مع القطع عن التقسيم الأفقي وليس التقسيم الرأسي (وهنا الاختلافات على ويكيبيديا).

أولا، تمتد التقسيم العمودي بقدر ما يمكنك أن تأخذه قبل أن تفكر في التقسيم الأفقي.من السهل في Rails أن يكون لديك نماذج مختلفة تشير إلى أجهزة مختلفة، وبالنسبة لمعظم مواقع Rails، سيوفر لك ذلك ما يكفي.

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

طبقة السجل النشط...ليس سهلا من ما أستطيع أن أرى.سيتطلب الكثير من عمليات الترقيع القردية في الأجزاء الداخلية من Rails.

في سبوك انتهى بنا الأمر بالتعامل مع هذا باستخدام ملف وكيل MySQL المخصص وفتحه على SourceForge كـ وكيل سبوك.يعتقد ActiveRecord أنه يتحدث إلى جهاز قاعدة بيانات MySQL واحد في حين أنه في الواقع يتحدث إلى الوكيل، الذي يتحدث بعد ذلك إلى واحدة أو أكثر من قواعد بيانات MySQL، ويدمج/يفرز النتائج، ويعيدها إلى ActiveRecord.يتطلب فقط بعض التغييرات على كود Rails الخاص بك.قم بإلقاء نظرة على صفحة Spock Proxy SourceForge لمزيد من التفاصيل ولأسباب سلوكنا في هذا الطريق.

لأولئك منكم مثلي الذين لم يسمعوا عن المشاركة:

http://highscalability.com/unorthodox-approach-database-design-coming-shard

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

لا تعجبني فكرة هانك المتمثلة في تقسيم مثيلات Rails، لأنه يبدو من الصعب استدعاء الكود بين المثيلات إلا إذا كان لديك مكتبة مشتركة كبيرة.

كما يجب عليك أن تنظر في القيام بشيء مثل الماسوشية قبل البدء في المشاركة.

لكي تعمل القضبان مع البيئة المنسوخة، أقترح استخدام المكون الإضافي my_replication الذي يساعد في تبديل اتصال قاعدة البيانات بأحد العناصر التابعة في وقت التشغيل

https://github.com/minhnghivn/my_replication

في رأيي، إن أبسط طريقة هي الحفاظ على نسبة 1:1 بين مثيلات Rails وأجزاء قاعدة البيانات.

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