انتقل إلى المحتوى الرئيسي

MODULE 7 - قواعد البيانات والمعاملات

مرحبًا بكم في الوحدة 7! 🗄️​

أنت الآن تعرف كيفية استخدام Spring Data JPA لإنشاء المستودعات وتنفيذ الاستعلامات. ولكن هل تعرف كيف يدير Spring فعليًا الاتصالات بقاعدة البيانات؟ والأهم من ذلك، هل تفهم المعاملات؟

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


🎓 أهداف التعلم​

في نهاية هذه الوحدة، ستكون قادرًا على:

  1. ✅ تكوين مصادر البيانات في Spring Boot (HikariCP)
  2. ✅ فهم واستخدام @Transactional بشكل صحيح
  3. ✅ إدارة مستويات الانتشار والعزل
  4. ✅ إصدار مخطط قاعدة البيانات باستخدام Flyway
  5. ✅ مقارنة Flyway وLiquibase
  6. ✅ ربط تطبيقك بقاعدة بيانات مختلفة (H2، PostgreSQL، MySQL)

📚 المتطلبات الأساسية​

قبل أن تبدأ هذه الوحدة، يجب أن تكون قد:

  • ✅ أكملت الوحدات من 1 إلى 6
  • ✅ أنشأت كيانات JPA مع العلاقات
  • ✅ استخدمت مستودعات Spring Data JPA
  • ✅ فهمت بنية الطبقات الثلاث (Controller، Service، Repository)

إذا لم تكن هذه المتطلبات مكتسبة، عد إلى الوحدات السابقة!


🗺️ خطة الوحدة​

الجزء النظري (4 فصول)​

الفصل 1: تكوين مصادر البيانات​

المدة: 45 دقيقة

المحتوى:

  • ما هي مصدر البيانات؟
  • التكوين في application.properties/yml
  • HikariCP: مجموعة الاتصالات الافتراضية
  • التكوين المتقدم (min/max connections، timeout)
  • تكوين مصادر بيانات متعددة

لماذا هو مهم؟ فهم كيفية إدارة Spring Boot للاتصالات


الفصل 2: إدارة المعاملات (@Transactional)​

المدة: 1 ساعة

المحتوى:

  • ما هي المعاملة؟ (ACID)
  • شرح @Transactional بالتفصيل
  • الانتشار (REQUIRED، REQUIRES_NEW، إلخ.)
  • مستويات العزل
  • التراجع وإدارة الاستثناءات
  • الفخاخ الشائعة التي يجب تجنبها

لماذا هو مهم؟ ضمان سلامة البيانات


الفصل 3: ترحيل المخطط باستخدام Flyway​

المدة: 45 دقيقة

المحتوى:

  • لماذا إصدار مخطط قاعدة البيانات؟
  • تثبيت وتكوين Flyway
  • اتفاقية التسمية (V1__، V2__، إلخ.)
  • ترحيل SQL مقابل Java
  • التراجع والإصلاح
  • أفضل الممارسات

لماذا هو مهم؟ نشر تغييرات قاعدة البيانات في الإنتاج


الفصل 4: الترحيل باستخدام Liquibase​

المدة: 30 دقيقة

المحتوى:

  • Flyway مقابل Liquibase: مقارنة
  • تنسيق XML، YAML، JSON
  • سجل التغييرات ومجموعات التغييرات
  • التراجع التلقائي
  • متى تختار Liquibase؟

لماذا هو مهم؟ معرفة البدائل


الجزء العملي (3 تمارين)​

تمرين 7.1: تكوين مصدر البيانات والمجموعة​

المدة: 1 ساعة

الهدف: تكوين وتحسين اتصالات قاعدة البيانات

ستقوم بـ:

  • تكوين HikariCP لـ H2 وPostgreSQL
  • مراقبة مجموعة الاتصالات
  • اختبار حدود الاتصالات

تمرين 7.2: المعاملات والتراجع​

المدة: 1 ساعة و30 دقيقة

الهدف: إتقان @Transactional

ستقوم بـ:

  • إنشاء عمليات معاملات
  • محاكاة الأخطاء ومراقبة التراجعات
  • اختبار الانتشار (REQUIRED مقابل REQUIRES_NEW)
  • إدارة المعاملات للقراءة فقط

تمرين 7.3: الترحيل باستخدام Flyway​

المدة: 1 ساعة و30 دقيقة

الهدف: إصدار مخطط قاعدة البيانات

ستقوم بـ:

  • تكوين Flyway
  • إنشاء سكربتات الترحيل
  • محاكاة تطور المخطط
  • إدارة البيانات الأولية

📊 المدة الإجمالية​

النوعالمدة
النظرية3 ساعات (4 فصول)
العملية4 ساعات (3 تمارين)
الإجمالي7 ساعات (~2-3 جلسات)

