Storage & Databases
ازاي تختار قاعدة البيانات الصح، تخليها سريعة، و تكبّرها لما الـ data تزيد.
SQL vs NoSQL
أهم قرار في تصميم أي تطبيق
ايه الـ Database أصلاً؟
الـ Database هو المكان اللي بنخزن فيه بيانات التطبيق. بس مش أي مكان، ده مكان متخصص ومُحسّن للبيانات. بيوفر:
- • Persistence: البيانات بتفضل حتى لو السيرفر اتقفل
- • Querying: البحث والتعديل بسرعة
- • Concurrency: آلاف اليوزرين يقدروا يستخدموه في نفس الوقت
- • Integrity: البيانات بتفضل صحيحة ومتسقة
SQL: Relational Databases
الـ SQL databases بتنظم البيانات في tables (جداول)، كل جدول فيه rows و columns. زي جدول إكسل بالظبط، بس أقوى بكتير.
الكلمة الأساسية هنا: Schema. لازم تحدد قبل ما تبدأ ايه الأعمدة و نوع كل عمود (نص، رقم، تاريخ). مفيش مرونة، أي بيانات بتدخل لازم تطابق الـ schema.
Relations: السر في الاسم
ليه اسمها "Relational"؟ لأنها بتربط الجداول ببعض. بدل ما تكرر بيانات، بتعمل علاقات.
جدول users:
| 1 | Ahmed |
| 2 | Sara |
جدول posts:
| 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:
{
"_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.
ايه أختار؟
ده السؤال اللي بييجيلك في كل مشروع. القاعدة العامة: