النمط الرقيق لتحديث قواعد بيانات SQL Server 2008 من الماجستير في حين التقليل من انقطاع

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

سؤال

لدينا تطبيق ويب ASP.NET استضافتها مزرعة على شبكة الإنترنت العديد من الحالات باستخدام SQL Server 2008 التي نحن لتجميع وقبل معالجة البيانات من مصادر متعددة في شكل الأمثل لأداء نهاية سريعة الاستعلام المستخدم (إنتاج 5 -10000000 الصفوف في بعض الجداول). ويتم تجميع والأمثل من خلال خدمة في الخادم النهاية الخلفية التي كنا نريد بعد ذلك لتوزيعها على عدة قراءة الجبهة فقط إنهاء نسخ المستخدمة من قبل حالات تطبيق ويب لتسهيل القصوى تطويره.

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

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

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

والقيام انخفاض وإدراج مجمعة سيؤدي في فترات مع عدم وجود بيانات للاستعلامات المستخدم.

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

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

المحلول

وهو في الواقع هناك تكنولوجيا بنيت إلى SQL Server 2005 (و 2008) التي تم تصميمها لمعالجة هذا النوع من القضايا. خدمة وسيط (وأنا أبعد الرجوع كما SSB). والمشكلة هي أن لديها منحنى التعلم حاد جدا.

وأنا أعلم ماي سبيس للاكتتاب العام لكيفية استخدام SSB لإدارة الحديقة على خوادم SQL: <لأ href = "http://rusanu.com/2009/07/26/myspace-uses-sql-server-service-broker- إلى حماية النزاهة، ل-1-بيتابايت من البيانات / "يختلط =" نوفولو noreferrer "> ماي سبيس يستخدم SQL Server خدمة الوسيط لحماية النزاهة من 1 بيتابايت من البيانات . أعرف العديد من المواقع (الكبرى) التي تستخدم أنماط مماثلة ولكن لسوء الحظ أنها لم تسر العام لذلك لا أستطيع الرجوع الأسماء. وقد شاركت شخصيا مع بعض المشاريع حول هذه التقنية (أنا وهو عضو سابق في فريق SQL Server).

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

لماذا لا تزال بعض الشركات preffer SSB على النسخ المتماثل في مهمة مثل تصفون لأن SSB لديه قصة أفضل بكثير عندما يتعلق الأمر الموثوقية وقابلية. وأنا أعلم من المشاريع التي تبادل البيانات بين 1500+ المواقع، ما هو أبعد من قدرات النسخ المتماثل. وتستخرج SSB أيضا من الهيكل المادي: يمكنك نقل قواعد البيانات، وإعادة تسمية آلات، وإعادة بناء كافة ملقمات دون تغيير التطبيق. بسبب تدفق البيانات يحدث على طرق منطقية تطبيق يمكن addapt على ذبابة على طبولوجيا جديدة. SSB هو أيضا مرونة لفترات طويلة من disocnnect والتوقف، كونها قادرة على استئناف تدفق البيانات بعد ساعات أو أيام وحتى أشهر من الانفصال. troughput عالية من التكامل محرك حققت (SSB هو جزء من محرك SQL نفسها، ليست عبارة عن مجموعة من التطبيقات والعمليات مثل النسخ المتماثل الأقمار الصناعية لل) يعني أن ما تراكم من التغييرات يمكن أن يكون العمليات على أوقات معقولة (وأنا أعلم من المواقع التي تمر نصف و<م> مليون المعاملات في الدقيقة). تعتمد تطبيقات SSB عادة على الداخلية تفعيل لمعالجة البيانات incomming. لديها SSB أيضا بعض الميزات الفريدة مثل المدمج في <لأ href = "http://blogs.msdn.com/sql_service_broker/archive/2008/07/14/using-multiple-routes-in-service-broker.aspx" يختلط = "نوفولو noreferrer"> موازنة (عبر الطرق) مع دلالات جلسة لزجة، ودعم <لأ href = "http://msdn.microsoft.com/en-us/library/ms171615(SQL.90) .aspx اتصال "يختلط =" نوفولو noreferrer "> طريق مسدود التطبيق المجاني محددة المترابطة معالجة و <لأ href =" http://msdn.microsoft.com/en-us/library/bb934439.aspx "يختلط =" نوفولو noreferrer "> تسليم البيانات الأولوية و دعم محددة لقاعدة بيانات النسخ المتطابق، <وأ href =" http://rusanu.com/2008/10/23/how-does-certificate-based-authentication-work/ "يختلط = "نوفولو noreferrer"> شهادة المصادقة المستندة إلى للحصول على عمليات المجال عبر، الذي بني في <لأ href = "http://msdn.microsoft.com/en-us/library/ms187804(SQL.90).aspx "يختلط =" نوفولو noreferrer "> استمر توقيت وغيرها الكثير.

وهذه ليست إجابة محددة "كيفية نقل البيانات من الجدول T على خادم A إلى ملقم B '. أكثر تقنية عامة حول كيفية "بيانات صرف عملة ما بين ملقم A و B الخادم.

نصائح أخرى

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

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

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

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

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

<القوي> الخيار 1 : لكتابة التطبيق لنقل البيانات باستخدام المعاملات مستوى الصف. قد يستغرق وقتا أطول ولكن من شأنه أن يؤدي في أي انقطاع في الموقع باستخدام البيانات لأن الصفوف هناك قبل وبعد حدوث قراءة، فقط مع البيانات الجديدة. وهذا من شأنه معالجة يحدث على خادم منفصل لتقليل الحمل.

في مزود خدمة 2008 يمكنك تعيين READ_COMMITTED_SNAPSHOT إلى ON لضمان أن الصف تحديثه لا يسبب عرقلة.

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

<القوي> الخيار 2 : لنقل البيانات (الجداول أو قاعدة البيانات بأكملها) من خادم تجميع لملقم الجهة الأمامية. أتمتة هذه إذا أمكن ذلك. ثم التبديل تطبيق الويب الخاص بك للإشارة إلى قاعدة بيانات جديدة أو جداول لطلبات في المستقبل. هذا وتعمل ولكنها تتطلب السيطرة على التطبيق على شبكة الإنترنت، والتي قد لا يكون.

<القوي> الخيار 3 : إذا كنت تتحدث عن جدول واحد (أو هذا يمكن أن تعمل مع العديد) ما يمكنك القيام به هو تبادل الرأي. لذلك يمكنك كتابة التعليمات البرمجية ضد طريقة عرض SQL الذي يشير إلى الجدول A. أنت هل تعمل على جدول B وعندما يكون جاهزا، يمكنك تحديث طريقة العرض للإشارة إلى جدول B. يمكنك حتى كتابة دالة التي تحدد الجدول النشط وأتمتة مقايضة كله شيء.

<القوي> الخيار 4 : لانك قد تكون قادرة على استخدام شيء مثل تكرار على مستوى البايت من الخادم. هذا يبدو مخيفا بالرغم من ذلك. التي يتم نسخ أساسا الملقم من النقطة ألف إلى النقطة باء بالضبط وصولا الى بايت جدا. انها تستخدم في الغالب في حالات DR هذا الذي يبدو أنه يمكن أن يكون كيندا / شيء على الوضع DR، ولكن ليس حقا.

<القوي> الخيار 5 : لالتخلي عن وتعلم كيفية بيع التأمين. :)

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