ما هي مزايا استخدام قاعدة بيانات واحدة لكل عميل ؟

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

سؤال

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

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

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

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

أي مدخلات هو موضع تقدير كبير!

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

المحلول

نفترض أنه لا يوجد زيادة عقوبة لتخزين جميع العملاء في قاعدة بيانات ؛ بالنسبة لمعظم الناس, وكذلك تكوين قواعد بيانات/استعلامات, وسوف يكون هذا صحيح إلى حد ما هذه الأيام.إذا كنت لا احد من هؤلاء الناس ، ، ثم الاستفادة من قاعدة بيانات واحدة واضحة.

في هذه الحالة, فوائد تأتي من التغليف من كل عميل.من مدونة منظور كل عميل موجود في العزلة - لا يوجد ممكن الوضع الذي تحديث قاعدة البيانات قد الكتابة الفاسدة, استرجاع أو تغيير البيانات التي تنتمي إلى عميل آخر.هذا أيضا يبسط نموذج, كما أنك لا تحتاج إلى أي وقت مضى النظر في حقيقة أن السجلات قد تنتمي إلى عميل آخر.

يمكنك أيضا الحصول على فوائد استقلاليه - انها تافهة لسحب البيانات المرتبطة مع إعطاء العميل و نقلها إلى ملقم آخر.أو استعادة نسخة احتياطية من أن العميل عند استدعاء إلى القول "لقد حذف بعض البيانات الرئيسية!", باستخدام بيانات مدمج الآليات.

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

يمكنك الحصول على السهل الإصدارات - إذا كان أحد يريد العميل من البقاء على إصدار البرنامج 1.0 آخر يريد 2.0, حيث 1.0 و 2.0 استخدام قاعدة بيانات مختلفة مخططات لا توجد مشكلة - يمكنك ترحيل واحد دون الحاجة إلى سحبها من قاعدة بيانات واحدة.

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

نصائح أخرى

هنا واحد النهج التي رأيتها من قبل:

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

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

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

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

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

حسنا, ما إذا كان أحد العملاء يقول لك استعادة إصدار سابق من البيانات الخاصة بهم بسبب بعض فاشلة استيراد وظيفة أو متشابهة ؟ تخيل كيف عملائك سيكون شعورك إذا قلت لهم "لا يمكنك أن تفعل ذلك لأن البيانات الخاصة بك هو مشترك بين جميع عملائنا" أو "آسف, ولكن التغييرات كانت تضيع بسبب العميل X طالب استعادة قاعدة البيانات".

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

هنا هو المادة بالضبط في هذا الموضوع (نعم ، هو MSDN, وإنما هو التكنولوجيا المستقلة المادة): http://msdn.microsoft.com/en-us/library/aa479086.aspx.

مناقشة أخرى متعددة الإيجار من حيث صلته البيانات الخاصة بك نموذج هنا: http://www.ayende.com/Blog/archive/2008/08/07/Multi-Tenancy--The-Physical-Data-Model.aspx

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

أنا فقط إضافة هذا الجواب أن تدرج كلمة متعددة المستأجر هنا.كنت أبحث عن هذا باستخدام "multitenant" كما الاستعلام و هذا لم يظهر.

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

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

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

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

في الصناعات المنظمة مثل الرعاية الصحية قد يكون شرطا من قاعدة بيانات واحدة لكل زبون ، ربما حتى منفصلة خادم قاعدة البيانات.

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

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

أود أن تكون مهتمة في السمع أكثر من ذلك بقليل السياق من هذه المجموعات ليس موضوعا بسيطا و غير مكلفة تنفيذ في RDBMS العالم.هناك الكثير من الحديث/تبجح حول التجميع في غير العلائقية العالم جوجل Bigtable.... الخولكن يتم حل مجموعة مختلفة من المشاكل ، و تفقد بعض الميزات المفيدة من RDBMS.

وهناك زوجين من معاني "قاعدة البيانات"

  • مربع الأجهزة ،
  • تشغيل البرنامج (مثل"أوراكل")
  • مجموعة معينة من ملفات البيانات
  • خاصة تسجيل الدخول أو مخطط

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

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

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