1. Trang chủ
  2. » Tất cả

Tiểu luận học phần cơ sở dữ liệu nâng cao đề tài indexing structure

31 3 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 31
Dung lượng 1,48 MB

Nội dung

TRƯỜNG ĐẠI HỌC SÀI GỊN Khoa: Cơng Nghệ Thơng Tin (CLC) BÀI TIỂU LUẬN HỌC PHẦN CƠ SỞ DỮ LIỆU NÂNG CAO Đề tài: Indexing Structure Giáo viên hướng dẫn: PGS TS Nguyễn Tuấn Đăng Sinh viên thực hiện: Tạ Linh Đạt Lớp: DCT120C1 Mã số sinh viên: 3120411048 Năm học 2022 – 2023, Học kì: Thành phố Hồ Chí Minh, ngày 10 tháng 12 năm 2022 yyyy Mục lục Phần mở đầu Mục tiêu đề tài tiểu luận: 1.1 Trình bày cở sở lý thuyết 1.1.1 Primary Index 1.1.2 Clustering Index 1.1.3 Secondary Index 1.1.4 Lời giải toán Chỉ mục: 1.1.4.1 Primary Index 1.1.4.2 Clustering Index 10 1.1.4.3 Secondary Index 11 1.1.5 Phần trình bày Lưu đồ thuật toán ba mục: 12 1.1.5.1 Hình ảnh lưu đồ thuật toán cho Primary Index: 13 1.1.5.2 Hình ảnh lưu đồ thuật tốn Clustering Index 14 1.1.5.3 Hình ảnh lưu đồ thuật tốn SecondaryIndex 15 1.1.6 Phần trình bày kết kiểm thử chương trình: 16 1.1.6.1 Primary Index 16 1.1.6.2 Clustering Index 17 1.1.6.3 Secondary Index 18 Các tài liệu tham khảo: 19 1.2 Thuật tốn cài đặt cơng thức cho mục .19 Page | yyyy Phần mở đầu Mục tiêu đề tài tiểu luận: 1.1 Trình bày lý thuyết loại mục: Primary Index, Clustering Index, Secondary Index 1.2 Viết thuật tốn cài đặt tính tốn số lượng “ block access “ liên quan đến mục nói Sử dụng kiến thức học, áp dụng vào việc lập trình việc tính tốn tiện ích dễ dàng 1.1 Trình bày cở sở lý thuyết 1.1.1 Primary Index - Chỉ mục định trường khóa đặt hàng đơn đặt hàng tập tin hồ sơ - Trường khóa xếp thứ tự sử dụng để xếp vật lý ghi tệp ổ đĩa ghi có giá trị cho trường - Chỉ mục tệp xếp có thứ tự có ghi có độ dài cố định với hai lĩnh vực: + Trường có kiểu liệu với trường khóa xếp thứ tự—được gọi Khóa chính—của tệp liệu + Trường thứ hai trỏ đến khối đĩa (một địa khối) Có mục nhập mục (hoặc ghi mục) tệp mục cho khối tệp liệu - Mỗi mục nhập mục có giá trị trường khóa cho mục nhập Ghi khối trỏ đến khối làm hai trường Page | yyyy giá trị Chúng ta tham khảo hai giá trị trường mục nhập mục i - Tổng số mục nhập mục giống số lượng khối đĩa tệp liệu xếp - Bản ghi khối tệp liệu gọi ghi neo khối, đơn giản khối neo Chỉ mục trường khóa thứ tự Biểu đồ Primary Index (Copyright © 2007 Ramez Elmasri and Shamkant B Navathe) Page | yyyy *Phần đọc thêm mục: Các loại mục cấp đơn: - Chỉ số - Được xác định tệp liệu xếp theo thứ tự - Tệp liệu xếp theo thứ tự trường khóa - Bao gồm mục nhập mục cho khối liệu tệp; mục nhập mục có giá trị trường cho ghi khối, gọi khối neo - Một sơ đồ tương tự sử dụng ghi cuối khối Các mục đặc trưng dày đặc thưa thớt - Các số đặc trưng dày đặc thưa thớt + Chỉ mục dày đặc có mục nhập mục cho khóa tìm kiếm giá trị (và ghi) tệp liệu + Mặt khác, số thưa thớt (hoặc không dày đặc) có mục nhập mục cho số giá trị tìm kiếm Vậy mục dày đặc thưa thớt? - Chỉ mục thưa thớt có mục nhập số lượng ghi tệp - Do đó, số số nondense (thưa thớt), bao gồm mục nhập cho khối đĩa tệp liệu khóa ghi neo thay cho giá trị tìm kiếm (hoặc ghi) Page | yyyy 1.1.2 Clustering Index - Nếu ghi tệp đặt hàng vật lý thuộc tính khơng phải khóa (trường đặt thuộc tính khơng trường hay khơng khóa chính) - Có thể sử dụng loại mục khác, biết mục phân cụm (Clustering Index), dùng để tối ưu tìm tất ghi có giá trị trường phân cụm - Chỉ mục phân cụm tệp đặt theo thứ tự, có trường sau: + Trường loại với trường phân cụm tệp liệu + Trường thứ hai trỏ khối đĩa - Có truy nhập mục phân cụm (Clustering Index) cho giá trị có phân biệt trường phân cụm - Và có chứa giá trị trỏ hướng đến khối tệp liệu, với ghi cí giá trị cho phân cụm Chỉ mục phân cụm trường khóa thứ tự Biểu đồ Clustering Index (Copyright © 2007 Ramez Elmasri and Shamkant B Navathe) Page | yyyy Ví dụ khác mục phân cụm: Chỉ mục phân cụm trường khóa thứ tự Biểu đồ Clustering Index (Copyright © 2007 Ramez Elmasri and Shamkant B Navathe) *Phần đọc thêm Clustering Index: - Định nghĩa tệp liệu xếp - Các tệp xếp theo trường khơng khóa khơng giống mục chính, mặc định trường xếp tệp liệu có giá trị riêng biệt cho ghi - Bao gồm mục truy nhập cho giá trị trường; mục truy nhập hướng tới khối liệu mà chứa ghi với trường giá trị Dày đặt hay thưa thớt? - Ở ví dụ thứ khơng dày đặt (thưa thớt) mục Page | yyyy 1.1.3 Secondary Index - Một số phụ cung cấp phương tiện thứ cấp truy cập tệp mà số quyền truy cập có tồn - Chỉ mục phụ nằm trường ứng cử viên khóa có giá trị ghi khơng khóa với giá trị trùng lặp - Chỉ mục tệp xếp có hai trường: + Trường có kiểu liệu với số thứ tựtrường tệp liệu trường lập mục + Trường thứ hai trỏ khối trỏ ghi + Có thể có nhiều mục phụ (và đó, việc lập mục trường) cho tệp Dày đặc hay thưa thớt? Bao gồm mục cho ghi tệp liệu; đó, số dày đsố *Có mục? - Lưu ý tệp có nhiều vật lý trường đặt hàng, có nhiều trường mục mục phân cụm, khơng phải hai - Chỉ mục phụ định trường không theo thứ tự tệp Một tệp liệu có nhiều mục phụ ngồi quyền truy cập phương pháp - Chỉ mục phụ tạo trường khóa ứng viên có giá trị ghi, trường khơng khóa có giá trị trùng lặp Page | yyyy *Cấu trúc truy cập mục phụ bật trường khóa (duy nhất) - Trong trường hợp này, có mục nhập mục cho ghi tệp liệu, chứa giá trị trường cho ghi trỏ tới khối mà ghi lưu trữ để ghi - Do đó, số dày đặc - Các mục xếp theo thứ tự để chúng tơi thực Tìm kiếm nhị phân Ví dụ Dense SecondarSecondary: Chỉ mục phụ trường khóa thứ tự Biểu đồ Secondary Index (nguồn Copyright © 2007 Ramez Elmasri and Shamkant B Navathe) Page | yyyy *Phần đọc thêm Secondary Index: - Chỉ mục phụ (Secondary Index) thường xuyên cần nhiều không gian lưu trữ thời gian để tìm mục (Primary Index), có nhiều số lượng mục nhập - Tuy nhiên, cải thiện thười gian tìm kiếm cho ghi tùy ý lớn mục phụ nhiều mục chính, nên phải thực tìm kiếm tuyết tính tệp liệu, mục phụ khơng có tồn Đối với mục chính, sử dụng tìm kiếm nhị phân tệp liệu chính, chí mục khơng có tồn 1.1.4 Lời giải toán Chỉ mục: 1.1.4.1 Primary Index Các liệu đầu vào đề: Record: r = 600000 records Block size: B = 4096 bytes Record length: R = 40 bytes Field size: V = bytes Block pointer: P = bytes Lời giải toán Primary Index: What is the blocking factor value of the data file? Blocking factor value of the data file is: bfr = ⌊B / R⌋ = ⌊4096 / 40⌋ = 102 records/block How many data blocks are there for the data file? Number of blocks need for the data file is: b = ⌈r / bfr⌉ = ⌈600000 / 102⌉ = 5883 blocks How many block accesses for a linear search on the data file? Block accesses for a linear search on the data file is: b / = 5883 / = 2942 block accesses How many block accesses for a binary search on the data file? Block accesses for a binary search on the data file is: ⌈log b⌉ = ⌈log 5883⌉ = 13 block accesses How many block accesses for a binary search on the index file? Block accesses for a binary search on the index file is: : ⌈log bi⌉ = ⌈log 22⌉ = block accesses Page | yyyy 1.1.6 Phần trình bày kết kiểm thử chương trình: 1.1.6.1 Primary Index Màn hình nhập từ console: Xuất thơng tin kết chương trình FILE output.txt:: Page | 16 yyyy 1.1.6.2 Clustering Index Màn hình nhập từ console: Xuất thơng tin kết chương trình FILE output.txt: Page | 17 yyyy 1.1.6.3 Secondary Index Màn hình nhập từ console: Xuất thơng tin kết chương trình FILE output.txt: Page | 18 yyyy Các tài liệu tham khảo: Tài liệu thứ 1: Chapter 14 (fcis2023.me) (Copyright © 2007 Ramez Elmasri and Shamkant B Navathe) Tài liệu thứ 2: https://scanftree.com/dbms/classification-of-indexing (Scanfree) Tài liệu thứ 3: Indexing-Structures-for-File.pdf (11For more details on insertion and deletion algorithms for B+ trees, consult Ramakrishnan and Gehrke [2003]) Phụ lục Toàn source code chi tiết chương trình: 19 1.2 Thuật toán cài đặt cơng thức cho mục Tồn source code chi tiết chương trình: using System; using System.Collections.Generic; using System.IO; using System.Text; namespace Final_Project { class Program { static void Main(string[] args) { System.IO.FileStream fs = new System.IO.FileStream(@"C:\Users\Admin\Desktop\output.txt", FileMode.Create, FileAccess.Write, FileShare.None); StreamWriter sw = new StreamWriter(fs); Page | 19 yyyy Console.WriteLine("1 Primary Index "); Console.WriteLine("2 Clustering index "); Console.WriteLine("3 Secondary index "); Console.WriteLine("Chon menu "); int n = Convert.ToInt32(Console.ReadLine()); if(n == 1) { Console.WriteLine("Moi ban nhap Record:"); int r = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Moi ban nhap Block size:"); int B = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Moi ban nhap Record size"); int R = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Moi ban nhap Field size"); int fS = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Moi ban nhap Block pointer"); int bP = Convert.ToInt32(Console.ReadLine()); sw.WriteLine("Cac du lieu dau vao gom co: "); sw.WriteLine("********************************************"); sw.WriteLine("Record: sw.WriteLine("Block size: r = " + r + " records "); B = " + B + " bytes "); sw.WriteLine("Record length: R = " + R + " bytes "); sw.WriteLine("Field size: V = " + fS + " bytes "); sw.WriteLine("Block pointer: P = " + bP + " bytes "); sw.WriteLine("********************************************"); Page | 20 yyyy double v1 = blockingFactor(B, R); double v2 = numberOfBlock_DataFile(r, B, R); double v3 = linearSearch_DataFile(r, B, R); double v4 = binarySearch_DataFile(r, B, R); double v5 = binarySearch_IndexFile(r, B, R, fS, bP); double v6 = binarySearch_PrimaryIndex(r, B, R, fS, bP); double v7 = Bfri(B, fS, bP); double a1 = Ri(fS, bP); double a2 = Bfri(B, fS, bP); double a3 = Bi(r, B, R, fS, bP); sw.Write("\nLoi giai bai toan Primary Index\n"); sw.Write("********************************************************************** ****************************************************************************** ************************************************\n"); sw.WriteLine("Blocking factor value of the data file is: bfr = (B / R) : " + v1 + " records/block "); sw.WriteLine("Number of blocks need for the data file is: b = (r / bfr) : " + v2 + " blocks "); sw.WriteLine("Block accesses for a linear search on the data file is: b / : " + v3 + " block accesses "); sw.WriteLine("Block accesses for a binary search on the data file is: log2(b) : " + v4 + " block accesses "); sw.WriteLine("Block accesses for a binary search on the index file is: log2(bi) : " + v5 + " block accesses "); sw.WriteLine("Block accesses for a binary search with the support of primary index: log2(bi) + : " + v6 + " block accesses\n"); Page | 21 yyyy sw.WriteLine("Assume that the file has the ordering key field SSN and we want to construct a primary index for the file Assume the field size VSSN = " + fS + " bytes and the record/block pointer size PR = " + bP + " bytes "); sw.WriteLine("index entry size: Ri = (V + P) : " + a1 + " bytes "); sw.WriteLine("Index blocking factor: bfri =(B / Ri) : " + a2 + " entries/block "); sw.WriteLine("number of index entries: ri = number of data file blocks = b = " + v2); sw.WriteLine("number of index blocks: bi = (ri / bfri) : " + a3 + "blocks "); sw.Write("********************************************************************** ****************************************************************************** *************************************************"); sw.Flush(); sw.Close(); fs.Close(); } else if(n == 2) { Console.WriteLine("Moi ban nhap Record:"); int r = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Moi ban nhap Block size:"); int B = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Moi ban nhap Record size"); int R = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Moi ban nhap Field size"); int fS = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Moi ban nhap Block pointer"); int bP = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Moi ban nhap zip code"); int Z = Convert.ToInt32(Console.ReadLine()); Page | 22 yyyy sw.WriteLine("Cac du lieu dau vao gom co: "); sw.WriteLine("********************************************"); sw.WriteLine("Record: sw.WriteLine("Block size: r = " + r + " records"); B = " + B + " bytes"); sw.WriteLine("Record length: R = " + R + " bytes"); sw.WriteLine("Field size: V = " + fS + " bytes"); sw.WriteLine("Block pointer: P = " + bP + " bytes"); sw.WriteLine("Zip code: " + Z); sw.WriteLine("********************************************"); double v1 = blockingFactor(B, R); double v2 = numberOfBlock_DataFile(r, B, R); double v3 = linearSearch_DataFile(r, B, R); double v4 = binarySearch_DataFile(r, B, R); double v5 = binarySearch_Clus_IndexFile(Z, B, fS, bP); double v6 = binarySearch_Clustering(Z, B, fS, bP); double a1 = Ri(fS, bP); double a2 = Bfri(B, fS, bP); double a3 = BI_CLUSTERING(Z, B, fS, bP); sw.Write("\nLoi giai bai toan Clustering Index\n"); sw.Write("********************************************************************** ****************************************************************************** ************************************************\n"); sw.WriteLine("Blocking factor value of the data file is: bfr = (B / R) : " + v1 + " records/block "); sw.WriteLine("Number of blocks need for the data file is: b = (r / bfr) : " + v2 + " blocks "); Page | 23 yyyy sw.WriteLine("Block accesses for a linear search on the data file is: b / : " + v3 + " block accesses "); sw.WriteLine("Block accesses for a binary search on the data file is: log2(b) : " + v4 + " block accesses "); sw.WriteLine("Block accesses for a binary search on the index file is: log2(bi) : " + v5 + " block accesses "); sw.WriteLine("Block accesses for a binary search with the support of clustering index: >= log2(bi) + : " + v6 + " block accesses\n"); sw.WriteLine("Assume that the file has the ordering key field SSN and we want to construct a primary index for the file Assume the field size VSSN = " + fS + " bytes and the record/block pointer size PR = " + bP + " bytes "); sw.WriteLine("index entry size: Ri = (V + P) : " + a1 + " bytes "); sw.WriteLine("Index blocking factor: bfri =(B / Ri) : " + a2 + " entries/block "); sw.WriteLine("number of index entries: ri = number of data file blocks = b = " + v2); sw.WriteLine("number of index blocks: bi = (ri / bfri) : " + a3 + "blocks "); sw.Write("********************************************************************** ****************************************************************************** *************************************************"); sw.Flush(); sw.Close(); fs.Close(); } else if( n == ) { Console.WriteLine("Moi ban nhap Record:"); int r = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Moi ban nhap Block size:"); Page | 24 yyyy int B = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Moi ban nhap Record size"); int R = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Moi ban nhap Field size"); int fS = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Moi ban nhap Block pointer"); int bP = Convert.ToInt32(Console.ReadLine()); sw.WriteLine("Cac du lieu dau vao gom co: "); sw.WriteLine("********************************************"); sw.WriteLine("Record: sw.WriteLine("Block size: r = " + r + " records"); B = " + B + " bytes"); sw.WriteLine("Record length: R = " + R + " bytes"); sw.WriteLine("Field size: V = " + fS + " bytes"); sw.WriteLine("Block pointer: P = " + bP + " bytes"); sw.WriteLine("********************************************"); double v1 = blockingFactor(B, R); double v2 = numberOfBlock_DataFile(r, B, R); double v3 = linearSearch_DataFile(r, B, R); double v4 = binarySearch_DataFile(r, B, R); double v6 = binarySearch_SecondaryIndexFile(r, B, fS, bP); double v7 = binarySearch_IndexAdd(r, B, fS, bP); double a1 = Ri(fS, bP); double a2 = Bfri(B, fS, bP); double a3 = Bi_SecondaryIndex(r, B, fS, bP); Page | 25 yyyy sw.Write("\nLoi giai bai toan Secondary Index\n"); sw.Write("********************************************************************** ****************************************************************************** ************************************************\n"); sw.WriteLine("Blocking factor value of the data file is: bfr = (B / R) : " + v1 + " records/block "); sw.WriteLine("Number of blocks need for the data file is: b = (r / bfr) : " + v2 + " blocks "); sw.WriteLine("Block accesses for a linear search on the data file is: b / : " + v3 + " block accesses "); sw.WriteLine("Block accesses for a binary search on the data file is: log2(b) : " + v4 + " block accesses "); sw.WriteLine("Block accesses for a binary search on the index file is: " + v6 + " block accesses "); sw.WriteLine("Block accesses for a binary search with the support of a secondary index: " + v7 + " block accesses\n"); sw.WriteLine("Assume that the file has the ordering key field SSN and we want to construct a primary index for the file Assume the field size VSSN = " + fS + " bytes and the record/block pointer size PR = " + bP + " bytes "); sw.WriteLine("index entry size: Ri = (V + P) : " + a1 + " bytes "); sw.WriteLine("Index blocking factor: bfri = (B / Ri) : " + a2 + " entries/block "); sw.WriteLine("number of index blocks: bi = (ri / bfri) : = " + a3 + "blocks "); sw.Write("********************************************************************** ****************************************************************************** *************************************************"); sw.Flush(); sw.Close(); fs.Close(); } Page | 26 yyyy } public static double blockingFactor(int B, int R) { double v = (B * 1.0) / R; double rounded = Math.Floor(v); return rounded; } public static double numberOfBlock_DataFile(int r, int B, int R) { double v = (r * 1.0) / blockingFactor(B, R); double rounded = Math.Ceiling(v); return rounded; } public static double linearSearch_DataFile(int r, int B, int R) { double v = (numberOfBlock_DataFile(r, B, R) * 1.0) / 2; double rounded = Math.Round(v); return rounded; } public static double binarySearch_DataFile(int r, int B, int R) { double v = Math.Log(numberOfBlock_DataFile(r, B, R), 2); double rounded = Math.Ceiling(v); return rounded; Page | 27 yyyy } public static int Ri(int fS, int bP) { return fS + bP; } public static double Bfri(int B, int fS, int bP) { double v = B / Ri(fS, bP); double rounded = Math.Floor(v); return rounded; } public static double Bi(int r, int B, int R, int fS, int bP) { double v = (numberOfBlock_DataFile(r, B, R) * 1.0) / Bfri(B, fS, bP); double rounded = Math.Ceiling(v); return rounded; } public static double binarySearch_IndexFile(int r, int B, int R, int fS, int bP) { double v = Math.Log(Bi(r, B, R, fS, bP), 2); double rounded = Math.Ceiling(v); return rounded; } Page | 28 yyyy public static double binarySearch_PrimaryIndex(int r, int B, int R, int fS, int bP) { double v = binarySearch_IndexFile(r, B, R, fS, bP) + 1; return v; } // _ public static double BI_CLUSTERING(int Z, int B, int fS, int bP) { return Math.Ceiling((Z * 1.0) / Bfri(B, fS, bP)); } public static double binarySearch_Clus_IndexFile(int Z, int B, int fS, int bP) { return Math.Ceiling(Math.Log(BI_CLUSTERING(Z, B, fS, bP), 2)); } public static double binarySearch_Clustering(int Z, int B, int fS, int bP) { return binarySearch_Clus_IndexFile(Z, B, fS, bP) + 1; } // _ public static double Bi_SecondaryIndex(int r, int B, int fS, int bP) { double v = (r * 1.0) / Bfri(B, fS, bP); double rounded = Math.Ceiling(v); Page | 29 yyyy return rounded; } ]public static double binarySearch_SecondaryIndexFile(int r, int B, int fS, int bP) { double v = Math.Log(Bi_SecondaryIndex(r, B, fS, bP), 2); double rounded = Math.Ceiling(v); return rounded; } public static double binarySearch_IndexAdd(int r, int B, int fS, int bP) { double v = binarySearch_SecondaryIndexFile(r, B, fS, bP) + 1; return v; } // _ public static double Clustering_Index(int r, int B, int R, int fS, int bP) { return binarySearch_PrimaryIndex(r, B, R, fS,bP) + 1; } } } HẾT Page | 30 ... yyyy Các tài liệu tham khảo: Tài liệu thứ 1: Chapter 14 (fcis2023.me) (Copyright © 2007 Ramez Elmasri and Shamkant B Navathe) Tài liệu thứ 2: https://scanftree.com/dbms/classification-of -indexing. .. Các tài liệu tham khảo: 19 1.2 Thuật tốn cài đặt cơng thức cho mục .19 Page | yyyy Phần mở đầu Mục tiêu đề tài tiểu luận: 1.1 Trình bày lý thuyết loại mục: Primary Index, Clustering...yyyy Mục lục Phần mở đầu Mục tiêu đề tài tiểu luận: 1.1 Trình bày cở sở lý thuyết 1.1.1 Primary Index

Ngày đăng: 14/03/2023, 10:22

w