CI/CD / عقود الترقية والبيئة / الدرس 11
تغييرات قاعدة البيانات ونوافذ التوافق
خطط لتطور المخطط والبيانات بين نسخ قد تتعايش أثناء الإصدار.
في هذه الصفحة
أهداف الدرس
- شرح التوسيع والترحيل والتقليص كقرارات منفصلة.
- تقييم توافق الرجوع دون تنفيذ SQL.
تتشارك النسخ حالة دائمة
يعيد رجوع الحزمة بايتات التطبيق ولا يعيد تلقائياً المخطط وبيانات العمل. أثناء الطرح قد تقرأ نسخ Parcel القديمة والجديدة الصفوف نفسها وتكتبها. قد تكسر إعادة تسمية عمود القارئ القديم فوراً رغم نجاح الجديد على قاعدة اختبار فارغة. ابدأ بمصفوفة توافق: القديم مع المخطط القديم والموسّع، والجديد مع الموسّع، وتركيبة الرجوع المطلوبة. ضمّن العمال الخلفيين والمستهلكين الخارجيين الأطول عمراً من الطلبات.
أضف التوافق قبل الاعتماد عليه
يقدم التوسيع بنية يتسامح معها الكود القائم مثل عمود جديد يقبل null. يقرأ الجديد تمثيله مع بديل محدد بعناية ويبقى القديم صالحاً. لا يضمن أمر PostgreSQL أدناه السلامة أثناء الخدمة. تؤثر الأقفال وإعادة الكتابة والقيم الافتراضية والقيود والحجم والحمل والإصدار في الخطر التشغيلي. يجب أن يراجع مالك القاعدة خطة فعلية بانتظار محدود وتعافٍ في بيئة مصرح بها.
ALTER TABLE parcel_label
ADD COLUMN recipient_display text;
يفترض جدول PostgreSQL افتراضياً موجوداً. لا ينفذ ولا يتنبأ بمدة قفل أو كلفة كتابة أو توفر إنتاج. تحافظ الإضافة القابلة لـ null على recipient أثناء تصميم الانتقال.
انقل البيانات بعقد قابل للاستئناف
قد يطول الملء الخلفي أكثر من تبني التطبيق ويحتاج حدود تقدم ودفعات وتحققاً ومسؤولاً. لا يجوز لتكرار دفعة تكرار أثر عمل. حدد تفاعل الكتابات الجديدة مع الصفوف المنقولة جزئياً وحل التعارض. قد تسبب الكتابة المزدوجة عدم اتساق إذا نجح طرف وفشل الآخر؛ ليست آلية مجانية. يوضح تحويل محلي حتمي الربط المقصود لكنه لا يختبر المعاملات والأقفال في خادم.
أظهر سلوك القارئ
يسمح النموذج الكامل بالقارئين القديم والانتقالي أثناء التوسيع. يستخدم الجديد البديل فقط عند غياب القيمة الجديدة، ولا يعد السلسلة الفارغة مفقودة تلقائياً. قد تختار المتطلبات قاعدة أخرى لكن صرّح بها. تحقق من معنى البيانات المحوّلة لا عدد الصفوف فقط. قد ينسخ الملء جميع الصفوف ويفسد الترميز أو الترتيب أو الدلالة مع نسبة اكتمال مطمئنة.
rows = [{"recipient": "Ada", "recipient_display": None}, {"recipient": "Lin", "recipient_display": "LIN"}]
def old_reader(row):
return row["recipient"]
def new_reader(row):
value = row.get("recipient_display")
return row["recipient"] if value is None else value
print([old_reader(r) for r in rows])
print([new_reader(r) for r in rows])
['Ada', 'Lin']
['Ada', 'LIN']
لا يصل المثال إلى قاعدة ولا ينفذ كتابة مزدوجة. يوضح بديل null صريحاً مع تمثيل المخططين.
احذف القديم بعد الدليل فقط
يزيل التقليص العمود أو المسار القديم بعد انتقال كل المستهلكين وإعادة النظر في أفق الرجوع. هو قرار إصدار منفصل لا سطر أخير آلي في نص التوسيع. تحقق من عدم حاجة عامل أو تقرير أو تكامل أو مرشح رجوع طارئ إليه. احتفظ بدليل تعافٍ يناسب التغيير. لا تفيد النسخ الاحتياطية إلا إذا جُرّبت الاستعادة لمتطلبات الاتساق المعنية؛ لا يثبت اسم backup قابلية التعافي أو فقد بيانات مقبولاً.
الأخطاء الشائعة وإصلاحها
يبدأ الرجوع ولا يستطيع القديم قراءة القاعدة.
- لماذا يحدث؟
- أزال تغيير هدّام العقد القديم.
- كيف تصلحه؟
- استخدم تعافياً متوافقاً وأشرك مالك القاعدة.
- كيف تتجنب تكراره؟
- افصل قرارات التوسيع والنقل والتقليص.
يكرر الملء الخلفي أفعال عمل خارجية.
- لماذا يحدث؟
- الترحيل غير تكراري الأمان أو حد تقدمه غامض.
- كيف تصلحه؟
- صمم تحويل حالة قابلاً للاستئناف دون إعادة الآثار.
- كيف تتجنب تكراره؟
- راجع الإعادة والاكتمال الجزئي قبل التنفيذ المصرح.
يتعطل ترحيل ناجح على قاعدة فارغة تحت الحمل.
- لماذا يحدث؟
- اختلطت صحة الصياغة بدليل الأقفال التشغيلي.
- كيف تصلحه؟
- قيّم القفل والكتابة على بيانات اختبار ممثلة مصرح بها.
- كيف تتجنب تكراره؟
- راجع إصدار المحرك والحمل وسياسة التنفيذ المحدود.
اختبر فهمك
1. متى يُحذف recipient من المخطط التعليمي؟
اعرض الحل المشروح
بعد استخدام جميع القراء والكتّاب recipient_display واكتمال التحقق وعدم بقاء مستهلك قديم مطلوب وسماح سياسة التعافي بفقد توافق الحزم القديمة. راجع الحذف كإصدار تقليص مستقل.
2. لماذا يميز النموذج None من النص الفارغ؟
اعرض الحل المشروح
قد يكون الفارغ قيمة مقصودة بينما تعني None غياباً في العقد. يخلط بديل يعتمد على الصدق المنطقي بينهما. حدد المعنى بالمجال قبل أن يغيره الترحيل أو القارئ بصمت.
أهم ما تعلمته
- تعمر الحالة الدائمة أكثر من استبدال الحزمة.
- يجب أن يغطي التوافق والتعافي نافذة النسخ المختلطة كلها.