مع الاب القدوة ذو الفضل الاستاذ الدكتور
بشير محمد المقالح - عميد كلية الحاسبات #جامعة_ذمار - اليمن
والدكتور العزيز وليد دحيه
من مناقشة مشاريع التخرج لطلاب #جامعة_السعيدة.
بشير محمد المقالح - عميد كلية الحاسبات #جامعة_ذمار - اليمن
والدكتور العزيز وليد دحيه
من مناقشة مشاريع التخرج لطلاب #جامعة_السعيدة.
❤1
#نموذج_تطبيق_متجر_الكتروني_مصغر
غير مكتمل
الغرض منه تعليمي وافادة طلابي ( مخصص له ساعتين اسبوعيا )
https://github.com/GeniusSystems24/genius_store
كما تلاحظ يظهر المشروع مع التوصيف الخاص به.
وهذه الطريقة هي المطلوبة عند التقديم الى الشركات وتشوف ان عملك مرتب.
اذا تريد السعي لمستقبل حقيقي مميز التزم بالاشياء الصعبة على الاخرين.
يوجد وصف لمحتوى كل مجلد مثلا
https://github.com/GeniusSystems24/genius_store/tree/main/lib/presentation/screens
غير مكتمل
الغرض منه تعليمي وافادة طلابي ( مخصص له ساعتين اسبوعيا )
https://github.com/GeniusSystems24/genius_store
كما تلاحظ يظهر المشروع مع التوصيف الخاص به.
وهذه الطريقة هي المطلوبة عند التقديم الى الشركات وتشوف ان عملك مرتب.
اذا تريد السعي لمستقبل حقيقي مميز التزم بالاشياء الصعبة على الاخرين.
يوجد وصف لمحتوى كل مجلد مثلا
https://github.com/GeniusSystems24/genius_store/tree/main/lib/presentation/screens
GitHub
GitHub - GeniusSystems24/genius_store
Contribute to GeniusSystems24/genius_store development by creating an account on GitHub.
👍5
https://www.facebook.com/share/167ZRWkJGX/?mibextid=xfxF2i
https://github.com/GeniusSystems24/study/blob/main/Three%20ways%20of%20using%20SQL%20Insert%20compere
هل تعرف أفضل طريقة لإدراج البيانات في SQL Server؟
اكتشف الفروق الكبيرة بين ثلاث طرق شائعة لإدراج البيانات! 🚀
- طريقة واحدة تمنحك أداءً مذهلاً! ⚡
- أخرى قد تعرضك لمخاطر فقدان البيانات! ❌
📊 تعرف على التحليل الكامل الآن واستفد من أفضل الممارسات لضمان الأداء والأمان!
#SQLServer #Database #Performance #DataSecurity #تطوير_البرمجيات #قواعد_البيانات #الأداء #البرمجة #تعلم #كلية_الحاسبات #علوم_الحاسوب #هندسة_برمجيات
https://github.com/GeniusSystems24/study/blob/main/Three%20ways%20of%20using%20SQL%20Insert%20compere
هل تعرف أفضل طريقة لإدراج البيانات في SQL Server؟
اكتشف الفروق الكبيرة بين ثلاث طرق شائعة لإدراج البيانات! 🚀
- طريقة واحدة تمنحك أداءً مذهلاً! ⚡
- أخرى قد تعرضك لمخاطر فقدان البيانات! ❌
📊 تعرف على التحليل الكامل الآن واستفد من أفضل الممارسات لضمان الأداء والأمان!
#SQLServer #Database #Performance #DataSecurity #تطوير_البرمجيات #قواعد_البيانات #الأداء #البرمجة #تعلم #كلية_الحاسبات #علوم_الحاسوب #هندسة_برمجيات
https://github.com/GeniusSystems24/study/blob/main/Three%20ways%20of%20using%20SQL%20Insert%20compere
تفاصيل دراسة الحالة
تفاصيل دراسة الحالة
GitHub
study/Three ways of using SQL Insert compere at main · GeniusSystems24/study
مستودع مخصص لتوثيق ومشاركة المفاهيم والخبرات المتنوعة في مجال هندسة البرمجيات، بما يشمل أفضل الممارسات، الأنماط التصميمية (Design Patterns)، إدارة المشاريع البرمجية، مراحل تطوير الأنظمة، إضافة إلى ...
https://github.com/GeniusSystems24/study/blob/main/Three%20ways%20of%20using%20SQL%20Insert%20compere/references.md
مراجع دراسة الحالة
مراجع دراسة الحالة
GitHub
study/Three ways of using SQL Insert compere/references.md at main · GeniusSystems24/study
مستودع مخصص لتوثيق ومشاركة المفاهيم والخبرات المتنوعة في مجال هندسة البرمجيات، بما يشمل أفضل الممارسات، الأنماط التصميمية (Design Patterns)، إدارة المشاريع البرمجية، مراحل تطوير الأنظمة، إضافة إلى ...
Forwarded from PRO.ANWAR ALSAIARY ( ADVANCE )
قناتي على الواتساب
PRO.ANWAR ALSAIARY ( ADVANCE ) channel on WhatsApp: https://whatsapp.com/channel/0029VbAobzhAInPuPXRCW12m
اللهم اجعلها صدقة جارية مقبولة
شاركوا مع من تعرفوا كتب الله لنا ولكم الأجر والثواب
PRO.ANWAR ALSAIARY ( ADVANCE ) channel on WhatsApp: https://whatsapp.com/channel/0029VbAobzhAInPuPXRCW12m
اللهم اجعلها صدقة جارية مقبولة
شاركوا مع من تعرفوا كتب الله لنا ولكم الأجر والثواب
WhatsApp.com
PRO.ANWAR ALSAIARY ( ADVANCE ) | WhatsApp Channel
PRO.ANWAR ALSAIARY ( ADVANCE ) WhatsApp Channel. - professional software engineering.
- full stack developer.
asp.net - flutter - sql server - firebase.
( مستوى متقدم ) محتوى متنوعة في هندسة البرمجيات. 158 followers
- full stack developer.
asp.net - flutter - sql server - firebase.
( مستوى متقدم ) محتوى متنوعة في هندسة البرمجيات. 158 followers
❤2
أولًا: ما الذي يؤثر على أداء قاعدة البيانات؟
المقاييس المهمة:
وقت تنفيذ الاستعلام (كم يأخذ وقتًا).
Throughput (كم عملية تُنفذ في الثانية).
Latency (التأخير بين الطلب والرد).
استهلاك الموارد (المعالج، الذاكرة).
أنواع الأحمال (Workload Types):
كتابة بكثرة (Write-heavy): مشاكل في الأقفال (locks) وصيانة الفهارس.
قراءة بكثرة (Read-heavy): بطء في الاستعلامات المعقدة والـ cache misses.
حذف بكثرة (Delete-heavy): يؤدي إلى تجزئة البيانات وفقدان الأداء.
تنافس بين الأعمال (Competing workload): لما يكون فيه عمليات لحظية وأخرى بالدفعات (batch) ممكن يحصل بطء بسبب التزاحم على الموارد.
عوامل أخرى: حجم البيانات، نوعها، التوزيع الجغرافي، عدد المستخدمين في نفس الوقت، توقعات التوافر العالي (HA)، إلخ.
ثانيًا: استراتيجيات تحسين الأداء
الفهرسة (Indexing):
زي الفهرس في كتاب، يخليك توصل للمعلومة أسرع بدون ما تقرأ الكتاب كامل.
التجزئة والتقسيم (Sharding & Partitioning):
بدل ما تحط كل البيانات في قاعدة وحدة ضخمة، تقسمها لأجزاء أصغر (شاردات) على خوادم مختلفة.
إلغاء التطبيع (Denormalization):
بدال ما توزع البيانات في جداول كثيرة وتحتاج تربطها باستمرار (Joins)، تدمج بعضها في جدول واحد لتسريع الاستعلامات.
النسخ (Replication):
تعمل نسخ متعددة من قاعدة البيانات: وحدة رئيسية (للكتابة)، والبقية (للقراءة). هذا يوزع الحمل ويحسن التوافر.
تقنيات الأقفال (Locking):
تستخدمها عشان تمنع تضارب التحديثات لو أكثر من مستخدم يعدل على نفس البيانات في نفس الوقت (زي Sarah وJohn في المثال).
المقاييس المهمة:
وقت تنفيذ الاستعلام (كم يأخذ وقتًا).
Throughput (كم عملية تُنفذ في الثانية).
Latency (التأخير بين الطلب والرد).
استهلاك الموارد (المعالج، الذاكرة).
أنواع الأحمال (Workload Types):
كتابة بكثرة (Write-heavy): مشاكل في الأقفال (locks) وصيانة الفهارس.
قراءة بكثرة (Read-heavy): بطء في الاستعلامات المعقدة والـ cache misses.
حذف بكثرة (Delete-heavy): يؤدي إلى تجزئة البيانات وفقدان الأداء.
تنافس بين الأعمال (Competing workload): لما يكون فيه عمليات لحظية وأخرى بالدفعات (batch) ممكن يحصل بطء بسبب التزاحم على الموارد.
عوامل أخرى: حجم البيانات، نوعها، التوزيع الجغرافي، عدد المستخدمين في نفس الوقت، توقعات التوافر العالي (HA)، إلخ.
ثانيًا: استراتيجيات تحسين الأداء
الفهرسة (Indexing):
زي الفهرس في كتاب، يخليك توصل للمعلومة أسرع بدون ما تقرأ الكتاب كامل.
التجزئة والتقسيم (Sharding & Partitioning):
بدل ما تحط كل البيانات في قاعدة وحدة ضخمة، تقسمها لأجزاء أصغر (شاردات) على خوادم مختلفة.
إلغاء التطبيع (Denormalization):
بدال ما توزع البيانات في جداول كثيرة وتحتاج تربطها باستمرار (Joins)، تدمج بعضها في جدول واحد لتسريع الاستعلامات.
النسخ (Replication):
تعمل نسخ متعددة من قاعدة البيانات: وحدة رئيسية (للكتابة)، والبقية (للقراءة). هذا يوزع الحمل ويحسن التوافر.
تقنيات الأقفال (Locking):
تستخدمها عشان تمنع تضارب التحديثات لو أكثر من مستخدم يعدل على نفس البيانات في نفس الوقت (زي Sarah وJohn في المثال).
❤2
تمام 👌 خلينا نشرح المخطط خطوة بخطوة بشكل مبسط، كأننا نحكي كيف "قوقل" يشتغل لما تبحث عن شيء:
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 أو غيره).
🔑 باختصار:
العنكبوت يجيب الصفحات 🕷️
المفهرس ينظمها 📚
محرك البحث يعرضها لك بالترتيب حسب أهميتها 🔍
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 أو غيره).
🔑 باختصار:
العنكبوت يجيب الصفحات 🕷️
المفهرس ينظمها 📚
محرك البحث يعرضها لك بالترتيب حسب أهميتها 🔍
❤3
خلّيني اوضحها على خطوتين: نبذة مختصرة جدًا، ثم تسعة أنواع بشرح مبسّط مع مثال واقعي وسطر T-SQL لكل واحد.
*نبذة مختصرة*
القفل = آلية تمنع تعارض العمليات المتزامنة لتحافظ على سلامة البيانات.
فيه أقفال قراءة تسمح بالمشاركة، وأقفال كتابة تمنع غيرك حتى تنهي.
درجة الدقّة تختلف: صف، صفحة (بلوك)، أو جدول كامل. كلما كبر النطاق، قلّ التوازي.
اختيار القفل الصحيح يوازن بين الأمان والأداء ويقلّل احتمالات الـdeadlock.
1) Shared Lock (S)
الفكرة: يسمح لعدّة جلسات تقرأ نفس السجل/النطاق، لكن بدون تعديل.
تشبيه: ناس كثير يطالعوا نفس الملف في المكتبة، بس ما حد يكتب عليه.
مثال واقعي: شاشة تقارير تعرض طلبات اليوم لعدّة مستخدمين.
T-SQL مختصر:
2) Exclusive Lock (X)
الفكرة: قفل للقراءة+الكتابة، ويمنع أي قفل آخر على نفس المورد.
تشبيه: شخص أخذ الملف لغرفة التحرير—لا أحد يلمسه حتى يرجّعه.
مثال واقعي: تحديث سعر الطلب رقم 123.
T-SQL:
3) Update Lock (U)
الفكرة: نية تحديث تبدأ بقفل (U) لمنع تشابك القرّاء الذين سيحوّلون إلى X لاحقًا. يقلّل الـdeadlock.
تشبيه: حاطط “حجز” على الملف لأنك بتعدّل بعد ما تراجع.
مثال واقعي: الخدمة تقرأ السطر ثم تقرر تعدله لو تحقق شرط.
T-SQL:
4) Schema Lock
الفكرة: يحمي بنية الكائنات (أعمدة/فهرس) أثناء التغييرات أو أثناء استخدامها.
تشبيه: قفل باب غرفة السيرفر وقت تبديل الرفوف.
مثال واقعي: إضافة عمود جديد في جدول ضخم.
T-SQL:
5) Bulk Update Lock (BU)
الفكرة: لعمليات الإدخال الضخمة لتقليل عدد الأقفال ورفع السرعة.
تشبيه: بدل ما تعطّي تصريح دخول لكل شخص، تفتح ممر خاص لمجموعة كبيرة.
مثال واقعي: استيراد 500 ألف سطر دفعة واحدة.
T-SQL:
6) Key-Range Lock
الفكرة: يقفل نطاق مفاتيح في الفهرس لمنع “الصفوف الشبحية” ضمن العزل SERIALIZABLE.
تشبيه: تحجز الأرقام من 100 إلى 200 في دفتر التذاكر؛ ما حد يضيف بينها.
مثال واقعي: تقرير يراجع الطلبات بين رقمين ويضمن ما ينضاف صف جديد داخل النطاق أثناء العملية.
T-SQL:
7) Row-Level Lock
الفكرة: يقفل صفًا واحدًا فقط؛ أعلى درجة توازي.
تشبيه: تحجز ملفًا واحدًا من الرف، والباقي متاح.
مثال واقعي: تحديث حالة طلب محدد بدون التأثير على باقي الطلبات.
T-SQL:
8) Page-Level Lock
الفكرة: يقفل صفحة بيانات (بلوك) فيها عدة صفوف؛ وسط بين الصف والجدول.
تشبيه: تغلق رفًا كاملًا بدل ملف واحد.
مثال واقعي: تحديثات متجاورة كثيرة تجعل قفل الصفحة أوفر من آلاف أقفال صفوف.
T-SQL:
9) Table-Level Lock
الفكرة: يقفل الجدول كله؛ بسيط لكنه يقلّل التوازي بقوة.
تشبيه: “مغلق للصيانة” على باب القاعة كاملة.
مثال واقعي: إعادة حسابات أو أرشفة على كامل الجدول خارج أوقات الذروة.
T-SQL:
لمحة اختيار سريعة
قراءة فقط ➜ S
قراءة بنية تعديل لاحقًا ➜ U ثم X
تحديث سطر محدد وكثير مستخدمين ➜ ROWLOCK
إدخال ضخم ➜ BU + TABLOCK
منع صفوف جديدة ضمن نطاق قرأته ➜ Key-Range (مع SERIALIZABLE)
تغيير هيكل الجدول ➜ Schema
ضغط أقفال كثيرة متجاورة ➜ PAGLOCK، وآخر الحلول TABLOCK
سؤال تأكيد واحد:
لو عندك إجراء يقرأ صفًا، يتأكد من شرط، ثم قد يحدّثه—أي تلميح تختاره لتقليل الـdeadlock: HOLDLOCK فقط، أم UPDLOCK, HOLDLOCK؟ ولماذا؟
*نبذة مختصرة*
القفل = آلية تمنع تعارض العمليات المتزامنة لتحافظ على سلامة البيانات.
فيه أقفال قراءة تسمح بالمشاركة، وأقفال كتابة تمنع غيرك حتى تنهي.
درجة الدقّة تختلف: صف، صفحة (بلوك)، أو جدول كامل. كلما كبر النطاق، قلّ التوازي.
اختيار القفل الصحيح يوازن بين الأمان والأداء ويقلّل احتمالات الـ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؟ ولماذا؟
❤2
🎯 كيف يُنفّذ استعلام SQL داخل قاعدة البيانات؟
نفترض أن المستخدم كتب الاستعلام التالي:
🔍 لنرى كيف قاعدة البيانات تتعامل مع هذا الطلب خطوة بخطوة:
✅ الخطوة 1: نظام النقل (Transport Subsystem)
أول ما يوصل الاستعلام للسيرفر، يدخل على "نظام النقل" وهو المسؤول عن:
فتح الاتصال بين المستخدم وقاعدة البيانات.
التحقق من الهوية (Authentication).
التأكد من صلاحيات المستخدم (Authorization).
🧪 مثال واقعي: تخيل أنك فتحت تطبيق البنك وسألت عن رصيدك... لازم النظام يتأكد إنك أنت فعلاً صاحب الحساب قبل ما يجاوبك.
✅ الخطوة 2: معالج الاستعلام (Query Processor)
الآن يبدأ "عقل" قاعدة البيانات في التحليل:
🔹 المُحلّل اللغوي (Parser): يفكك الاستعلام إلى أجزائه (SELECT، FROM، WHERE...) ويتأكد ما فيه أخطاء في الكتابة.
🔹 المُحسّن (Optimizer): يتأكد من أن الجداول موجودة، ويبحث عن أفضل طريقة لتنفيذ الاستعلام بأقل تكلفة (يعني أسرع وأقل استخدام للموارد).
🧪 مثال واقعي: لو طلبت من جوجل "مطاعم بيتزا قريبة"، فهو يحاول يجيب النتائج بأقرب وأسرع طريقة بناءً على موقعك.
✅ الخطوة 3: محرك التنفيذ (Execution Engine)
بعد ما يتم إعداد "خطة التنفيذ"، يتم إرسالها إلى هذا المحرك لتنفيذها فعلياً.
🔸 ينفّذ العمليات خطوة بخطوة.
🔸 يستدعي البيانات المطلوبة من وحدة التخزين.
🔸 يجمّع النتائج ويرجعها للمستخدم.
🧪 مثال واقعي: كأنك طلبت أوردر من مطعم، والمطبخ بدأ يجهّز الطلب قطعة قطعة ويرسله لك جاهز في النهاية.
✅ الخطوة 4: محرك التخزين (Storage Engine)
هنا تُنفّذ الأوامر على مستوى الملفات والبيانات الفعلية:
🔸 مدير المعاملات: يضمن تنفيذ سليم وآمن.
🔸 مدير الأقفال: يمنع التعارض بين عدة مستخدمين.
🔸 مدير الذاكرة المؤقتة: يتحقق إذا البيانات جاهزة في الذاكرة أو لا.
🔸 مدير الاسترجاع: يسترجع البيانات لو حصل خطأ أو انقطع التيار.
🧪 مثال واقعي: المحاسب داخل الشركة ما يفتح أي خزنة إلا بإذن، ويتأكد ما في تعارض بين طلبين بنفس الوقت، ويحتفظ بسجل كامل للعمليات.
💬 سؤالك الآن: هل كنت تتخيل أن استعلام SQL بسيط يمر بكل هذه المراحل المعقّدة؟ 😄
#SQL #تصميم_الأنظمة #مطورون #تعلم_البرمجة #Backend #SystemDesign #Database
نفترض أن المستخدم كتب الاستعلام التالي:
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
❤1
الصورة توضح 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)
🔹 يستخدم لتخزين وتجميع النصوص أو الكلمات بسرعة، مثل القواميس، أو نظام الإكمال التلقائي.
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)
🔹 يستخدم لتخزين وتجميع النصوص أو الكلمات بسرعة، مثل القواميس، أو نظام الإكمال التلقائي.
❤4
https://www.guru99.com/er-diagram-tutorial-dbms.html
من افضل المواقع عالمياً لتعلم قواعد البيانات بشكل احترافي
من افضل المواقع عالمياً لتعلم قواعد البيانات بشكل احترافي
Guru99
Entity Relationship (ER) Diagram Model with DBMS Example
What is the ER Model? The ER or (Entity Relational Model) is a high-level conceptual data model diagram. Entity-Relation model is based on the notion of real-world entities and the relationship betwee
انواع المفاتيح : ( سيتم انزال الترجمة عند التفرغ لذلك )
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
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