DataBase قواعد بيانات
Open in Telegram
2 378
Subscribers
No data24 hours
-37 days
-2630 days
Posts Archive
رمز وصف الزامية وجود العلاقة بين الكائنين
اما الزامية ( mandatory ) او اختيارية ( optional )
انواع المفاتيح : ( سيتم انزال الترجمة عند التفرغ لذلك )
Entity keys: Refers to an attribute that uniquely defines an entity in an entity set. Entity keys can be super, candidate or primary.
Super key: A set of attributes (one or more) that together define an entity in an entity set.
Candidate key: A minimal super key, meaning it has the least possible number of attributes to still be a super key.
An entity set may have more than one candidate key.
Primary key: A candidate key chosen by the database designer to uniquely identify the entity set.
Foreign key: Identifies the relationship between entities
https://www.guru99.com/er-diagram-tutorial-dbms.html
من افضل المواقع عالمياً لتعلم قواعد البيانات بشكل احترافياً
احد اعز طلابي
استشهد في غارة العدوان الأمريكي الاسرائيلي يوم أمس اثناء عمله في مصدر رزقه
الله يرحمه ويغفر له ويرضى عنه ويرضيه ويسكنه فسيح جناته ويلهم أهله وذويه الصبر والسلوان وانا لله وانا اليه راجعون
الصورة توضح 6 هياكل بيانات (Data Structures) تستخدم لتقليل استهلاك التخزين في قواعد البيانات، وخصوصًا مع البيانات الكبيرة (Big Data) أو عند الحاجة لأداء عالٍ وسرعة معالجة. دعني أشرح كل واحدة منها بالتفصيل مع أمثلة واقعية.
1. Bloom Filter
🔹 الوصف: هيكل بيانات احتمالي يستخدم لاختبار ما إذا كان عنصر معين موجودًا في مجموعة أم لا، دون الحاجة إلى تخزين العناصر نفسها.
🔹 الفائدة: تقليل عدد عمليات القراءة الباهظة من قواعد البيانات أو الأقراص.
🔹 العيب: قد يعطي نتيجة إيجابية كاذبة (false positive)، لكنه لا يعطي نتيجة سلبية كاذبة.
🔹 مثال واقعي: تخيل أن موقعًا إلكترونيًا يتحقق مما إذا كان البريد الإلكتروني موجودًا في قائمة الحظر. باستخدام Bloom Filter، يمكن التحقق من ذلك بسرعة كبيرة دون الحاجة إلى الوصول إلى قاعدة البيانات.
2. HyperLogLog
🔹 الوصف: خوارزمية لحساب عدد العناصر المميزة (unique elements) في مجموعة، ولكن بشكل تقريبي، وباستخدام ذاكرة قليلة جدًا.
🔹 الفائدة: توفير الذاكرة عند حساب عدد الزوار الفريدين (unique visitors) أو عدد المنتجات الفريدة.
🔹 مثال واقعي: موقع إخباري يريد معرفة عدد الزوار الفريدين يوميًا. بدلًا من تخزين كل IP، يمكنه استخدام HyperLogLog لتقدير العدد بدقة عالية وبذاكرة لا تتجاوز 1.5KB.
3. Cuckoo Filter
🔹 الوصف: هيكل بيانات يشبه Bloom Filter، لكنه يسمح بعمليات الإزالة (deletion) من المجموعة، ويعطي نتائج دقيقة أكثر.
🔹 الفائدة: مناسب في التطبيقات التي تحتاج إلى إضافة وحذف عناصر بشكل متكرر.
🔹 مثال واقعي: في أنظمة جدران الحماية (firewalls)، يمكن استخدام Cuckoo Filter لتخزين وتحديث قائمة عناوين IP الممنوعة بشكل ديناميكي.
4. MinHash
🔹 الوصف: تقنية لحساب تشابه المجموعات الكبيرة بطريقة تقريبية باستخدام توقيعات مختصرة (hash signatures).
🔹 الفائدة: تقارن المستندات أو البيانات الضخمة دون الحاجة إلى قراءتها بالكامل.
🔹 مثال واقعي: شركة مثل Google تستخدم MinHash للكشف عن المحتوى المكرر (duplicate content) بين صفحات الويب.
5. SkipList
🔹 الوصف: هيكل بيانات يشبه القائمة المرتبطة (Linked List) ولكن بطبقات متعددة تسمح بتسريع عمليات البحث، الإضافة، والحذف.
🔹 الفائدة: أداء مقارب لشجرة البحث الثنائية ولكن بطريقة أبسط في التنفيذ.
🔹 مثال واقعي: يستخدم في أنظمة قواعد البيانات مثل LevelDB لترتيب المفاتيح (keys) بشكل سريع أثناء الإضافة والقراءة.
6. Count-Min Sketch
🔹 الوصف: هيكل بيانات يستخدم لحساب عدد مرات تكرار العناصر في تدفق بيانات كبير (Data Stream)، لكنه يعتمد على التقريب.
🔹 الفائدة: لا يحتاج لتخزين كل العناصر لتقدير التكرار.
🔹 مثال واقعي: موقع مثل YouTube يريد معرفة عدد مرات ظهور كل فيديو في النتائج، يمكنه استخدام Count-Min Sketch بدلاً من تخزين كل نتيجة بحث.
🔍 خلاصة:
الهيكلالاستخداممميزاتBloom Filterالتحقق من وجود عنصرسريع جدًا، استهلاك ذاكرة منخفضHyperLogLogتقدير عدد العناصر الفريدةذاكرة صغيرة جدًاCuckoo Filterالتحقق مع دعم الحذفنتائج أدق من BloomMinHashمقارنة مجموعات كبيرةمثالي للتشابهSkipListعمليات بحث مرتبةسريع وسهل التنفيذCount-Min Sketchتقدير التكرارفعال مع تدفقات البيانات
✅ ما الهيكل الإضافي الذي يمكن إضافته؟
Trie (Radix Tree)
🔹 يستخدم لتخزين وتجميع النصوص أو الكلمات بسرعة، مثل القواميس، أو نظام الإكمال التلقائي.
الصورة توضح 6 هياكل بيانات (Data Structures) تستخدم لتقليل استهلاك التخزين في قواعد البيانات، وخصوصًا مع البيانات الكبيرة (Big Data) أو عند الحاجة لأداء عالٍ وسرعة معالجة.
الصورة تشرح الفرق بين Tokens و API Keys في سياق تأمين واستهلاك واجهات برمجة التطبيقات (APIs)، مع توضيح مسار كل واحد خطوة بخطوة، وتُستخدم هذه الآليات للتحقق من هوية المستخدمين أو التطبيقات وضبط صلاحياتهم.
🟢 أولًا: Token Flow (JWT Token)
يُستخدم الرمز المميز (JWT Token) لتوثيق هوية المستخدم بعد تسجيل الدخول.
✅ الخطوات بالتفصيل:
المستخدم (End User) يتفاعل مع تطبيق الويب (Frontend Web App).
التطبيق يرسل طلب تسجيل دخول إلى خدمة الهوية (Identity Service) مثل Auth0 أو Firebase Auth.
عند نجاح تسجيل الدخول، تعيد الخدمة رمز JWT إلى المستخدم.
المستخدم يرسل هذا الـ JWT في كل طلب API عبر الهيدر (Authorization Header).
API Gateway يستلم الطلب ويرسل الرمز إلى وحدة التحقق (Token Validation).
يتم التحقق من:
صحة توقيع JWT (تأكد أنه غير مزيف).
صلاحية انتهاء الرمز (Token expiry).
قراءة البيانات الموجودة داخله (claims).
إذا تم التحقق بنجاح، يُعاد توجيه الطلب إلى خدمة الـ API.
يتم تنفيذ الطلب والوصول إلى البيانات.
🎯 مثال واقعي:
موقع بنكي مثل "Bank.com":
عند تسجيل الدخول، يُولد JWT يحتوي على معلومات المستخدم وصلاحياته.
كل مرة يطلب المستخدم تفاصيل الرصيد أو التحويل، يُرفق الـ JWT ويُتحقق منه دون الحاجة لإعادة تسجيل الدخول.
🔵 ثانيًا: API Key Flow
يُستخدم API Key عادةً من قِبل مطوري الطرف الثالث (3rd Party Developers) للوصول إلى خدمات عامة أو شبه خاصة.
✅ الخطوات بالتفصيل:
المطوّر يسجّل الدخول إلى بوابة المطورين (Developer Portal).
يقدم طلب للحصول على API Key.
يتم إصدار المفتاح من قبل النظام وتخزينه في قاعدة المفاتيح (Key Store).
المطور يستخدم الـ API Key مع كل طلب API (توضع في الهيدر).
API Gateway يستقبل الطلب.
يتحقق من صحة المفتاح عبر خدمة API Key Validation.
إذا كانت صالحة، يتم توجيه الطلب إلى خدمة الـ API العامة.
تتم الاستجابة بناءً على صلاحيات المفتاح.
🎯 مثال واقعي:
شركة طقس مثل OpenWeatherMap:
تصدر API Key لكل تطبيق يستخدم بيانات الطقس.
المفتاح يُحدد إذا ما كان لدى المطور وصول لخدمة الطقس المجانية أم المدفوعة.
🔍 مقارنة سريعة بين Tokens و API Keys
العنصرJWT Token (Token-based)API Key (Key-based)الهدف الأساسيتوثيق هوية المستخدمالسماح للتطبيقات بالوصول إلى APIالجهة المستخدمةالمستخدم النهائي / التطبيقاتالمطورين والتطبيقات الخارجيةقابلية الانتهاءنعم (عادة خلال دقائق أو ساعات)نادرًا، إلا إذا تم حذفه يدويًاالتحقق من الصلاحياتمن خلال الـ claims داخل JWTبناءً على المفتاح وما يرتبط به من صلاحياتسهولة الاستخداممعقد قليلًا لكنه آمن أكثربسيط لكنه أقل أمانًايدعم الهوية؟نعم (يحمل معلومات المستخدم داخل الـ token)لا (مجرد مفتاح دخول)
🔐 أيهم تستخدم؟
استخدم JWT Tokens إذا كنت تبني تطبيقًا فيه تسجيل دخول وصلاحيات مستخدمين.
استخدم API Keys إذا كنت توفر خدمة عامة أو API مدفوعة للمطورين.
الصورة تشرح الفرق بين Tokens و API Keys في سياق تأمين واستهلاك واجهات برمجة التطبيقات (APIs)، مع توضيح مسار كل واحد خطوة بخطوة، وتُستخدم هذه الآليات للتحقق من هوية المستخدمين أو التطبيقات وضبط صلاحياتهم.
🎯 كيف يُنفّذ استعلام SQL داخل قاعدة البيانات؟
نفترض أن المستخدم كتب الاستعلام التالي:
SELECT name, age FROM users WHERE city = 'San Francisco';
🔍 لنرى كيف قاعدة البيانات تتعامل مع هذا الطلب خطوة بخطوة:
✅ الخطوة 1: نظام النقل (Transport Subsystem)
أول ما يوصل الاستعلام للسيرفر، يدخل على "نظام النقل" وهو المسؤول عن:
فتح الاتصال بين المستخدم وقاعدة البيانات.
التحقق من الهوية (Authentication).
التأكد من صلاحيات المستخدم (Authorization).
🧪 مثال واقعي: تخيل أنك فتحت تطبيق البنك وسألت عن رصيدك... لازم النظام يتأكد إنك أنت فعلاً صاحب الحساب قبل ما يجاوبك.
✅ الخطوة 2: معالج الاستعلام (Query Processor)
الآن يبدأ "عقل" قاعدة البيانات في التحليل:
🔹 المُحلّل اللغوي (Parser): يفكك الاستعلام إلى أجزائه (SELECT، FROM، WHERE...) ويتأكد ما فيه أخطاء في الكتابة.
🔹 المُحسّن (Optimizer): يتأكد من أن الجداول موجودة، ويبحث عن أفضل طريقة لتنفيذ الاستعلام بأقل تكلفة (يعني أسرع وأقل استخدام للموارد).
🧪 مثال واقعي: لو طلبت من جوجل "مطاعم بيتزا قريبة"، فهو يحاول يجيب النتائج بأقرب وأسرع طريقة بناءً على موقعك.
✅ الخطوة 3: محرك التنفيذ (Execution Engine)
بعد ما يتم إعداد "خطة التنفيذ"، يتم إرسالها إلى هذا المحرك لتنفيذها فعلياً.
🔸 ينفّذ العمليات خطوة بخطوة.
🔸 يستدعي البيانات المطلوبة من وحدة التخزين.
🔸 يجمّع النتائج ويرجعها للمستخدم.
🧪 مثال واقعي: كأنك طلبت أوردر من مطعم، والمطبخ بدأ يجهّز الطلب قطعة قطعة ويرسله لك جاهز في النهاية.
✅ الخطوة 4: محرك التخزين (Storage Engine)
هنا تُنفّذ الأوامر على مستوى الملفات والبيانات الفعلية:
🔸 مدير المعاملات: يضمن تنفيذ سليم وآمن.
🔸 مدير الأقفال: يمنع التعارض بين عدة مستخدمين.
🔸 مدير الذاكرة المؤقتة: يتحقق إذا البيانات جاهزة في الذاكرة أو لا.
🔸 مدير الاسترجاع: يسترجع البيانات لو حصل خطأ أو انقطع التيار.
🧪 مثال واقعي: المحاسب داخل الشركة ما يفتح أي خزنة إلا بإذن، ويتأكد ما في تعارض بين طلبين بنفس الوقت، ويحتفظ بسجل كامل للعمليات.
💬 سؤالك الآن: هل كنت تتخيل أن استعلام SQL بسيط يمر بكل هذه المراحل المعقّدة؟ 😄
#SQL #تصميم_الأنظمة #مطورون #تعلم_البرمجة #Backend #SystemDesign #Databaseخلّيني اوضحها على خطوتين: نبذة مختصرة جدًا، ثم تسعة أنواع بشرح مبسّط مع مثال واقعي وسطر T-SQL لكل واحد.
*نبذة مختصرة*
القفل = آلية تمنع تعارض العمليات المتزامنة لتحافظ على سلامة البيانات.
فيه أقفال قراءة تسمح بالمشاركة، وأقفال كتابة تمنع غيرك حتى تنهي.
درجة الدقّة تختلف: صف، صفحة (بلوك)، أو جدول كامل. كلما كبر النطاق، قلّ التوازي.
اختيار القفل الصحيح يوازن بين الأمان والأداء ويقلّل احتمالات الـdeadlock.
1) Shared Lock (S)
الفكرة: يسمح لعدّة جلسات تقرأ نفس السجل/النطاق، لكن بدون تعديل.
تشبيه: ناس كثير يطالعوا نفس الملف في المكتبة، بس ما حد يكتب عليه.
مثال واقعي: شاشة تقارير تعرض طلبات اليوم لعدّة مستخدمين.
T-SQL مختصر:
SELECT * FROM Orders WITH (HOLDLOCK); -- أو الافتراضي مع العزل
2) Exclusive Lock (X)
الفكرة: قفل للقراءة+الكتابة، ويمنع أي قفل آخر على نفس المورد.
تشبيه: شخص أخذ الملف لغرفة التحرير—لا أحد يلمسه حتى يرجّعه.
مثال واقعي: تحديث سعر الطلب رقم 123.
T-SQL:
UPDATE Orders SET Price = 99.0 WHERE OrderID = 123; -- يأخذ X تلقائيًا
3) Update Lock (U)
الفكرة: نية تحديث تبدأ بقفل (U) لمنع تشابك القرّاء الذين سيحوّلون إلى X لاحقًا. يقلّل الـdeadlock.
تشبيه: حاطط “حجز” على الملف لأنك بتعدّل بعد ما تراجع.
مثال واقعي: الخدمة تقرأ السطر ثم تقرر تعدله لو تحقق شرط.
T-SQL:
SELECT * FROM Orders WITH (UPDLOCK, HOLDLOCK) WHERE OrderID = 123; -- ثم UPDATE لنفس الصف
4) Schema Lock
الفكرة: يحمي بنية الكائنات (أعمدة/فهرس) أثناء التغييرات أو أثناء استخدامها.
تشبيه: قفل باب غرفة السيرفر وقت تبديل الرفوف.
مثال واقعي: إضافة عمود جديد في جدول ضخم.
T-SQL:
ALTER TABLE Orders ADD NewColumn INT; -- يأخذ Schema Modification Lock
5) Bulk Update Lock (BU)
الفكرة: لعمليات الإدخال الضخمة لتقليل عدد الأقفال ورفع السرعة.
تشبيه: بدل ما تعطّي تصريح دخول لكل شخص، تفتح ممر خاص لمجموعة كبيرة.
مثال واقعي: استيراد 500 ألف سطر دفعة واحدة.
T-SQL:
BULK INSERT Orders FROM 'orders.csv' WITH (TABLOCK);
6) Key-Range Lock
الفكرة: يقفل نطاق مفاتيح في الفهرس لمنع “الصفوف الشبحية” ضمن العزل SERIALIZABLE.
تشبيه: تحجز الأرقام من 100 إلى 200 في دفتر التذاكر؛ ما حد يضيف بينها.
مثال واقعي: تقرير يراجع الطلبات بين رقمين ويضمن ما ينضاف صف جديد داخل النطاق أثناء العملية.
T-SQL:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SELECT * FROM Orders WHERE OrderID BETWEEN 100 AND 200;
7) Row-Level Lock
الفكرة: يقفل صفًا واحدًا فقط؛ أعلى درجة توازي.
تشبيه: تحجز ملفًا واحدًا من الرف، والباقي متاح.
مثال واقعي: تحديث حالة طلب محدد بدون التأثير على باقي الطلبات.
T-SQL:
UPDATE Orders WITH (ROWLOCK) SET Status = 'Paid' WHERE OrderID = 123;
8) Page-Level Lock
الفكرة: يقفل صفحة بيانات (بلوك) فيها عدة صفوف؛ وسط بين الصف والجدول.
تشبيه: تغلق رفًا كاملًا بدل ملف واحد.
مثال واقعي: تحديثات متجاورة كثيرة تجعل قفل الصفحة أوفر من آلاف أقفال صفوف.
T-SQL:
UPDATE Orders WITH (PAGLOCK) SET Flag = 1 WHERE OrderID BETWEEN 1000 AND 1100;
9) Table-Level Lock
الفكرة: يقفل الجدول كله؛ بسيط لكنه يقلّل التوازي بقوة.
تشبيه: “مغلق للصيانة” على باب القاعة كاملة.
مثال واقعي: إعادة حسابات أو أرشفة على كامل الجدول خارج أوقات الذروة.
T-SQL:
SELECT * FROM Orders WITH (TABLOCK); -- أو ALTER/INDEX REBUILD إلخ.
لمحة اختيار سريعة
قراءة فقط ➜ S
قراءة بنية تعديل لاحقًا ➜ U ثم X
تحديث سطر محدد وكثير مستخدمين ➜ ROWLOCK
إدخال ضخم ➜ BU + TABLOCK
منع صفوف جديدة ضمن نطاق قرأته ➜ Key-Range (مع SERIALIZABLE)
تغيير هيكل الجدول ➜ Schema
ضغط أقفال كثيرة متجاورة ➜ PAGLOCK، وآخر الحلول TABLOCK
سؤال تأكيد واحد:
لو عندك إجراء يقرأ صفًا، يتأكد من شرط، ثم قد يحدّثه—أي تلميح تختاره لتقليل الـdeadlock: HOLDLOCK فقط، أم UPDLOCK, HOLDLOCK؟ ولماذا؟
تمام 👌 خلينا نشرح المخطط خطوة بخطوة بشكل مبسط، كأننا نحكي كيف "قوقل" يشتغل لما تبحث عن شيء:
1. Crawling (الزحف وجمع الصفحات)
في البداية، في برامج اسمها Crawler (عنكبوت آلي).
هذا العنكبوت يزور المواقع (www) ويجمع منها الصفحات.
يخزنها في مكان اسمه Page Repository (مستودع الصفحات).
فيه جزء ثاني اسمه Scheduler (الجدولة) يحدد للعنكبوت أي مواقع يزور ومتى.
ومن خلال الروابط (URLs)، العنكبوت يكتشف مواقع جديدة ويستمر يجمع.
2. Indexing (الفهرسة)
بعد ما تنجمع الصفحات، تروح لمرحلة Indexer (المفهرِس).
هناك يحصل:
Parsing (تحليل الصفحة): يفكك المحتوى.
Canonicalization & Dedup (إزالة التكرار وتحديد النسخة الأساسية).
Feature Extraction (استخراج المميزات): مثل الكلمات المفتاحية، الصور، اللغة.
Spam Detection (كشف السبام والمحتوى المزيف).
Language/Region (تحديد اللغة والمنطقة).
Classifiers (مصنفات مختلفة): علشان يعرف نوع الصفحة (مقال، منتج، فيديو…).
3. Serving Search Results (عرض النتائج)
لما تكتب سؤال في قوقل:
Query Engine يفهم سؤالك (تحليل المعنى، الكلمات، السياق).
يبحث في الفهرس عن الصفحات المناسبة.
ثم يطبق Ranking (الترتيب): أي صفحة أفضل وأقرب لطلبك.
هنا يدخل عامل مهم: إشارات المستخدمين من السجلات (يعني: الناس ضغطوا على أي نتيجة؟ كم جلسوا فيها؟ رجعوا بسرعة ولا استمروا؟).
4. إظهار النتائج
النتيجة النهائية: الصفحات الأكثر فائدة وترتيبها تطلع لك في محرك البحث (Google أو غيره).
🔑 باختصار:
العنكبوت يجيب الصفحات 🕷️
المفهرس ينظمها 📚
محرك البحث يعرضها لك بالترتيب حسب أهميتها 🔍
