تخطَّ إلى المحتوى
SDSystem Design
وظفني
كل المراحل
Phase 02 / 05

Storage & Databases

ازاي تختار قاعدة البيانات الصح، تخليها سريعة، و تكبّرها لما الـ data تزيد.

0%
Section 01

SQL vs NoSQL

أهم قرار في تصميم أي تطبيق

ايه الـ Database أصلاً؟

الـ Database هو المكان اللي بنخزن فيه بيانات التطبيق. بس مش أي مكان، ده مكان متخصص ومُحسّن للبيانات. بيوفر:

  • Persistence: البيانات بتفضل حتى لو السيرفر اتقفل
  • Querying: البحث والتعديل بسرعة
  • Concurrency: آلاف اليوزرين يقدروا يستخدموه في نفس الوقت
  • Integrity: البيانات بتفضل صحيحة ومتسقة

SQL: Relational Databases

الـ SQL databases بتنظم البيانات في tables (جداول)، كل جدول فيه rows و columns. زي جدول إكسل بالظبط، بس أقوى بكتير.

مثال: جدول users
| id | name | email | age |
|----|-------|----------------|-----|
| 1 | Ahmed | ahmed@x.com | 28 |
| 2 | Sara | sara@x.com | 25 |
| 3 | Omar | omar@x.com | 32 |

الكلمة الأساسية هنا: Schema. لازم تحدد قبل ما تبدأ ايه الأعمدة و نوع كل عمود (نص، رقم، تاريخ). مفيش مرونة، أي بيانات بتدخل لازم تطابق الـ schema.

أشهر SQL databases: PostgreSQL, MySQL, SQL Server, Oracle, SQLite

Relations: السر في الاسم

ليه اسمها "Relational"؟ لأنها بتربط الجداول ببعض. بدل ما تكرر بيانات، بتعمل علاقات.

مثال: Posts و Users

جدول users:

| id | name |
| 1 | Ahmed |
| 2 | Sara |

جدول posts:

| id | title | user_id |
| 1 | Hello! | 1 |
| 2 | My day | 1 |
| 3 | Recipe | 2 |

الـ user_id في جدول posts بيشاور على الـ id في جدول users. ده اسمه Foreign Key.

NoSQL: Non-Relational Databases

الـ NoSQL ظهر عشان مشاكل معينة كانت صعبة في SQL، خصوصاً الـ scaling والـ flexibility. كلمة NoSQL معناها "Not Only SQL"، مش "No SQL".

فيه 4 أنواع رئيسية من NoSQL:

1. Document Stores

بتخزن البيانات كـ documents (زي JSON). كل document مستقل ومش لازم يطابق غيره.

أمثلة: MongoDB, CouchDB

2. Key-Value Stores

أبسط نوع. بس key و value. سريعة جداً. ممتازة للـ caching.

أمثلة: Redis, DynamoDB, Memcached

3. Column-Family Stores

بتنظم البيانات في columns بدل rows. ممتازة للـ analytics والـ big data.

أمثلة: Cassandra, HBase

4. Graph Databases

بتركز على العلاقات بين البيانات. كل عقدة مرتبطة بعقد تانية. ممتازة لـ social networks.

أمثلة: Neo4j, ArangoDB

Document Database: مثال عملي

خليني أوريك الفرق العملي. نفس الـ user في MongoDB:

MongoDB Document
{
  "_id": "507f1f77",
  "name": "Ahmed",
  "email": "ahmed@x.com",
  "address": {
    "city": "Cairo",
    "zip": "12345"
  },
  "posts": [
    { "title": "Hello!", "date": "2024-01-15" },
    { "title": "My day", "date": "2024-01-20" }
  ]
}

شايف؟ كل بيانات اليوزر و البوستات بتاعته في document واحد. مفيش tables و JOINs.

المرونة دي ميزة وعيب في نفس الوقت. ميزة لإن سهل تغير الـ structure، عيب لإن البيانات ممكن تبقى inconsistent.

ايه أختار؟

ده السؤال اللي بييجيلك في كل مشروع. القاعدة العامة:

بيانات structured و relations مهمةSQL (PostgreSQL)
عمليات مالية / بنوكSQL (ACID مهم)
بيانات حجمها بيتغير و schema مرنNoSQL (MongoDB)
Caching / SessionsRedis (Key-Value)
Real-time analyticsCassandra
Social network / recommendationsNeo4j (Graph)
القاعدة الذهبية: ابدأ بـ PostgreSQL. هي بتقدر تعمل 90% من اللي محتاجه، وفيها features من NoSQL كمان (JSONB).

أسئلة انترفيو على القسم ده

3
عايز تتعمّق أكتر؟ فيه دليل كامل عن الموضوع دهتصميم قواعد البيانات من الصفر14 قسم · Database Design
القسم 1 / 6