🎯 ما ستفهمه​

قبل هذه الوحدة​

// كنت تكتب هذا دون فهم حقيقي:
@Service
public class TransferService {

@Transactional // ← لماذا؟ ما هو بالضبط؟
public void transfer(Long from, Long to, BigDecimal amount) {
accountRepo.debit(from, amount);
accountRepo.credit(to, amount);
}
}

أسئلة بدون إجابات:

  • ماذا يحدث إذا فشل credit() بعد debit()؟
  • لماذا @Transactional وليس فقط try/catch؟
  • كيف يدير Spring الاتصالات بقاعدة البيانات؟
  • كيف يتم نشر تغييرات المخطط في الإنتاج؟

بعد هذه الوحدة​

@Service
public class TransferService {

@Transactional(
propagation = Propagation.REQUIRED, // ← إعادة استخدام أو إنشاء معاملة
isolation = Isolation.READ_COMMITTED, // ← مستوى العزل
rollbackFor = Exception.class // ← التراجع عن أي استثناء
)
public void transfer(Long from, Long to, BigDecimal amount) {
// إذا فشل credit()، يتم التراجع عن debit() تلقائيًا!
accountRepo.debit(from, amount);
accountRepo.credit(to, amount);
}
}

ستعرف:

  • ✅ كيف يدير Spring الاتصالات (HikariCP pool)
  • ✅ متى وكيف تستخدم @Transactional
  • ✅ تجنب الفخاخ الشائعة (proxy، self-invocation)
  • ✅ ترحيل المخطط باستخدام Flyway بدون مخاطر
  • ✅ الاختيار بين Flyway وLiquibase

🚀 لماذا هذه الوحدة حاسمة​

1. سلامة البيانات​

سيناريو كارثي (بدون معاملة):
1. خصم من الحساب A: -100€ ✓
2. إضافة إلى الحساب B: خطأ! ✗
3. النتيجة: 100€ "اختفت" 💀

المعاملات تضمن: الكل أو لا شيء.


2. الأداء في الإنتاج​

بدون مجموعة اتصالات:
- كل طلب = اتصال جديد = بطيء
- 1000 مستخدم = 1000 اتصال = قاعدة بيانات مثقلة

مع HikariCP (مجموعة):
- إعادة استخدام الاتصالات = سريع
- 1000 مستخدم = 10 اتصالات = قاعدة بيانات سعيدة 😊

3. النشر بدون قلق​

بدون Flyway:
- "هل نفذت سكربت SQL؟" 🤔
- "أي واحد؟ V3 أم V4؟" 😰
- "أوه، نسيت عمودًا" 💀

مع Flyway:
- ترحيلات تلقائية عند بدء التشغيل ✓
- تتبع الإصدار ✓
- نشر هادئ ✓

🗺️ التقدم في التدريب​

الوحدة 7 = إتقان أساسيات الاستمرارية!


📖 كيفية التعامل مع هذه الوحدة​

النظرية قبل الممارسة​

  1. اقرأ الفصول النظرية الأربعة بالترتيب

    • الفصل 1: مصادر البيانات (الأساسيات)
    • الفصل 2: المعاملات (الأهم!)
    • الفصل 3: Flyway (الترحيل الرئيسي)
    • الفصل 4: Liquibase (البديل)
  2. قم بالتمارين بالترتيب

    • تمرين 7.1: التكوين
    • تمرين 7.2: المعاملات
    • تمرين 7.3: Flyway

الوقت الموصى به​

الخيار المكثف (يوم واحد):

  • الصباح: الفصول 1 و2 + تمرين 7.1
  • بعد الظهر: تمرين 7.2 + الفصول 3 و4
  • نهاية بعد الظهر: تمرين 7.3

الخيار التدريجي (جلستان):

  • الجلسة 1: الفصول 1-2 + تمرين 7.1 و7.2
  • الجلسة 2: الفصول 3-4 + تمرين 7.3

✅ التقييم الذاتي​

قبل أن تبدأ، أجب:

  1. هل تعرف ما هي مصدر البيانات؟ ☐ نعم ☐ لا
  2. هل تعرف خصائص ACID؟ ☐ نعم ☐ لا
  3. هل تعرف ما يفعله @Transactional؟ ☐ نعم ☐ لا
  4. هل استخدمت Flyway أو Liquibase من قبل؟ ☐ نعم ☐ لا

إذا أجبت "لا" على سؤال واحد → هذه الوحدة لك!


🎯 الخطوة التالية​

جاهز لإتقان الاتصالات والمعاملات؟

➡️ ابدأ مع الفصل 1: تكوين مصادر البيانات


⬅️ العودة إلى خطة الدورة