Professional Documents
Culture Documents
Theoretical Database2 Lec 6
Theoretical Database2 Lec 6
نظري
في هذه المحاضرة سنكمل حديثنا عن الفهارس حيث أننا سنتعرف على الفهرس
الكثيف Dense indexوالفهرس االجوف sparse indexوالفهارس متعددة
المستويات multi-levelوالفهارس من نوع Bitmapوفهارس التقطيع hash index
كما أننا سنتحدث عن B-treeوB+ tree
1
قواعد معطيات | 2د .روان قرعوني
𝟎𝟎𝟏
= 𝐤𝐜𝐨𝐥𝐁 𝐟𝐨 𝐫𝐞𝐛𝐦𝐮𝐍 𝟓𝟐 =
𝟒
نريد البحث عن موظف ما (دون فهارس) ,فأسوأ األحوال نحتاج الى 25Blockمن أجل ايجاد موظف ما. ▪
لنفترض انه قمت ببناء فهرس على idمثال ,وحقل الفهرس مؤلف من eidحجمه ] [4 byteو pointerحجمه [ 12
] byte
𝟐𝟏𝟓
= 𝐤𝐜𝐨𝐥𝐛 𝐧𝐢 𝐲𝐫𝐭𝐧𝐞 𝐱𝐞𝐝𝐧𝐢 𝐟𝐨 𝐫𝐞𝐛𝐦𝐮𝐍 𝒚𝒓𝒕𝒏𝒆 𝟐𝟑 =
𝟔𝟏
𝟎𝟎𝟏
= 𝐤𝐜𝐨𝐥𝐛 𝐟𝐨 𝐫𝐞𝐛𝐦𝐮𝐍 𝒌𝒄𝒐𝒍𝒃 𝟒 =
𝟐𝟑
أي ان جدول الفهرس يحوي على 4 blockوكل blockيحوي على .32 entry
2
/ITE.RBCs
قواعد معطيات | 2د .روان قرعوني
بأسوء األحوال :نحتاج لـ 5 blockألن الفهرس عبارة عن 4 blockأي أنني سأحتاج للبحث ضمن هذه الـ 4باإلضافة
إلى الـ Blockضمن الجدول األساسي.
مالحظة :عند اجراء تعديل على الجدول األساسي نقوم بالتعديل أيضا على الفهرس الذي قمنا
ببنائه
100 .
. Block 4
.
100
الحظ أن كل رقم له مقابل بالفهرس أي أن كل entryله Keyوهذا سبب تسمية الفهرس بالفهرس الكثيف.
3
/ITE.RBCs
قواعد معطيات | 2د .روان قرعوني
مالحظة:
Sparse index -من الممكن أن يبنى على الجدول مباشرةً او يبنى على فهرس
-الكلفة األساسية هي كلفة القراءة من الهارد (عدد الـ blockالذي نجلبه من الهارد )
-ما نتعلمه في هذه المحاضرة ليس الذي نقوم ببناءه بإيدينا ( create indexبانواعه DBMS , )...
يحدد بنية الفهرس بناءً على الـ Dataالموجودة لديه وعدد عمليات اإلدخال حيث انه يملك
خوارزميات خاصةً يحدد من خاللها بنية الفهرس بحيث يسرع العمل بالفهرس الذي تبنيه مثال قمت
ببناء فهرس على idفي هذه الحالة هو يختار البنية المناسبة ليسرع العمل.
أي عندما يرى مثأل أن كلفة القراءة من Dense indexأصبحت مكلفةً مثلها مثل القراءة من
الجدول من الممكن أن يقوم ببناء sparse indexولكن لماذا اليقوم ببناء sparse indexمباشرةً ؟
ألن ذلك سوف يكلف حجوم تخرين إضافية(كل فهرس له حجم تخرين) وبالتالي تكلفة إضافية.
-الفرق بين الفهرس األجوف وبين الفهرس الكثيف هو أن الفهرس الكثيف ال Keysالخاصة به
مرتبة.
4
/ITE.RBCs
قواعد معطيات | 2د .روان قرعوني
فهرس 1
الحظ أن كل entryمن الفهرس التاني يؤشر على مجموعة entryمن الفهرس األول( كل pointerمن الفهرس
الثاني يؤشر على Blockمن الفهرس األول )
-بالفهرس 2يوجد لدينا entry 32ألن لدي block 32بالفهرس ( 1كل entryيؤشر على )Blockوبالتالي عدد
𝟐𝟑
blockبالفهرس 2هي 𝟏 =
𝟐𝟑
وبالتالي كلفة البحث عن موظف ما هي بأسوء األحوال ( 3 blockيجيب الـ blockمن الفهرس 2ومنه نحصل على الـ
blockمن الفهرس 1وبعدها نحصل على الـ blockمن الجدول األساسي).
5
/ITE.RBCs
قواعد معطيات | 2د .روان قرعوني
inner index
ومن محاسن استخدام هذا النوع من الفهارس هي أن عملية إعادة تنظيم الفهرس تجري بشكل الي عند القيام بعمليات
اإلضافة والحذف وتتطلب هذه العملية تغييرات بسيطة ومحلية وال داعي إلعادة تنظيم الملف.
بما أن البنية في هذه الفهارس هي بنية شجرية سوف نتحدث عن B-treeو B+ - Treeولنفهمها بشكل أفضل سنبدأ
بالحديث عن M-May search tree
6
/ITE.RBCs
قواعد معطيات | 2د .روان قرعوني
3
6 20
0
0
4 9 15 30
Key2 ▪
Children3 ▪
7
/ITE.RBCs
قواعد معطيات | 2د .روان قرعوني
.1
10 20
نالحظ أنه ليس هناك تقييد ,بعض العقد تحوي على مفتاح واحد فقط وبعضها لها 2ابن ....,
كما رأينا سابقا للفهرس keyو pointerعلى الجدول فإذا أردنا عكس هذا المفهوم على الشجرة كيف سيصبح شكل
الورقة؟!
10 20
حيث أن k1و k2هي المفاتيح ( في مثالنا بالنسبة للعقدة الجذر ) K2=20 , k1=10و cp3,cp2,cp1هي مؤشرات لألبناء
و cp3هو مؤشر على 11 15 و cp2هو مؤشر على العقدة 5 7 )في مثالنا cp1هو مؤشر على العقدة
( 22 25 العقدة
8
/ITE.RBCs
قواعد معطيات | 2د .روان قرعوني
B-tree
هي M-Way search treeولكن مع بعض القيود وهي:
.1األوراق leaf Nodeيجيب ان تكون في مستوى واحد
.2كل عقدة Nodeتحوي على األقل M/2 – 1مفتاح وعلى األكثر M-1باستثناء الجذر ليس له حد أدنى من
M-1مفتاح. الممكن أن يحوي من 1
.3نبدأ بخلق األبناء من األدنى الى األعلى
واالن دعونا نأخذ مثال لنفهم كيف DBMSيقوم ببناء B-treeلفهرس معين عن طريق ادخاالت:
(يبدأ الجدول بفهرس مبتدئ وبعدها يكبر الجدول وتتغير بنية الفهرس)
أول ما انشأ الجدول بعمل create indexوبعدها يكبر الفهرس او يصغر حسب اإلدخاالت أو الحذف
يكبر الفهرس إضافة record
يصغر الجدول ويصغر الفهرس حذف record
مايهمنا هو فهم البنية العامة للـ B- treeوالتهمنا اإلضافة والحذف
فرضا أدخلنا إلى الجدول 10و 20و (3 record) 30 ▪
نذكر بأن حالة : 4-Way لتبنى أول ورقة من الفهرس (سنأخذ حالة : ) 4-way
-في حال ادخلنا 40في هذه الحالة اليمكن إضافتها للورقة ألن اقصى حد هو 3عندما نرفع اخر عنصر
30
9
/ITE.RBCs
قواعد معطيات | 2د .روان قرعوني
30
30 70
ولكن كونه غير مسموح فقط لـ 3 5 10 20 25 -في حال ادخلنا ( 5سوف تأتي قبل 10أي تصبح
عندها ترتفع 20والسهم األول يؤشر على ماقبلها والسهم الثاني يؤشر على مابعدها ( )25ويصبح الشكل:
20 30 70
10
/ITE.RBCs
قواعد معطيات | 2د .روان قرعوني
20 30 70
ولكن كونه غير مسموح يجب ان 5 10 15 18 -في حال ادخلنا ( 18سوف تأتي بعد 15أي تصبح
وهذا غير مسموح لذلك نذهب لألعلى بمستوى جديد 15 20 30 70 ترتفع 15ولكن اصبح لدينا
ماقبلها 15 20 بحيث ترتفع 30و السهم األول يؤشر على
70 والسهم الثاني يؤشر على مابعدها
نكرر :المبدأ الذي يهمنا هو أن الفهرس تشكل باألول وبعدها يكبر وتكبر B-treeوذلك عندما تزداد ال Data
إلى االن أخذنا آليتين للفهارس وهي فهارس 1 levelو فهارس Multilevelولكن متى نلجأ لهما
؟!
كالهما مفيد ولكن لكل واحد حالة معينة ,فمثال إذا كان حجم الجدول قليل يكون فهرس 1 levelمقبول ولكن عندما
تزداد recordsيصبح إعادة تنظيم للملف أكثر )كل عملية إضافة /حذف /تعديل تؤدي إلى إعادة بناء الفهرس من األول
ليزداد فعاليته(
11
/ITE.RBCs
قواعد معطيات | 2د .روان قرعوني
بينما بال Multilevelعلى الرغم من أن حجم التخزين أكبر ولكن عند اإلضافة /الحذف تحدث بأماكن محددة وبالتالي
اليتم إعادة البناء للفهرس ألنه أساساً يبنى صغير ثم يكبر وبالتالي :
من مساوئ فهارس 1 level
-يتناقص األداء كلما كبر الملف حيث يؤدي ذلك إلى ربط عدد من الكتل اإلضافية overflow block
-إعادة تنظيم للملف بأكمله بشكل دوري.
B+-tree
هي نفسها B-treeولكن المؤشرات ليست بكل عقدة وإنما باألوراق فقط (الـ keyسوف يتكرر حتى يصل إلى األوراق)
بنفس مثالنا السابق نعدل عليه لصبح B+-tree
30
15 20
30 70
5 10 15 18 20 25 30 40 60 70 80
من إيجابيات : B-treeفي بعض األحيان نصل إلى المفتاح الذي نبحث عنه قبل الوصول إلى األوراق
ولكن التعتبر إيجابية قوية ألن هذه العناصر عددها قليل جداً مقارنة باألوراق.
ومن مساوئ B-treeالتي حلتها B+-treeهو أن العقد غير األوراق تحتاح إلى مكان تخزين أكبر وبالتالي عدد العناصر في
العقدة أقل وبالتالي عمق الشجرة B-treeاكبر منه بـ B+-tree
12
/ITE.RBCs
قواعد معطيات | 2د .روان قرعوني
-الحظ أن B-treeالحجم أكبر النها تحوي على مؤشرات مباشرةً لل (kp) record
-سرعة قراءة B+-treeأكبر الن الحجوم فيها ليست كبيرة
13
/ITE.RBCs
قواعد معطيات | 2د .روان قرعوني
Bitmap index
يطبق على الواصفات التي لها مجال محدد من القيم.
مثال :جنس اإلنسان ) / (F,Mالحالة العائلية ....... /
القيم المخزنة في فهرس Bitmapهي عبارة عن array of bitsطولها بعدد التسجالت في الجدول ,من أجل القيمة V
للواصفة تكون قيمة Bitmapمؤلفة من مجموعة من البتات بحيث يكون البت الخاص بالتسجيلة رقم 1يساوي 1إذا
كانت قيمة الواصفة في هذه التسجيلة تساوي Vوإال تساوي . 0سنأخذ مثال للتوضيح
ليكن لديك الجدول التالي قم ببناء فهرس من النوع Bitmapعلى الحقل genderوفهرس اخر على الحقل : level
:F
0 0 1 0 1 1
14
/ITE.RBCs
قواعد معطيات | 2د .روان قرعوني
: L2
0 1 0 0 0 0
: L3
0 0 0 0 1 0
: L4
0 0 0 0 0 1
: L5
0 0 0 0 0 0
مالحظة :فهارس Bitmapمفيدة عندما يكون لدي عمليات not ,and ,orكثيرة
مثال:
عندما نريد تنفيذ استعالم معين على الجدول في المثال السابق:
-نريد الموظف الذي جنسه Fومستواه الوظيفي هو , l1نطبق عملية andبين Bitmapللنوع Fو Bitmap
للمستوى : l1
()001011( and )101100
001000
15
/ITE.RBCs