
لما نيجي نتكلم عن الأنظمة اللي بتركز على عمليات القراءة أكتر من الكتابة، يعني الـ Systems اللي بيكون فيها نسبة قراءة للبيانات أكبر بكتير من نسبة الكتابة.
فلو كان الـ System اللي بتبنيه بيتضمن من المتطلبات بتاعته انه يكون Read Heavy ففيه شوية استراتيجيات ممكن نستخدمها عشان نحسن من الأداء ونضمن إن النظام يشتغل بكفاءة عالية.
فورقة وقلم وتعالوا نتكلم عن بعض الاستراتيجيات اللي ممكن نستخدمها.
Caching
أول استراتيجية وأكتر واحدة مشهورة هي الـ Caching. وفكرة الـ Caching ببساطة هي إنك بتحتفظ بنسخة من البيانات اللي بتتقرا كتير في مكان سريع زي الـ RAM فبالتالي البيانات دي بتكون In-Memory.
لما المستخدم بيطلب البيانات دي تاني، النظام بدل ما يروح يجيبها من الـ Database، ويكون فيه Latency نتيجة قراءة البيانات دي من الـ Disk بيجيبها علطول من الـ Cache.
وفيه أنواع كتير من الـ Caching زي:
- الـ In-Memory Caching
- الـ Application-Level Caching
Indexing
الـ Indexing بيساعد في تسريع عمليات البحث في الـ Database. فلما يكون عندنا Table فيها ملايين الـ Records، البحث جواها ممكن ياخد وقت طويل. لكن لو عاملين Index على الـ Column مثلا اللي بنبحث بيه كتير، هنلاقي إن البحث بقى أسرع بكتير. زي ما يكون عندك فهرس في كتاب، بدل ما تقعد تدور على الكلمة في كل صفحات الكتاب، بتروح للفهرس وتوصل للمعلومة بسرعة.
وطبعًا بنأكد على ان عمل Indexing لازم يتم بعناية وانك تكون فاهم كويس ايه الـ Column اللي فعلا ممكن تحتاج يتعملها Indexing عشان تساعد في تحسين الاداء.
أنواع الـ Indexes:
- الـ B-Tree Index
- الـ Hash Index
Replication
الـ Replication هو إننا نعمل نسخ من الـ Database على أكتر من Server.
الفكرة هنا إننا نوزع عمليات القراءة على السيرفرات المختلفة، فمثلا لو عندنا 3 سيرفرات وكل سيرفر عليه نسخة من الـ Database، ده هيخلينا بدل منكون قادرين نـ Support 1,000 Read Query من Server واحد نـ Support 3,000 Read Queries في نفس الوقت لان باه عندنا 3 Servers.
أنواع الـ Replication:
- الـ Leader-Follower Replication
- الـ Multi-Leader Replication
Load Balancing
الـ Load Balancing بيشتغل مع الـ Replication علشان يوزع الـ Traffic بتاع القراءة على السيرفرات المختلفة وبالتالي يقلل الحمل على كل واحد. وبيستخدم خوارزميات متنوعة زي Round Robin أو Least Connections علشان يتأكد إن كل سيرفر بياخد جزء مناسب من الحمل.
وكده بنضمن إن مفيش سيرفر بيتحمل زيادة عن اللزوم والـ System كله بيشتغل بكفاءة عالية.
أمثلة على Load Balancers:
- الـ HAProxy
- الـ Nginx
- الـ AWS Elastic Load Balancer
Sharding
الـ Sharding هو إننا نقسم الـ Database بتاعتنا لأجزاء أصغر ونوزعها على أكتر من سيرفر. فبدل ما يكون عندنا Database كبيرة وضخمة بنبدأ نقسمها لأجزاء صغيرة. وده طبعًا بيساعد في توزيع الحمل وتحسين الأداء كذلك.
أنواع الـ Sharding:
- الـ Horizontal Sharding
- الـ Vertical Sharding
Content Delivery Network (CDNs)
الـ CDNs هي شبكة من السيرفرات الموزعة جغرافيا، مصممة لتقديم المحتوى للمستخدمين بسرعة وكفاءة. فلما يكون عندنا موقع أو تطبيق بيستخدم صور، فيديوهات، أو ملفات ثابتة كتير اللي هي Static Content، فاستخدام الـ CDN بيساعد في تسريع تحميل المحتوى ده للمستخدمين.
والسيرفرات دي بتخزن نسخ من المحتوى الثابت ده وتقدمه للمستخدمين من أقرب سيرفر ليهم، وده بيقلل زمن الاستجابة بشكل كبير.
أمثلة على الـ CDNs:
- الـ Cloudflare
- الـ Amazon CloudFront
في الختام
الأنظمة اللي بتركز على عمليات القراءة الكثيفة محتاجة تخطيط كويس جدًا علشان تقدر تشتغل بكفاءة. وبالتأكيد فيه استراتيجيات تانية كمان زي الـ Data Denormalization والـ Materialized Views وغيرهم كتير ممكن نتكلم عنهم لاحقًا.