150 likes | 269 Views
Lecture 10 نگهداري فايلهاي ايندکس دار Maintenance of Indexed files (Sections 7.5-7.6). نگهداري فايلهاي ايندکس دار Maintenance of Indexed files. نگهداري فايلهاي ايندکس دار چه مسائلي را بهمراه دارد؟ چه عمل ياتي روي فايل يا ايندکس آن بايستي درنظرگرفت ؟
E N D
Lecture 10نگهداري فايلهاي ايندکس دارMaintenance of Indexed files (Sections 7.5-7.6)
نگهداري فايلهاي ايندکس دارMaintenance of Indexed files نگهداري فايلهاي ايندکس دارچه مسائلي را بهمراه دارد؟ چه عملياتي روي فايل يا ايندکس آن بايستي درنظرگرفت؟ مشکلات ايندکس هاي بزرگتر از فضاي حافظه چيست؟ موارد استفاده ي ايندکس هاي متعدد چيست؟ ساختارايندکس هايثانوي چگونه است؟ چه عملياتي روي ايندکس ثانوي بايستي درنظرگرفت؟
نگهداري فايلهاي ايندکس دارMaintenance of Indexed files نگهداري فايلهاي ايندکس دارچه مسائلي را بهمراه دارد؟ چه عملياتي روي فايل يا ايندکس آن بايستي درنظرگرفت؟ • ايجاد اوّليه ايندکس به همراه خود فايل • آوردن ايندکس در حافظهRAM قبل از استفاده از فايل • بازنويسي ايندکس روي ديسک بعد از استفاده از فايل • ايجاد رکوردها • حذف رکوردها • به روز آوردن رکورد ها(Update)
نگهداري فايلهاي ايندکس دار • ايجاد اوّليهايندکس به همراه خود فايل: • هنگام ايجاد فايل (Create File). • بايستي ايجاد ايندکس مربوطه را نيز پيش بيني نمود. • اگر چه در آغاز هر دو تهي از داده ها (Data) مي باشند. • آوردنايندکس در حافظهRAMقبل از استفاده از فايل: • هنگام شروع استفاده از فايل (Open File). • بايستي ايندکس نيز باز شده. • داده هاي ايندکس به حافظه RAM آورده شوند (Load).
نگهداري فايلهاي ايندکس دار • بازنويسي ايندکسروي ديسک بعد از استفاده از فايل: • در پايان استفاده از فايل (Close File)، • بايستي داده هاي ايندکس نيز در فايل ايندکس نوشته شده (Rewrite)، • و سپس هر دو فايل بسته شوند. مديريت صحت (به روز بودن) فايل ايندکس: • براي جلوگيري از حوادث پيش بيني نشده (مثل FailurePower). • بايستي يک علامت (Flag) در آغاز فايل ايندکس پيش بيني شود. • تا وقتي که ايندکس به روز نشده است اين Flag در حالت "ON" قرار داشته باشد. (کي؟) • هنگام استفاده مجدد اگرFlag=ON باشد بايستي ايندکس بازسازي شود.(چرا؟)
0 1 2 3 4 5 6 7 8 9 …… Index file شيفت کليدها ايجاد محل براي کليد جديد نگهداري فايلهاي ايندکس دار • ايجادرکوردها: • هنگام ايجاد يک رکورد جديد در فايل اين رکورد در آخر فايل اضافه مي شود • ولي کليدمربوط به اين رکورد بايستي در محل مناسب خود در ايندکس اضافه شود (Insert) • بطوري که همواره کليدها در ايندکس مرتّب شده باشند (ُSorted)
0 1 2 3 … حذف Index file شيفت نگهداري فايلهاي ايندکس دار • حذفرکوردها: • هنگام حذف يکرکورد در فايل، • فضاي ايجاد شده در فايل به Avail list اضافه مي شود. • ولي در مورد ايندکس اينطور نيست، • دو راه حل وجود دارد: • يا کليد مربوطه از ليست کليدها حذفمي شود. • و کليدهاي بعد از آن يک مرحله شيفت داده مي شوند. • يا فقط در محل کليد مربوطه علامت گذاري مي شود(deleteflag) .
نگهداري فايلهاي ايندکس دار • به روزآوردن رکوردها (Update): هنگام به روز آوردن يک رکورد داده: • در صورت تغيير طول رکورد بايستي اوّل مانند حالت حذف، • و سپس مانند حالت اضافه نمودن رکورد عمل کرد. • در غير اينصورت در همان مکان قبلي رکورد به روز مي شود. اما در هر حال در مورد ايندکس مربوطه: • اگر مقدارکليد تغيير کرده باشد بايستي مانند حالت حذف، • و سپس مانند حالت اضافه نمودن رکورد عمل کرد. • در غير اين صورت هيچ عملي لازم نمي باشد.
ايندکس هاي بزرگتر از فضاي حافظه اگرايندکس بزرگتر از فضاي حافظه (RAM) باشد چه اشکالاتي دارد؟ درصورتيکه امکان آوردن کل ايندکس به حافظه RAM نباشد: • براي جستجوي دودئي هرکليدها چندين دسترسي به ديسک خواهيم داشت! • هنگام ايجاد يا حذف هرکليد، عمل شيفت باعث چندين دسترسي به ديسک خواهد شد! در اين موارد چه راه حل هايي وجود دارد؟ کداميک از مزاياي يک ايندکس ساده حتّي روي ديسک نيزبه قوت خود باقيست؟ • به هرحال امکان جستجوي دوديي را براي فايلي با رکورد متغير فراهم مي کند. • حتّي روي ديسک هم، مرتّب سازي آن کم هزينه تراز فايل اصلي مي باشد.(چرا؟) • به هرصورت از ايجاد نشانگرهاي سرگردان جلوگيري ميکند. (چرا؟)
استفاده از ايندکس هاي متعدد موارد استفاده ي ايندکس هاي متعدد چيست؟ • ايجاد چند مسير با کليدهاي مختلف برايدسترسي به داده هاي يک فايل. • براي هر فايل مي توانيم يک ايندکس اصلي (Primary) و چندايندکس ثانوي(Secondary)تعريف کنيم. مثال: • يک فايل شامل اطلاعات مربوط به آهنگ ها در نظر ميگيريم. • ايندکس اصلي به کمک دو فيلد (Label + ID no.) تعريف شده است. • ميخواهيم امکاندسترسياز طريق نام سازنده (Composer) را نيز بدهيم. • بايستي يکايندکس ثانويروي اين فيلد تعريف کنيم.
استفاده از ايندکس هاي متعدد ايندکس اصلي به کمک دو فيلد (Label+ID no.) تعريف شده است.
استفاده از ايندکس هاي متعدد چگونه امکاندسترسياز طريق نام سازنده (Composer) را بدهيم؟ ساختار متداول يکايندکس ثانوي چگونه است؟ ساختار متداول: • استفاده از کليد اصلي بجايByte Offsetرکوردها. • اين روش را "Postponing the binding" يا به تاخير انداختن اتصال مي گويند. مزيت اين ساختار چيست؟ • اعمال مربوط به ايجاد، حذف يا به روز نمودن رکوردهارا ساده تر،سريعتر و مطمئن تر مي نمايد.(چرا؟)
عمليات روي ايندکس ثانوي چه عملياتي روي ايندکس ثانوي بايستي درنظرگرفت؟ • ايجاد رکورد: • هنگام ايجاد رکورد در فايل و ايندکس اصلي، • بايستي کليد ثانوي نيز در ايندکس ثانوي ايجاد شود. • بايستي محتواي کليد به فرم کانونيک (Canonical Form) ثبت شوند.(چرا؟) • (مثلا با حروف کاپيتال و با طول مشخص ) • در صورت ووجود مقادير تکراري براي کليد ثانويبهتر است آنها به ترتيب کليد اصلي مرتّب (Sort) شوند.
عمليات روي ايندکس ثانوي • حذف رکورد: • هنگام حذف رکورد قاعدتا بايستي کليه ايندکس ها به روز شوند. • اما اگر فايل ايندکس هايمتعدد داشته باشد، اين کار پرهزينه خواهد بود.(چرا؟) روش ديگر: • فقط فايل اصلي و ايندکس اصلي به روز مي شوند و کاري با ايندکس هاي ثانوي نداريم. • هنگام استفاده از ايندکس ثانوي چک مي کنيم که رکورد مربوطه از ايندکس اصلي حذف نشده باشد. • اگر تعداد رکوردهاي حذف شده زياد باشد، بايستي ايندکس ثانوي باز سازي شود.(چرا؟)
عمليات روي ايندکس ثانوي • به روز آوردن رکوردها: حالت اول: مقدار کليد ثانوي تغيير کرده: • بايستي ايندکس ثانويبه روزآورده و دوباره مرتّب شود. حالت دوم: مقدار کليد اصلي تغيير کرده: • بعد از به روزآوردن ايندکس اصلي و مرتّب نمودن آن، • بايستي ايندکس ثانوي نيز به کليد اصلي جديد اشاره کند و دوباره مرتّب شود. حالت سوم: فقط فيلدهاي غير کليدي تغيير کرده اند: • معمولا عملي روي ايندکس ها لازم نيست. (چرا؟) • مگر اينکه طول رکورد تغيير کرده باشد و محل آن در فايل جابجا شود. (چرا؟) • در نتيجه Offset در ايندکس اصلي تغيير خواهد کرد.