โครงสร้างของแฟ้มสุ่ม
Download
Report
Transcript โครงสร้างของแฟ้มสุ่ม
บทที่ 3 การจัดเรี ยงแบบสุ่ ม
(Random File organization)
นิยามและการประยุกต์ ใช้ งาน
วิธีการจัดระเบียบข้ อมูล ที่สามารถเข้ าถึงระเบียนหนึ่งระเบียน
ใดโดยตรง โดยไม่ต้องอ่านข้ อมูลตังแต่
้ ต้นอย่างแฟ้มลาดับ
เรี ยกว่า การจัดระเบียบสุม่ (Random file organization)
ระเบียนต่างๆ ในแฟ้มสุม
่ ไม่จาเป็ นต้ องเรี ยงตามไพมารี่ คีย์ ซึง่
บางครัง้ ยังมีพื ้นที่วา่ ง ปะปนกันเป็ นระยะ ด้ วยดังภาพ
2
3
การคานวณหาตาแหน่ งระเบียนทาได้โดยสร้างความสาพันธ์
ระหว่างค่าของคียก์ บั ตาแหน่งกายภาพจากฟงั ก์ชนดั
ั ่ งนี้
R(key value) ----- address
บันทึก-นาค่าไพรมารีค
่ ยี ม์ าแปลงเป็ นตาแหน่งเรียกใช้ขอ้ มูล-
นาค่าไพรมารียม์ าแปลงเป็ นตาแหน่งเพือ่ ดึงข้อมูลมาใช้งาน
4
เทคนิคที่ใช้ในการแปลงส่งฟังก์ชนั ่ R
R(key value) ----- address
การแปลงส่งโดยตรง(Direct Mapping)
การค้ นหาในพจนานุกรม(Dictionary Lookup)
การคานวณตาแหน่ง(Address Calculation)
5
การแปลงส่งโดยตรง
ทาได้งา่ ยและรวดเร็วเนื่องจากให้ตาแหน่งของระเบียนมีคา่ เท่ากับไพรมารีค่ ยี จ์ งึ
ไม่ตอ้ งคานวณ
R(key value) ----- relative address
Relative address คือลาดับทีข่ องระเบียนในแฟ้มข้อมูล เช่น ถ้าแฟ้มข้อมูล
เตรียมเนื้อทีข่ นาด N ระเบียนแล้ว relative address คือ 1,2,3,… N-1,N หรือ
0,1,2,N-2, N-1
6
การแปลงส่งโดยตรง(Direct Mapping)
การให้ตาแหน่งของระเบียนไม่ซ้ากัน(uniquely) คือ หนึ่งระเบียนต่อ
หนึ่งตาแหน่ง primary key จะต้องเป็ นตัวเลขเรียงจากน้อยไปมาก
และระเบียนมีขนาดคงทีต่ วั อย่าง ระเบียนในแฟ้มสุม่ มี primary key
อยูใ่ นช่วง 0-9999 ดังนัน้ เราต้องสารองพืน้ ทีว่ า่ งไว้ 10000 ทีต่ ่อ
10000 ระเบียน โดยค่าของ primary key ต้องอยูใ่ นช่วง 0-9999
7
คีย์ที่ไม่ เหมาะสมสาหรับการทา Relative Addressing
ชื่อพนักงาน แปลงเป็ นตัวเลขได้แต่กไ็ ม่อยูใ่ นรูป Relative Address
คียท์ เ่ี ป็ นตัวเลขบางตัว เช่นเลขทีบ่ ตั รผูเ้ สียภาษีเนื่องจากมี 10 ต่าแหน่ง ค่าที่
เป็ นไปได้ 0-9999999999 หรือประมาณ หนึ่งพันล้าน
การใช้ Relative address จะมีประโยชน์มากถ้าจานวนค่าทีม่ อี ยูจ่ ริงใกล้เคียงกับ
จานวนคียจ์ ริง
8
ข้อดี
การแปลงฟงั ก์ชน
ั ่ R ทาได้งา่ ย
ประมวลผลได้ดท
ี งั ้ แบบลาดับและแบบสุม่
ข้อเสีย
ไม่สามารถใช้เขตหลักเป็ นตัวอักษรได้
ไม่เหมาะสมสาหรับช่วงคียก
์ ว้างๆ แต่มรี ะเบียนจริงๆ เพียงเล็กน้อย สิน้ เปลือง
พืน้ ทีม่ าก
9
การค้นหาในพจนานุกรม(Dictionary lookup)
บางตาราเรียกว่า Indexed file
แนวคิดเริม่ แรกคือเป็ นการสร้างตารางหรือแฟ้มพจนานุ กรม(แฟ้มดรรชนีชนิด
หนึ่ง) โดยจัดเก็บในรูปของคีย/์ ตาแหน่ง(key value/relative address)
การเรียกใช้จะใช้คา่ คียข์ องระเบียนไปหา Address ทีค่ กู่ บั คียใ์ นแฟ้มพจนานุกรม
และใช้ address ทีค่ กู่ บั คียใ์ นแฟ้มพจนานุ กรมและเข้าถึง Address เพือ่ เข้าถึง
ระเบียนต่อไป
10
โครงสร้างแฟ้ มพจนานุกรม
ประกอบด้วย 2 entries คือ key กับ address โดยแบ่งได้ดงั นี้
1. แบบตาราง (Linear/Table)
ข้อมูลเรียงตามลาดับของ key ดังภาพ
- ค้นหาข้อมูลได้รวดเร็วเพราะสามารถใช้วธิ คี น
้ หาข้อมูลแบบไบนารี (Binary
search) ได้
- การแทรกหรือการลบข้อมูลในพจนานุ กรมทีเ่ รียงแล้วเสียเวลามาก
11
ข้อมูลทีไ่ ม่ได้เรียงลาดับของคีย์
ใช้วธิ คี น
้ หาแบบลาดับหาได้ชา้
หรือใช้ hashing function หาตาแหน่ งข้อมูล
การแทรกหรือการลบข้อมูลในพจนานุ กรมไม่ยงุ่ ยาก
12
DICTIONARY
KEY
ADDRESS
RANDOM FILE
Relative Address
13
2 Nonlinear แฟ้ มพจนานุกรมอาจมีโครงสร้างแบบอื่น เช่น
Binary search tree ดังภาพ
M-way search tree
B-tree
โครงสร้างเหล่านี้คน
้ หาข้อมูลได้เร็ว แต่ซบั ซ้อนกว่า
การแทรกหรือลบข้อมูลในพจนานุ กรมทาได้งา่ ย
14
15
โครงสร้างของแฟ้ มสุ่ม
การเรียกใช้ระเบียนโดยใช้วธิ นี ้ีสามารถกระทาได้โดยตรง ซึง่ ปญั หาอยูท่ ว่ี า่
เราจะจัดเก็บระเบียนในแฟ้มสุม่ อย่างไร คือสามารถกาหนดเลขทีต่ าแหน่ง
ให้กบั ทุกๆ คียท์ เ่ี ป็ นไปได้ โดยสร้างพจนานุกรมให้สมบูรณ์ในช่วงแรก
ข้อดี ระเบียนใหม่จะสามารถพิจารณาตาแหน่งทีเ่ ก็บได้งา่ ย
ข้อเสีย ถ้าแฟ้มพจนานุ กรมเต็มตัง้ แต่แรก จะไม่สามารถเก็บข้อมูลได้ต่อไป
16
โครงสร้างของแฟ้ มสุ่ม
มีอกี วิธคี อื การพิจารณาพืน้ ทีว่ า่ ง(free space) เมือ่ ต้องการเก็บระเบียนควร
เก็บในตาแหน่งว่างจากบนก่อน หรือเก็บในกลุ่มระเบียนทีม่ คี ล้ายๆกัน
ขณะเดียวกันต้องเพิม่ ข้อมูล key value :address เข้าไปในแฟ้ม
พจนานุกรมด้วย
ถ้าเป็ น sort table การแทรกข้อมูลใหม่ในตาแหน่งทีถ่ ูกต้องอาจต้องขยับ
ข้อมูลอื่นๆ ด้วย
ถ้าเป็ นแบบ link list การแทรกข้อมูลใหม่ทาได้งา่ ย แต่ไม่สามารถค้นหา
แบบไบนารีได้
17
โครงสร้างของแฟ้ มสุ่ม
ข้อดีของวิธกี ารค้นหาในพจนานุกรม
1. ตาแหน่ งของระเบียนหาได้โดยไม่ตอ
้ งผ่านการคานวณเพราะระบุชดั ในแฟ้ม
พจนานุกรม
2. ไพรมารีคย
ี ท์ ใ่ี ช้สามารถ เป็ นไปตามความต้องการของผูใ้ ช้
3. เมือ
่ ทา Reoranization เลขทีต่ าแหน่งอาจเปลีย่ นแปลงแต่ค่าของคียไ์ ม่ตอ้ ง
เปลีย่ นตาม
เทคนิคการค้นหาในพจนานุ กรมเหมาะสาหรับแฟ้มข้อมูลขนาดเล็ก
เช่นเดียวกับการแปลงส่งโดยตรง มีขอ้ ดีทส่ี ามารถสร้างเลขทีต่ าแหน่งทีไ่ ม่ซ้า
กันได้ในแต่ละระเบียน แฟ้ม index sequencial file เป็ นรูปแบบหนึ่งของวิธนี ้ี
18
ตัวอย่างเช่น บริษทั หนึ่งมีพนักงาน 2,000 คน และใช้เลขทีบ่ ตั รผูเ้ สียภาษี
เป็ นคีย์ ซึง่ คียท์ ใ่ี ช้มชี ว่ งกว้าง 1 หมืน่ ล้าน แต่ขอ้ มูลจริงมีเพียง 2,000 เท่านัน้
ซึง่ เราต้องหา ฟงั ก์ชนมาท
ั่
าการเปลีย่ นค่าไพรมารีคยี ใ์ ห้เป็ น relative address
ประมาณ 2,000 ที่
ในการคานวณหาตาแหน่งนัน้ แตกต่างจาก 2 วิธแี รกทีใ่ ห้ตาแหน่งไม่ซ้ากัน แต่
วิธกี ารคานวณนัน้ อาจได้ตาแหน่งทีเ่ ดียวกันกับไพรมารีคยี ข์ องระเบียนอื่นๆ
ได้
19
โดยถ้า R(K1) = R(K2) แต่ K1 # K2 เมือ่ K1, K2 เป็ นไพรมารีคยี ข์ อง 2
ระเบียน เราจะเรียกว่า Collision และเรียก K1, K2 ว่า Synonyms และเรียก
ระเบียนทีไ่ ม่สามารถเก็บในตาแหน่งทีค่ านวณได้ (Home address) ว่าระเบียน
ส่วนล้น (Overflow record)
วิธกี ารคานวณมีช่อื เรียกต่างกันดังเช่น
Randomizing Technique
Key to address Transform
Hashing Function
Scatter Storage
20
ปัจจัยที่มีอิทธิพลต่อประสิทธิภาพของแฟ้ มสุ่มที่ใช้วิธีการ
คานวณตาแหน่ ง
ขนาดของ Bucket
Loading Factor
ชุดของค่าไพรมารีคย
ี ์
แฮชชิง่ ฟงั ก์ชนที
ั ่ ใ่ ช้
วิธก
ี ารจัดการเกีย่ วกับระเบียนส่วนล้น
21
คือที่เก็บข้อมูลของแฟ้มสุ่มสาหรับการคานวณ
ตาแหน่ งนัน้ ถูกแบ่งเป็ นส่วนๆ ที่เรียกว่า Bucket
แต่ละ
Bucket เก็บระเบียนได้ 1 หรือมากกว่า โดยความยาวของ
ระเบียนแปรผันได้ ผูอ้ อกแบบแฟ้มข้อมูลเป็ นผูก้ าหนดความจุ
ของ Bucket
Bucket ขนาดเล็กจะมีอต
ั ราส่วนในการเกิด Overflow ค่อนข้าง
สูง ทาให้เสียเวลาในการอ่าน Bucket เพิม่ เติมและอาจต้องเพิม่
เวลา seek time ถ้า Bucket ต้องอ่านเข้าไปในหน่วยความจา
แล้วจึงค้นหาระเบียนทีต่ อ้ งการได้
Bucket
22
Bucket capacity มักขึน
้ อยูก่ บั ฮาร์ดแวร์ทแ่ี ฟ้มนัน้ เก็บอยูเ่ ช่น
อาจเป็ น 1 Sector 1 track หรือ 1 page โดยขนาดของ
Bucket ควรเท่ากับขนาดของบล็อก
23
แฟ้มข้ อมูลหนึ่งประกอบไปด้ วย Bucket 2 ประเภทคือ Home bucket
และ overflow bucket
โดยที่ตำแหน่งของระเบียนที่คำนวณได้ เรี ยกว่ำ Home Address จะเก็บไว้
ใน Home Bucket
แต่ละ Bucket ที่แยกไว้ ต่ำงหำกสำหรับเก็บระเบียนส่วนล้ น เรี ยกว่ำ
Overflow Bucket
24
Loading Factor
Loading Factor ของแฟ้มข้ อมูลคือ อัตราส่วนของจานวนระเบียนที่มีอยู่ในแฟ้ม
ขณะที่เก็บ ต่อจานวนเนื ้อที่ที่มีให้ ใช้ (available) ในแฟ้ม
Loading factor =
#record in file
Max# of Record file can contain
การกาหนดค่าของ loading factor เป็ นการเผื่อพื ้นที่ให้ แฟ้มข้ อมูลถ้ าเผื่อไว้ มาก
โอกาสที่จะเกิดระเบียนส่วนล้ นจะ ลดลงด้ วย
25
โดยปกติ Loading Factor ของแฟ้มสุม่ จะอยูท่ ี่ 0.70 -0.80 ถ้ ามากกว่านี ้ควร
Reorganization เช่น
แฟ้มข้ อมูลมีระเบียนประมาณ 4,000 ระเบียน จะต้ องเผื่อพื ้นที่อย่างน้ อย
กว่า 5,000 ซึง่ ก็คือ loading factor =0.8 หรื อ 80% นัน่ เอง
26
แฮชชิงฟังก์ชนั ่ (Hashing function)
เป็ นวิธกี ารทีใ่ ช้เปลีย่ นคียใ์ ห้เป็ นเลขตาแหน่ง โดยมีวธิ หี ลากหลาย
โดยพิจารณาดังนี้
1. ให้พจิ ารณาทีค่ า่ ของ synonym น้อยทีส่ ดุ
2. เป็ นฟงั ชันที
่ ไ่ ม่ซบั ซ้อนนัก
3. ระเบียนทีผ่ า่ นฟงั ก์ชนแล้
ั ่ วกระจายอย่างสม่าเสมอ ถือว่าชุดของค่า
primary key เข้ากับ ฟงั ก์ชนได้
ั ่ ดี ถ้ากระจุกตัวแน่นก็ถอื ว่าต้องหา
ฟงั ก์ชนแฮชชิ
ั่
ง่ ใหม่
27
แฮชชิงฟังก์ชนั ่ แบบต่างๆ
วิธกี ารใช้เศษเหลือจากการหาร
วิธกี ารวิเคราะห์ตวั เลข
Mid square method
Folding
Different Radix
28
การใช้เศษเหลือจากการหาร
เป็ นวิธกี ารแปลงค่าคียข์ องระเบียนให้อยูใ่ นรูปของตาแหน่งทีอ่ ยูช่ ว่ ง
Home bucket ของแฟ้มข้อมูล คือการใช้จานวนเฉพาะ(Prime
number) ทีม่ คี า่ ใกล้เคียงแต่ไม่เกินจานวน Bucket ในแฟ้มข้อมูลหาร
คียข์ องระเบียนเศษทีเ่ หลือจากการหารคือ ตาแหน่งของระเบียน
F(KV) = Mod(KV/N)
Rem = ฟงั ก์ชนที
ั ่ ใ่ ช้ในการหาเศษเหลือ
KV = ค่าคียข
์ องระเบียน
K = largest prime number ทีม
่ คี า่ ไม่เกิน largest ของ number
29
การใช้เศษเหลือจากการหาร
การเปลีย่ นวิธนี ้ีไม่เพียงแต่ให้ผลดีสาหรับแฟ้มขนาดใหญ่ใช้เวลาใน
การคานวณน้อย ตัวอย่างเช่น
กาหนดให้ Bucket capacity = 1 แฟ้มข้อมูลทีร่ ะเบียนอยู่ 10,000
ระเบียน ค่าของคียอ์ ยูใ่ นช่วง 0000000-9999999 เตรียมเนื้อทีไ่ ว้
12,000 สาหรับเก็บข้อมูลนี้เพือ่ ลดโอกาสการเกิด Overflow ตาแหน่ง
ของระเบียนมีหลายเลขในช่วง 00000-11999 ตัวหารเป็ น prime
number ต้องไม่เกิน 11999 นัน้ คือ 11987 ต่อไปนี้คอื คานวณ
ตาแหน่ง Home Bucket ของระเบียนทีม่ คี ยี ์ 0235671
30
การใช้เศษเหลือจากการหาร
การคานวณตาแหน่ ง Home
bucket ของคีย์ 0235671
เอาค่าคีย์ 0235671 หารด้วย 11987 จะได้ผลหาร 19 เศษ
7918 ซึง่ เศษทีเ่ หลือคือ ตาแหน่งของ Home Bucket ของ
ระเบียน 0235671 ซึง่ เป็ น Relative address ซึง่ OS จะเป็ น
ส่วนทีท่ าหน้าทีค่ านวณตาแหน่งทีแ่ ท้จริงต่อไป
31
การวิเคราะห์เชิงตัวเลข
เป็ นการวิเคราะห์ตวั เลขของคียใ์ นแต่ละตาแหน่ ง
ถ้าความถี่
ของเลขตาแหน่งใดมีการกระจายของตัวเลข 0-9 อย่าง
สม่าเสมอ และใช้ตาแหน่งเหล่านัน้ มาพิจารณาตาแหน่งทีเ่ ก็บ
ข้อมูลดังตัวอย่าง
32
ตารางความถี่
33
การวิเคราะห์เชิงตัวเลข
จากตารางพบว่า ตาแหน่งที่ 2,3, 5 มีการการะจายตัวเลข 0-9 อย่าง
สม่าเสมอ ดังนัน้ ถ้าคียร์ ะเบียน = 16258 แล้วเลขทีข่ องตาแหน่งนี้คอื 628
สมมุตวิ า่ แฟ้มข้อมูลนี้ม ี 500 ระเบียน(0-499) ดังนัน้ อยูน่ อกช่วงของ
ตาแหน่งทีเ่ ก็บข้อมูล ให้เราเอา 500 มาลบออก ได้ตาแหน่งของระเบียนเป็ น
128 วิธดี งั กล่าวจะดีหรือไม่ขน้ึ อยูก่ บั ไพรมารียใ์ นตาแหน่งต่างๆ กระจาย
ตัวอย่างสม่าเสมอเพียงใด
34
Mid Square Method
ทาโดยเอาค่าคียข์ องระเบียนมายกกาลังสอง และเลือกตัวเลขในช่วงกลางมาเป็ น
Relative address โดยเลือกให้เท่ากับจานวนหลักของ address
ทีต่ อ้ งการ
35
36
Folding
โดยการแบ่งค่าคียอ
์ อกส่วนๆ
ให้แต่ละส่วนเท่ากับจานวนหลัก
ของ address ทีต่ ้องการ เอาแต่ละส่วนพับเข้าหากันแล้วจึง
บวกกัน ผลบวกคือ ต าแหน่ ง ที่ต้ อ งการเช่ น ถ้ า ระเบีย บที่
ต้องการหามีคยี ์ 123456789 ต้องการ 4 digit address
37
38
Different Radix
โดยการเปลีย่ นค่าคียข์ องระเบียน จากเลขฐานสิบเป็ นเลขฐานอื่นๆ เช่นคีย์ =
123456 เป็ นเป็ นฐานสิบเอ็ด เพือ่ หาตาแหน่ง 4 หลัก ได้ดงั นี้
=
โดยเราอาจจะเลือ 4871 เป็ นตาแหน่งทีอ่ ยูข่ องระเบียนนี้กไ็ ด้
39
ข้อดีของการใช้วธิ กี ารคานวณตาแหน่งสาหรับทา
R(Key value) -- address
1.
2.
3.
4.
5.
ไพรมารีคยี ท์ ใ่ี ช้เป็ นไปตามความต้องการผูใ้ ช้
ถ้ามีการทา reorganization แฟ้มสุม่ อาจต้องเปลีย่ นแฮชชิง
ฟงั ก์ชนั ่ แต่คา่ ของคียไ์ ม่ตอ้ งเปลีย่ นตาม
เวลาทีใ่ ช้สาหรับวิธกี ารคานวณตาแหน่ง
เวลาประมวลผลสาหรับคานวณแฮชชิงฟงั ก์ชนั ่
เวลาประมวลผลและ I/O access สาหรับแก้ปญั หา Collision
40
การจัดการแก้ปัญหาระเบียนส่ วนล้น
Handing Overflow
Open address คือ ภายในเนื้อทีอ่ ขงแฟ้มสุม่ มีเฉพาะ Home
bucket อย่างเดียวเก็บทัง้ ระเบียนปกติและส่วนระเบียน ส่วนล้นปะปนกัน
Separate Overflows แบ่งเนื้อทีแ่ ฟ้มข้อมูลออกเป็ น 2 ส่วน คือ
Home bucket และ overflow bucket โดยให้ overflow
bucket เป็ นทีเ่ ก็บระเบียนส่วนล้นโดยเฉพาะ
41
เทคนิคที่ใช้ในการจัดการปัญหา collision
Linear probing
Double Hazing
Synonym Chaining
42
Linear probing
33
Key
hash
43
Double Hazing
44
Synonym Chaining
45