سؤال

لقد قرأت العديد من الأسئلة / المواضيع الحالية حول هذا الموضوع، ولكن ضع في اعتبارك ذلك لا أحد منهم عالجوا مشكلتي مباشرة. ضع في اعتبارك أن هذا هو ليس حالة لقاعدة البيانات. أليس كما لن أعرف معلومات DB مقدما.

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

ما أحتاج إليه هو إنشاء تطبيق يحتفظ بجدول "mysql_logins" ويستخدم كل من عمليات تسجيل الدخول هذه للاتصال بأي واحدة من قواعد البيانات المختلفة وتوفير الرسوم البيانية / الرسوم البيانية للبيانات فيها.

سيبقى نموذج "البيانات" الخاص بي هو نفسه بالنسبة لجميع قواعد بيانات MySQL التي أتصل بها، أريد ببساطة أن أكون قادرا على إخبار نموذجي بالاتصال ب DB مختلفة أثناء الطيران. آمل أن يكون هذا بسيطا بشكل مثير للدهشة، لكننا سنرى.

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

المحلول

انت تريد activerecord :: قاعدة # تأسيس_Connection. وبعد ربما ترغب في استخدامه في فئة فرعية مجردة بحيث لا تزعج النماذج باستخدام الاتصالات اليدوية استخدامات الاتصال بواسطة بقية طلبك:

class LogBase < ActiveRecord::Base
  self.abstract_class = true
end

class LogItem < LogBase
  ...
end

LogItem.establish_connection { ... }

LogItem.find_by_ ...

إذا كان لديك نموذج واحد فقط يجعل الاتصالات اليدوية فئة مجردة غير ضرورية.

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

# database.yml
atlanta:
  host: atlantadb.foo.com

# foo.rb
LogItem.establish_connection :atlanta

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

نصائح أخرى

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

هنا هو وثائق السجل النشطة لهذا، وهنا هو وثائق محددة سيكون عليك تجاوز.

هذه هو شيء يفسر العملية حقا جيدا.

هناك أيضا بعض نصف الإنتاج جاهز مشاريع مهاجمة هذه القضية.

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