المقدمة

الـ caching يعتبر من التقنيات الأساسية اللي بتحسن أداء التطبيقات والأنظمة من خلال تخزين البيانات اللي بنحتاجها كتير في مكان قريب زي الـ Memory للوصول السريع ليها بدل ما نعمل عمليات مكلفة على الـ database أو الـ API.

فبالتالي هو بيساعد جدًا في التحسين من الـ Performance ولكن مش كل أنواع الـ Caching مناسبة لكل موقف ، وده لإنه بيعتمد بنسبة كبيرة على الـ Data Access Patterns، وكل تكنيك ليه الـ Trade-offs اللي لازم نكون مُلمين بيها عشان كدة مهم نفهم الأنواع المختلفة والسيناريوهات الأنسب لكل نوع.


Cache Hit Vs Cache Miss

قبل ما نتكلم عن الـ Caching Strategies فلازم نكون عارفين إن الـ Application لما بيلاقي الـ Data موجودة في الـ Cache فده معناه Cache Hit ولو ملقهاش فبيكون اسمه Cache Miss. 


Cache Reading Strategies

 الـCaching Strategies أثناء الـReading:

  1. الـ Cache Aside
  2. الـ Read Through
  3. الـ Refresh Ahead

Cache Aside (Lazy Loading)

الـ Cache Aside بيشتغل بناءً على الطلب. وده اللي أغلبنا تقريبًا اتعامل معاه بشكل كبير في أي Caching Layer كان التطبيق بتاعنا محتاجها ، يعني ايه الكلام ده ؟

يعني لو التطبيق محتاج بيانات، بيحاول يجيبها من الـ cache الأول، ولو مش موجودة وبيحصل Cache Miss، بيروح للـ database أو الـ source الأساسي للبيانات، وبعد ما يجيبها يحطها في الـ cache للاستفادة بعدين وعشان كده سميناه Lazy Loading لإني بحمل البيانات أو بعملها Loading وقت الحاجة ليها عشان استفاد منها بعدين.


Read-Through Cache

في النوع ده، أي طلب للبيانات بيعدي على الـ Cache الأول بشكل تلقائي. لو البيانات موجودة في الـ Cache، بيرجعها فوراً، ولو مش موجودة، بيروح للـ Database ويجيب البيانات ويحطها في الـ Cache. بس كده الـ Cache Aside هو هواه الـ Read Through ؟

في الحقيقة لأ ، في الـ Cache Aside التطبيق هو اللي بيتحكم في الـ Cache يعني هو اللي بيدير احتياج البيانات وبيحطها في الـ Cache بعد ما يجيبها من الـ Database ولكن في الـ Read-Through الموضوع مختلف.

فالـ Read-Through الـ Cache هو اللي بيدير الموضوع ، فلو البيانات كانت موجودة هيرجعها علطول ولكن لو مش موجودة فهو بنفسه اللي هيروح يجيبها من الـ Database أو المصدر الأساسي للبيانات ، ويرجعها للتطبيق من غير ما التطبيق يتدخل في الموضوع.


Refresh-Ahead Cache

ده نوع متقدم من الـ Caching بيحاول يسبق الأحداث. يعني النظام بيحاول يجيب البيانات اللي احتمال التطبيق يحتاجها قبل ما يطلبها، عشان تبقى جاهزة في الـ Cache لما يطلبها المستخدم.

بيكون عندنا زي Refresh Factor كده وبناء عليه النظام بيبدأ يجيب البيانات اللي متوقع التطبيق يحتاجها بشكل استباقي ، فالفكرة هي إن البيانات المخزنة في الـ cache تفضل محدثة وجاهزة للاستخدام من غير ما يحصل cache miss.


Top 6 Caching Strategies

Cache Writing Strategies

 الـCaching Strategies أثناء الـWriting:

  1.  الـ Write Around
  2. الـ Write Through
  3. الـ Write Back

Write-Through Cache

في الـ Write-Through Caching، أي عملية كتابة أو تعديل على البيانات بتروح مباشرة للـ Cache والـ Database في نفس الوقت. يعني البيانات في الـ Cache دايماً متزامنة مع البيانات الفعلية.


Write-Back / Write-Behind Cache

في النوع ده، أي عملية كتابة بتتم في الـ Cache الأول وبعدها البيانات بتتبعت للـ Database بشكل غير مباشر بعدين (في الخلفية) يعني نقدر نقول إن ده بيتم بشكل Asynchronously.

وده بالتأكيد بيخلي الكتابة أسرع في الوقت الحالي، لكن فيه مخاطرة إن البيانات ما توصلش للـ Database لو حصل مشكلة بعدين في الـ Cache.


Write-Around Cache

الـ Write-Around هي واحدة من استراتيجيات Caching اللي بتتعامل مع الكتابة (Write Operations) بشكل مختلف عن Write-Through و Write-Back.

الفكرة الرئيسية هنا إنها بتتخطى الـ Cache تمامًا عند الكتابة، وبدل ما البيانات تُكتب في الـ Cache، بتتكتب مباشرة في الـ Database فقط.

وفيه شكل محسن منه وهو إننا بدل ما مانكنتبش خالص في الـ Cache ونستنى لما يحصل Cache Miss ونجيب البيانات دي ، اننا نكتب عادي في الـ Database وبعدين بشكل Asynchronous يتم كتابة البيانات دي في الـ Cache ، عكس شكل الـ Write-Behind / Write-Back اللي كان بيكتب في الـ Cache الاول ويكتب بشكل Asynchronous في الـ Database.


في الختام

الاختيار بين استراتيجيات الـ caching بيحتاج مننا إننا نفهم نوع البيانات بتاعتنا كويس واحتياجات الـ Business. لإن كل استراتيجية لها مميزاتها وعيوبها، والتحديات والمشاكل اللي بتواجهها والمفتاح دايمًا هو إننا نختار الاستراتيجية اللي تحقق التوازن بين الأداء والدقة والتعقيد.

تقدروا تشوفوا مقال مُفصل هنا عن كل نوع من الـ Caching Strategies:

Deep Dive Into Caching Strategies
الـ caching يعتبر من التقنيات الأساسية اللي بتحسن أداء التطبيقات والأنظمة من خلال تخزين البيانات اللي بنحتاجها كتير في مكان قريب زي الـ Memory للوصول السريع ليها بدل ما نعمل عمليات مكلفة على الـ database أو الـ API.

Deep Dive Into Caching Strategies