مزامنة بيانات التطبيق - تشغيل التطبيق الجديد جنبًا إلى جنب مع القديم

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

سؤال

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

النظام الجديد هو ASP.NET والنظام القديم هو VB6.كلاهما يعمل على قاعدة بيانات SQL Server.ومن غير الواضح في الوقت الحالي ما إذا كانت قواعد البيانات ستكون في نفس غرفة الخادم، ناهيك عن نفس البلد.

والحلان المطروحان على الطاولة حتى الآن هما:

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

    • تحتاج إلى تغيير المخططات في كلا التطبيقين للتأكد من أن لديهم LastModified (DateTime) على جميع الجداول حتى نتمكن من إجراء تحديد دوري في أي فاصل زمني محدد.

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

الأشياء الأخرى التي تم اقتراحها ولكن تم رفضها (وأنا على استعداد لإعادة النظر فيها) هي:

  • مشغلات قاعدة البيانات (blurh)
  • BizTalk أو حافلة أخرى (تبدو وكأنها مطرقة ثقيلة وهي معقدة للغاية بحيث لا يمكن حلها بالتحويل)
  • تعديل جميع الإجراءات المخزنة (noooo.)
  • مباحث أمن الدولة (لا أعرف ما يكفي عن هذا حتى الآن)

نقدر أي أفكار قد تكون لديكم.

يحرر:ملحوظة:المخططات مختلفة تماما.

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

المحلول 4

في النهاية تم حل هذه المشكلة من خلال خدمة الويب.لقد عملت بشكل جيد حقًا.

نصائح أخرى

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

هل قواعد البيانات تستخدم نفس البنية؟إذا كان الأمر كذلك، فسأنظر في تنفيذ النسخ المتماثل.

يحرر

بعد التعليق والإضافة بأن المخططات مختلفة تمامًا، يجب أن أقول إنني أرى بالفعل مجموعتين من العمليات.

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

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

أنا شخصياً أرفض فكرة استخدام المستخدمين لأي من النظامين في نفس الوقت.كيف ستحل المشكلة إذا قام المستخدم 1 بتغيير السجل 1 على النظام 1 وقام المستخدم 2 بتغيير السجل 1 بطريقة مختلفة على النظام 2؟

علاوة على ذلك، إذا لم تطلب من الأشخاص استخدام النظام الجديد، فلن يفعلوا ذلك.مقاومة التغيير قوية جدًا جدًا في معظم المنظمات.

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

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

في بعض الأحيان، يتعين عليك فقط الرد عندما يريد مستخدمو الأعمال شيئًا غير معقول.

ما تصفه هنا يجعلني أشعر وكأنني في وسط كابوس!أعتقد أنه يجب عليك أولاً أن توضح للجميع أنه من المستحيل (أو على الأقل مكلف للغاية) التفكير في القدرة على السماح للمستخدمين بتحديث جميع البيانات من خلال تطبيقين مختلفين مع قاعدتي بيانات مختلفتين أثناء عملية النقل بأكملها !أنا لا أتحدث حتى عن التأخير لمدة ثانيتين ...

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

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

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

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

ثم لكل مجموعة من هذه المجموعات

  1. ضع قيود التحديث الخاصة بك من خلال التعليمات البرمجية أو على مستوى قاعدة البيانات
  2. قم بتشغيل إجراء "نقل البيانات" الخاص بك
  3. قم بتنظيم إجراء "النقل العكسي" الخاص بك كمشغل في قاعدة البيانات الجديدة

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

من خلال العمل بهذه الطريقة، سوف تنتقل تدريجياً من الوضع الذي كنت فيه

  • قراءة / كتابة التطبيق القديم + للقراءة فقط تطبيق جديد

ل

  • تطبيق قديم للقراءة فقط + قراءة/كتابة تطبيق جديد.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top