790 likes | 1.07k Views
Indexing and Hashing. پایگاه داده پیشرفته. قمرناز تدین. Indexing and Hashing. Basic Index Concepts Ordered Indices B + -Tree Index Files Hashing Index Definition in SQL Multiple-Key Access Bitmap Indices. search-key. pointer. Basic Index Concepts.
E N D
Indexing and Hashing پایگاه داده پیشرفته قمرناز تدین
Indexing and Hashing • Basic Index Concepts • Ordered Indices • B+-Tree Index Files • Hashing • Index Definition in SQL • Multiple-Key Access • Bitmap Indices
search-key pointer Basic Index Concepts • ایندکسها باعث افزایش سرعت دستیابی به اطلاعات در جدول می شوند. • card catalog in a library (author, title, subject) • به مجموعه ای از یک یا چند خصیصه که برای جستجوی رکوردها در جدول استفاده می شوند، کلید جستجو گفته می شود. • در ساده ترین شکل، فایل ایندکس شامل رکوردهایی به شکل زیر است: • به چنین رکوردی، ورودی ایندکس گفته می شود.
Basic Index Concepts, Cont. • فایل ایندکس یک فایل است و بسیاری از مشکلات فایلهای داده را دارد. • فایلهای ایندکس معمولا بسیار کوچکتر از فایل اصلی هستند. • 10% - 25% • دو نوع اصلی از ایندکسها وجود دارد: • ایندکسهای مرتب: ورودی های ایندکس به صورت مرتب براساس کلید جستجو ذخیره می شوند. • ایندکس های hash: کلید جستجو با استفاده از یک ”تابع hash“ به صورت یکنواخت در باکتها توزیع شده است.
Index Evaluation Metrics متریکهای ارزیابی ایندکس • زمان درج، حذف و بروزرسانی (OLTP) پردازش تراکنش برخط • زمان دسترسی (DSS) برای: • پرس و جوهای نقطه ای: رکوردهایی با مقدار خاص یک خصیصه • پرس و جوهای دامنه: رکوردهایی با مقدار خصیصه در دامنه معین • سربار حافظه
Reminder Database applications can be broadly classified into transaction-processing and decision-support systems. • Transaction-processing systems are systems that record information about transactions, such as product sales information for companies, course registration and grade information for universities. • Decision-support systems aim to get high-level information out of the detailed information stored in transaction-processing systems, and to use the high-level information to make a variety of decisions. Decision-support systems help managers to decide what products to stock in a shop, what products to manufacture in a factory, or which of the applicants should be admitted to a university.
Ordered Indices • ایندکسی که کلید جستجوی آن، براساس ترتیب اطلاعات فایل داده باشد ایندکس اولیه نامیده می شود. • ایندکس خوشه بندی هم گفته می شود. • کلید جستجوی ایندکس اولیه معمولا کلید اصلی است. • ایندکسی که کلید جستجوی آن برمبنای ترتیب فایل داده نباشد، ایندکس ثانویه گفته می شود. • همچنین ایندکس غیرخوشه بندی هم گفته می شود. • به فایل مرتب با ایندکس اولیه، index-sequential file گفته می شود.
Dense Index Files • به ایندکسی که برای هر مقدار کلید جستجو در فایل داده شامل رکورد ایندکس باشد، ایندکس چگال گفته می شود.
Dense Index Files, Cont. • برای یافتن رکورد(ها)ی که مقدار کلید جستجوی آن K است: • رکورد ایندکس با مقدار کلید جستجوی K را پیدا کن. • اشاره گر از رکورد ایندکس به رکورد(ها)ی داده را دنبال کن. • برای حذف یک رکورد: • مکان رکورد را در فایل داده تعیین کن. • رکورد را از فایل داده حذف کن. • اگر رکورد حذف شده تنها رکورد با مقدار کلید جستجوی موردنظر باشد، کلید جستجو از ایندکس حذف میشود. • برای درج رکورد: • بااستفاده از مقدار کلید جستجو، در ایندکس جستجو کن. • اگر مقدار کلید جستجو در ایندکس وجودندارد، آن را درج کن. • رکورد را در فایل داده درج کن. (در مکان صحیح) • اشاره گری از ورودی ایندکس به رکورد داده ایجاد کن.
Sparse Index Files • ایندکسی که فقط برای برخی مقادیر کلید جستجو شمل رکوردهای ایندکس باشد، ایندکس اسپارس است. • معمولا برای هر بلاک فایل داده یک ورودی ایندکس وجود دارد.
Sparse Index Files, Cont. • برای یافتن رکوردی با مقدار کلید جستجوی K: • رکورد ایندکس یا یزرگترین مقدار کلید جستجو کمتر یا مساوی K را پیداکن. • در فایل به صورت ترتیبی از رکوردی که رکورد ایندکس اشاره میکند جستجو کن. • برای حذف رکورد: • محل رکورد در فایل داده را تعیین کن. • رکورد را حذف کن. • اگر رکورد حذف شده تنها رکورد با مقدار کلید جستجوی معین است و ورودی برای آن در ایندکس وجود دارد، ورودی ایندکس را با مقدار کلید جستجوی بعدی فایل داده جایگزین کن. اگر مقدار کلید بعدی قبلا در ایندکس درج شده است، رکورد را از ایندکس حذف کن. • برای درج رکورد: (اگر برای هر بلاک یک ورودی ایندکس وجود داشته باشد) • با استفاده از مقدار کلید جستجوی رکورد، در ایندکس جستجو کن. • اگر ورودی ایندکس به بلاکی اشاره میکند که فضای خالی دارد، رکورد را درجای مناسب در بلاک درج کن. • اگر ایندکس به بلاک پر اشاره میکند، یک بلاک جدید تخصیص بده و اولین مقدار کلیدی که در بلاک جدید دیده می شود را به ایندکس اضافه کن.
Sparse Index Files, Cont. • مزایا نسبت به ایندکسهای چگال: • نیاز به فضای کمتری دارد. • نگهداری کمتری برای درج و حذف نیاز دارد • معایب: • جستجوی رکورد کندتر است به خصوص زمانی که برای یک ورودی ایندکس بیش از یک بلاک وجود داشته باشد.
Multilevel Index • یک روش برای افزایش کارایی این است که هکه بلاکهای ایندکس در حافظه نگهداری شوند ولی برخی اوقات ایندکس حجم زیادی دارد و این امکان وجود ندارد. • در چنین حالتی، ایندکس را می توان به صورت یک فایل ترتیبی در دیسک درنظر گرفت و یک ایندکس اسپارس برروی آن ایجاد کرد. • ایندکس خارجی: اسپارس • ایندکس داخلی: چگال یا اسپارس • اگر ایندکس خارجی هنوز حجم زیادی برای نگهداری در حافظه داشته باشد، سطح دیگری از ایندکس ایجاد می شود.
Multilevel Index, Cont. • با هر عمل درج یا حذف ممکن است لازم باشد ایندکسهای کلیه سطوح بروزرسانی شوند.
Secondary Indices • ایندکس ثانویه زمانی استفاده میشود که جدول با استفاده از کلیدی به جز آنچه مرتب شده است جستجو میشود. • Suppose account is sorted by account number, and • Searches are based on branch, or searching for a range of balances. • هر ورودی ایندکس اشاره دارد به: • رکورد واحدی با مقدار کلید جستجوی معین (کلید کاندیدا) • باکتی که شامل پوینترهایی به همه رکوردهایی است که مقدار کلید جستجوی معینی را دارند. (کلید غیر کاندیدا)
Index Classification • In summary, the indices we have considered so far are either: • Dense, or • Sparse • In addition, an index may be either: • Primary, or • Secondary • And the search key the index is built on may be either a: • Candidate key • Non-candidate key • secondary index must be dense; why?
Index Performance • اگرچه ایندکسها کارایی را افزایش میدهند ولی مشکلات زیر را هم دارند: • همه ایندکسها باید درصورت درج یا حذف بروزرسانی شوند. • با افزایش حجم فایل ایندکس، کارایی کاهش می یابد، زیرا بلاکهای سرریززیادی ایجاد می شوند و بنابراین سازماندهی مجدد ایندکس (حذف و بازسازی) لازم است. • پیمایش ترتیبی فایل با ترتیب ثانویه ممکن است پرهزینه باشد. در بدترین حالت هردسترسی رکورد ممکن است بلاک جدیدی از دیسک را بخواند. • بنابراین تعداد رکوردهایی که بازیابی می شوند یک حد بالا برای تعداد بلاک های داده ای است که در زمان پویش فایل در پرس و جوهای دامنه بازیابی میشوند.
B+-Tree Index Files • ایندکسهای درخت B+ نوعی از ایندکس چندسطحی هستند. • اشکال فایلهای ایندکس اسپارس و چگال متداول: • نیاز به سازماندهی مجدد به صورت دوره ای میباشد. • مزیت درخت B+: • با تغییرات کوچک محلی، بطور خودکار خودش را بازسازی میکند. • اشکال B+ سربار فضا، درج و حذف است. • مزایای روش از معایب آن بیشتر است
Example of a B+-tree • ساختار B+ با پترامتر n مشخص میشود که تعداد مقادیر و اشاره گرهایی است که یک گره میتواند داشته باشد. B+-tree for account file (n = 3)
Observations about B+-trees • هر نود معمولا یک بلاک دیسک است. بلاکهایی که از نظر منطقی نزدیک هستند الزاما ازلحاظ فیزیکی نزدیک نیستند. • مقدار n معمولا با مقادیر زیر تعیین می شود: • Block size • Search key size • Pointer size
Example of a B+-tree • همه مسیرها از ریشه به برگ طول مشابهی دارند. • تفاوتی بین زمان جستجوی ایندکس در بهترین و بدترین حالت وجود ندارد. • از این لحاظ متفاوت با ساختار hash است.
Example of a B+-tree • هر گره غیر ریشه حداقل نیمی از آن پر است. • Between n/2 and n pointers. • Between n/2 – 1and n –1 search key values.
Example of a B+-tree • ریشه حالت خاص است: • اگر ریشه برگ نباشد میتواند بدون توجه به n دارای دو فرزند باش. • اگر رشه برگ باشد و گره دیگری در درخت وجود نداشته باشد می تواند فقط یک مقدار داشته باشد و هیچ فرزندی نداشته باشد.
Another Example B+-tree for account file (n = 5)
B+-Tree Node Structure • ساختار گره (برگ یا داخلی): • Kiمقادیر کلید جستجو به ترتیب است. K1 < K2 < K3 < . . .< Kn–1 • Piاشاره گری است به: • فرزندان که میتواند در گره های غیر برگ، زیر درخت باشد یا • در گره های برگ رکوردها یا باکت های رکوردها باشد
Non-Leaf Nodes in B+-Trees • برای گره غیر درختی: • همه کلیدهای جستجو در زیردرختی که P1 اشاره میکند از k1 کوچکتر هستند. • برای 2 i n – 1 همه کلیدهای جستجو در زیردرختی که Pi اشاره میکند مقدارشان بزرگتر یا مساوی Ki–1 و کمتر از Ki است. • همه کلیدهای جستجو در زیردرختی که Pn اشاره میکند بزرگتر از Kn-1 هستند.
Leaf Nodes in B+-Trees • برای هر گره برگ: • اشاره گر Pi که 1<= i <= n–1 به یک رکورد با کلید Ki یا به باکتی از اشاره گرها به رکوردها اشاره میکند که کلید همه آنها Ki است. • Pn به برگ بعدی در دنباله کلید جستجو اشاره میکند.
Queries on B+-Trees • جستجو در درخت B+ • یافتن همه رکوردها با مقدار کلید جستجوی k: • Start with the root node • Examine the node for the smallest search-key value > k. • If such a value exists, call it is Kj, then follow Pjto the child node • Otherwise if k Kn–1, then follow Pn to the child node. • If the node is not a leaf, repeat the above procedure on that node. • Eventually reach a leaf node. • If for some i, key Ki = k, follow pointer Pito the desired record or bucket. • Otherwise no record with search-key value k exists.
Queries on B+-trees • Search examples: • Downtown • Perryridge • Newberry • All values between Mianus and Redwood (range query)
Queries on B+-Trees (Cont.) • در پردازش پرس و جو مسیری در درخت از ریشه به برگ جستجو می شود. • اگر K مقدار کلید جستجو در فایل باشد طول مسیر برابر logn/2(K).است. • گره به اندازه بلاک دیسک است (معمولا 4 کیلوبایت) بنابراین n معمولا حدود 100 است. (با فرض این که هر ورودی ایندکس 40 بایت باشد. • برای 1 میلیون مقدار کلید جستجو و n=100 حداکثر log50(1,000,000) = 4 گره دستیابی می شود. • برخلاف این، در درخت باینری با 1 میلیون مقدار کلید جستجو حدود 20 نود یا بلاک دستیابی می شود.
Updates on B+-Trees: Insertion • درج: گره برگی که کلید جستجو باید درآن باشد پیدا می شود • If the search-key value is already in the leaf node: • If the index is on a candidate key field then report an error. • The record is added to data file, and • If necessary, a pointer is inserted into the bucket (secondary index on a non-candidate key). • If the search-key value is not in the leaf node: • Add the record to the data file, and • Create a bucket if the index is a secondary index. • If there is room in the leaf node, insert the (key-value, pointer) pair. • Otherwise, split the node as discussed in the next slide.
Updates on B+-Trees: Insertion (Cont.) • Splitting a (leaf) node: • Examine the n (search-key value, pointer) pairs (including the one being inserted) in sorted order. • Place the first n/2 in the original node, and the rest in a new node. • Let the new node be p, and let k be the least key value in p. • Insert (k,p) in the parent of the node being split (recursively). • If the parent is full, split it and propagate the split further up. • Splitting nodes continues up the tree until a node is found that is not full. • In the worst case the root node is split increasing the height of the tree.
Updates on B+-Trees: Insertion (Cont.) B+-Tree before and after insertion of “Clearview”
Updates on B+-Trees: Deletion • حذف: • Find the record to be deleted, remove it from the data file and from the bucket (if necessary). • If there are no more records with the deleted search key then remove the search-key and pointer from the appropriate leaf node in the index. • If the node is still at least half full, then nothing more needs to be done. • If the node has too few entries, i.e., if it is less than half full, then one of two things will happen: • merging, or • redistribution
Updates on B+-Trees: Deletion • If the entries in the node and a sibling fit into a single node, then the two are merged into one node: • Insert all search-key values in the two nodes into a single node (the one on the left), and delete the other node. • Delete the pair (Ki–1, Pi), where Pi is the pointer to the deleted node, from its parent, recursively using the above procedure. • Otherwise redistribution occurs: • Move a pointer and search-key value to the node from a sibling so that both have more than the minimum number of entries. • Update the corresponding search-key value in the parent node.
Updates on B+-Trees: Deletion • If the root node has only one pointer after deletion, it is deleted and the sole child becomes the root. • Note that node deletions will cascade upwards until either: • a node with n/2 or more pointers is reached • redistribution with a sibling occurs, or • the root is reached.
Example of B+-Tree Deletion (Downtown) • Node with “Downtown” becomes underfull (actually empty, in this special case) and merged with its sibling. • Note that the removal of the leaf node did not result in its parent having too few pointers, so the deletions stopped.
Example of B+-Tree Deletion (Perryridge) • Node with “Perryridge” becomes under full and merged with its sibling. • As a result the “Perryridge” node’s parent became under-full, and was merged with its sibling (and an entry was deleted from their parent). • Root node then had only one child, and was deleted.
Example of B+-tree Deletion (Perryridge) • Parent of leaf containing “Perryridge” became under-full, and borrowed a pointer from its left sibling. • Search-key value in the root changes as a result.
B+-Tree File Organization • بخشی از مشکل تنزل کارایی فایل ایندکس را میتوان با B+ حل کرد. • بخشی از مشکل تنزل کارایی فایل داده را میتوان با B+ حل کرد. • گره های برگ در ساختار فایل B+ رکوردهای داده کامل را نگهداری میکند. • نیمی از گره های برگ باید پر شود. • درج و حذف مشابه B+ انجام می شود.
B+-Tree File Organization (Cont.) • باتوجه به این که رکوردها بزرگتر از اشاره گرها هستند حداکثر تعداد رکوردهایی که میتوان در برگ ذخیره کرد کمتر از تعداد اشارگرهای گره های غیر برگ است. • نتیجه: برگ بیشتر، سطوح بیشتر، فضای بلااستفاده بیشتر در برگهای داخلی • برای افزایش بهره وری فضا همسایه های بیشتری در ادغام و توزیع شرکت میکنند. • بنابراین هر گره حداقل ورودی خواهد داشت. Example of B+-tree File Organization
B-Tree Index Files • B-tree مشابه B+ است با این تفاوت که هر مقدار کلید جستجو فقط یک بار ظاهر میشود. • برای هر کلید در گره غیر برگ یک اشاره گر دیگر اضافه می شود. • Generalized B-tree leaf node:
B-Tree Index File Example • B-tree and corresponding B+-tree on the same data:
B-Tree Index Files, Cont. • مزایای B-tree • نودهای درختی کمتری نسبت به B+ مشابه دارد. • گاهی اوقات مقدار کلید قبل از رسیدن به برگ پیدا می شود. • معایب B-tree • فقط بخش کوچکی از مقادیر کلید را می توان زودتر پیدا کرد. • گره های غیر برگ داده های بیشتری دارند بنابراین fan-out کاهش میابد و بنابراین B-tree معمولا عمق بیشتری نسبت به B+ دارد. • درج و حذف پیچیدگی بیشتری دارد.
Static Hashing • اولین بخش ساختار hash مجموعه ای از باکتها است. • باکت واحد ذخیره اطلاعات است که شامل یک یا چند رکورد است. • باکت میتواند بلاک دیسک باشد. • ممکن است شامل بیش از یک بلاک باشد. • هر باکت یک آدرس دارد.
Static Hashing • بخش دوم ساختار hash، تابع hash است. • مشابه ایندکس تابع hash براساس کلید جستجو است. • تابع h تابعی از مجموعه ای از مقادیر کلید جستجو K به مجموعه ای از آدرسهای بلاک B است. • برای یافتن، درج و حذف رکوردها استفاده می شود. • معمولا محاسبه آن سریع و آسان است. • معمولا محاسبات برروی شکل باینری کلید جستجو انجام می شود. • ممکن است کلیدهای جستجوهای مختلف به باکت مشابهی نگاشت شوند. بنابراین برای یافتن یک رکود باید کل باکت جستجو شود.
Example of Hash File Organization • Consider a hash file organization of the account table (next page): • 10 buckets (more typically, this is a prime number) • Search key is branch-name • Hash function: • Let the binary representation of the I th character be integer i • Return the sum of the binary representations of the characters modulo 10 h(Mianus) is (13+9+1+14+21+19) = 77 mod 10 = 7 h(Perryridge) = 5 h(Round Hill) = 3 h(Redwood) = 4 h(Brighton) = 3 h(Downtown) = 8 • Inserting 1 Brighton, 1 Round Hill, 1 Redwood, 3 Perryridge, 1 Mianus and 2 Downtown tuples results in the following assignment of records to buckets.
Effective Hashing • اهداف: • دسترسی سریع به رکوردها • فضای هرز کم • فاکتورهای تحقق اهداف • داشتن تابع hash مناسب • داشتن تعداد مناسبی از باکتها نه زیاد و نه کم